diff --git a/devTools/types/FC/arcology.d.ts b/devTools/types/FC/arcology.d.ts index f664bd929405a38c09b5d21988ab55f57dbe0245..ca632f6f171d1c35719aefae5db47bac73680c5c 100644 --- a/devTools/types/FC/arcology.d.ts +++ b/devTools/types/FC/arcology.d.ts @@ -94,7 +94,7 @@ declare namespace FC { }; FSEgyptianRevivalist: { noun: "Egyptian Revivalism", adj: "Egyptian Revivalist", deco: "Egyptian Revivalist", - research: undefined, SMR: true, policy: "Law", choice: undefined + research: undefined, SMR: true, policy: "Law" | "IncestPolicy", choice: undefined }; FSEdoRevivalist: { noun: "Edo Revivalism", adj: "Edo Revivalist", deco: "Edo Revivalist", @@ -170,7 +170,7 @@ declare namespace FC { type FSDecoName<T extends FutureSociety> = FutureSocietyIdMap[T]["deco"] extends undefined ? never : `${T}Decoration` type FSSMRName<T extends FutureSociety> = FutureSocietyIdMap[T]["SMR"] extends undefined ? never : `${T}SMR` - type FSPolicyValue = number | "unset"; + type FSPolicyValue = number | null; type FSName<T extends string> = T extends `FS${infer Name}` ? Name : never; @@ -205,7 +205,6 @@ declare namespace FC { FSSupremacistRace: Zeroable<Race>; FSSubjugationistRace: Zeroable<Race>; - FSEgyptianRevivalistIncestPolicy: number; FSEgyptianRevivalistInterest: number; FSRepopulationFocusPregPolicy: number; @@ -224,9 +223,75 @@ declare namespace FC { Record<FutureSocietyHasResearchAny, Bool> & Record<FSDecoName<FutureSociety>, number> & Record<FSSMRName<FutureSociety>, Bool> & - Record<FutureSocietyPolicyAny, Bool> & + Record<FutureSocietyPolicyAny, number> & Record<FutureSocietyChoiceAny, number>; type ArcologyState = ArcologyStateBase & ArcologyStateFS; + const enum RevivalSocietyFreezeValue { + Antebellum, + Arabian, + Aztec, + Chinese, + Edo, + Egyptian, + NeoImperial, + Roman, + } + interface RevivalSocietyFreeze extends Record<string, RevivalSocietyFreezeValue> { + ANTEBELLUM: RevivalSocietyFreezeValue.Antebellum, + ARABIAN: RevivalSocietyFreezeValue.Arabian, + AZTEC: RevivalSocietyFreezeValue.Aztec, + CHINESE: RevivalSocietyFreezeValue.Chinese, + EDO: RevivalSocietyFreezeValue.Edo, + EGYPTIAN: RevivalSocietyFreezeValue.Egyptian, + NEO_IMPERIAL: RevivalSocietyFreezeValue.NeoImperial, + ROMAN: RevivalSocietyFreezeValue.Roman, + } + + const enum FSHumanDevelopmentVector { + /** Positive for mature preference, negative for young */ + Age, + /** Positive for statuesque preference, negative for petite */ + Height, + /** Positive for decadence preference negative for physical idealist */ + Weight, + /** Positive for transformation preference, negative for body purism */ + Modifications, + /** Positive for expansionist preference, negative for slim */ + Assets, + /** Positive for professionalism, negative for intellectual dependency */ + Intelligence, + /** Positive for radicalism, negative for fundamentalism */ + Gender, + /** Positive for repopulation, negative for eugenics */ + Breeding, + /** Positive for paternalism, negative for degradationism */ + LifeQuality, + } + + interface FSHumanDevelopmentVectorFreeze extends Record<string, FSHumanDevelopmentVector> { + AGE: FSHumanDevelopmentVector.Age, + HEIGHT: FSHumanDevelopmentVector.Height, + WEIGHT: FSHumanDevelopmentVector.Weight, + MODIFICATIONS: FSHumanDevelopmentVector.Modifications, + ASSETS: FSHumanDevelopmentVector.Assets, + INTELLIGENCE: FSHumanDevelopmentVector.Intelligence, + GENDER: FSHumanDevelopmentVector.Gender, + BREEDING: FSHumanDevelopmentVector.Breeding, + LIFE_QUALITY: FSHumanDevelopmentVector.LifeQuality, + } + + interface SlaveSocialEffect { + /** FS */ + FS: FutureSocietyDeco | ""; + /** positive or negative value (a small integer, or a fraction between -1 and 1) */ + magnitude: number; + /** for compact/list mode (plain text string) */ + shortDesc: string; + /** for expanded mode (HTML string) */ + longDesc: string; + /** true if the effect is only due to the facility she's assigned to */ + creditFacility?: boolean; + } } diff --git a/js/003-data/constants.js b/js/003-data/constants.js index 14e2e482b5bc5ee165b3a202a9f80f0a8d9c4340..0e0e29c0b54564406b7505b007bf520875d8fb8c 100644 --- a/js/003-data/constants.js +++ b/js/003-data/constants.js @@ -133,3 +133,34 @@ globalThis.Fetish = Object.freeze({ globalThis.Constant = Object.freeze({ MASTERED_XP: 200, }); + +/** + * @type {FC.RevivalSocietyFreeze} + * @enum {number} + */ +globalThis.RevivalSociety = Object.freeze({ + ANTEBELLUM: 0, + ARABIAN: 1, + AZTEC: 2, + CHINESE: 3, + EDO: 4, + EGYPTIAN: 5, + NEO_IMPERIAL: 6, + ROMAN: 7 +}); + +/** + * @type {FC.FSHumanDevelopmentVectorFreeze} + * @enum {number} + */ +globalThis.FSHumanVector = Object.freeze({ + AGE: 0, + HEIGHT: 1, + WEIGHT: 2, + MODIFICATIONS: 3, + ASSETS: 4, + INTELLIGENCE: 5, + GENDER: 6, + BREEDING: 7, + LIFE_QUALITY: 8, +}); diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js index a6c0b55fd8ad9631150e3faf57d39249a75bab1d..fa2e590df7737d3983ad3b5a3ada8aec9dfd0138 100644 --- a/js/003-data/gameVariableData.js +++ b/js/003-data/gameVariableData.js @@ -174,6 +174,7 @@ App.Data.defaultGameStateVariables = { // Stable Diffusion settings aiApiUrl: "http://localhost:7860", aiCfgScale: 5, + aiCustomImagePrompts: 0, aiCustomStyleNeg: "", aiCustomStylePos: "", aiHeight: 768, @@ -1090,6 +1091,8 @@ App.Data.resetOnNGPlus = { /** @type {FC.Bool} */ youngerOvaries: 0, /** @type {FC.Bool} */ + immortalOvaries: 0, + /** @type {FC.Bool} */ sympatheticOvaries: 0, /** @type {FC.Bool} */ fertilityImplant: 0, diff --git a/js/003-data/policiesData.js b/js/003-data/policiesData.js index ef54b5dcc7aab7dd14fdd5590596fc3ed2edfa75..3f3c88b9fd344cd758bcaaeacb9d1a7e5475c03b 100644 --- a/js/003-data/policiesData.js +++ b/js/003-data/policiesData.js @@ -330,10 +330,10 @@ App.Data.Policies.Selection = { v => { let minAge = V.minimumSlaveAge; let maxAge = V.retirementAge - 1 > 60 ? 60 : V.retirementAge - 1;/* problems do occur if idealAge can be set to over 60 */ - if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + if (FutureSocieties.isActive("FSMaturityPreferentialist")) { minAge = 30; } - if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + if (FutureSocieties.isActive("FSYouthPreferentialist")) { maxAge = 29; } V.targetIdealAge = Math.clamp(v, minAge, maxAge); @@ -350,7 +350,7 @@ App.Data.Policies.Selection = { return `you are using your personal influence to make ${num(V.targetIdealAge)} the most sexually appealing age. The current perceived ideal age is ${V.idealAge}.`; }, onRepeal: function() { - if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + if (FutureSocieties.isActive("FSMaturityPreferentialist")) { if (V.idealAge < 30) { V.idealAge = 30; } @@ -370,7 +370,7 @@ App.Data.Policies.Selection = { title: "Incest Encouragement", text: "you will use your personal influence to spur interest in incest.", activatedText: "you are using your personal influence to spur interest in incest.", - get requirements() { return (V.arcologies[0].FSEgyptianRevivalist === "unset"); }, + get requirements() { return (FutureSocieties.isActive("FSEgyptianRevivalist")); }, } ], "policies.bestialityOpenness": [ @@ -394,7 +394,7 @@ App.Data.Policies.Selection = { title: "Gumjob Fetishism SMR", text: "in order to be sold in your arcology, slaves will need to have their teeth removed.", activatedText: "in order to be sold in your arcology, slaves must have their teeth removed.", - get requirements() { return (V.arcologies[0].FSPaternalist === "unset"); }, + get requirements() { return !FutureSocieties.isActive("FSPaternalist"); }, } ], }, @@ -404,7 +404,7 @@ App.Data.Policies.Selection = { title: "Encourage Refugee Servitude", text: "the image of slavery in your arcology will be softened, encouraging old world refugees to consider slavery.", activatedText: "the image of slavery in your arcology is being softened, encouraging old world refugees to consider becoming menial slaves.", - get requirements() { return (V.arcologies[0].FSDegradationist === "unset"); }, + get requirements() { return !FutureSocieties.isActive("FSDegradationist"); }, note: "Will increase immigration of refugees to become menial slaves" } ], @@ -600,7 +600,7 @@ App.Data.Policies.Selection = { title: "Marriage between Owners and Slaves", text: "you will provide a legal basis for citizens to marry their slaves without impacting their rights as slaveowners.", activatedText: "you are providing a legal basis for citizens to marry their slaves without impacting their rights as slaveowners.", - get requirements() { return (V.arcologies[0].FSDegradationist === "unset"); }, + get requirements() { return (!FutureSocieties.isActive("FSDegradationist")); }, get note() { if (V.arcologies[0].FSPaternalist >= 60) { return `Will not damage your reputation due to your arcology's advanced Paternalism`; @@ -871,14 +871,14 @@ App.Data.Policies.Selection = { text += ` and vaginal secretion production.`; return text; }, - get requirements() { return (V.arcologies[0].FSPaternalist === "unset"); }, + get requirements() { return (!FutureSocieties.isActive("FSPaternalist")); }, enable: "bioreactor" }, { title: "Public Arcade Retirement", text: "upon reaching the mandatory retirement age, slaves will be placed in cheap public arcades to be used until useless.", activatedText: "upon reaching the mandatory retirement age, slaves are placed in cheap public arcades to be used until useless.", - get requirements() { return (V.arcologies[0].FSPaternalist === "unset"); }, + get requirements() { return (!FutureSocieties.isActive("FSPaternalist")); }, enable: "arcade" }, { @@ -1092,7 +1092,7 @@ App.Data.Policies.Selection = { activatedTitle: "Mandatory Menial Retirement Age", text: `all slaveowners will be required to pay into accounts to support their slaves as lower-class citizens in retirement.`, get activatedText() { return `you have set your arcology's retirement age for menial slaves at ${V.customMenialRetirementAge}.`; }, - get requirements() { return (V.arcologies[0].FSDegradationist === "unset"); }, + get requirements() { return (!FutureSocieties.isActive("FSDegradationist")); }, note: `Will add upkeep to all menial slaves`, onImplementation: function() { if (V.citizenRetirementTrigger === 0) { V.citizenRetirementTrigger = 1; } }, onRepeal: function() { V.customMenialRetirementAge = 45; } @@ -1122,8 +1122,8 @@ App.Data.Policies.Selection = { activatedText: "you are using your personal influence to spur interest in pregnancy.", get requirements() { return ( - V.arcologies[0].FSRepopulationFocus === "unset" && - V.arcologies[0].FSRestart === "unset" && + !FutureSocieties.isActive("FSRepopulationFocus") && + !FutureSocieties.isActive("FSRestart") && V.seePreg === 1 ); }, @@ -1136,8 +1136,8 @@ App.Data.Policies.Selection = { activatedText: "you are using your personal influence to spur interest in MILFs.", get requirements() { return ( - V.arcologies[0].FSRepopulationFocus === "unset" && - V.arcologies[0].FSRestart === "unset" + !FutureSocieties.isActive("FSRepopulationFocus") && + !FutureSocieties.isActive("FSRestart") ); }, } diff --git a/js/003-data/slaveMods.js b/js/003-data/slaveMods.js index 327fab5f61edac8350c6416c55d1f8a8a7dbf772..f34360a3a19432bc2d7dcbf455c960841d912862 100644 --- a/js/003-data/slaveMods.js +++ b/js/003-data/slaveMods.js @@ -40,161 +40,167 @@ App.Medicine.Modification.Brands = { displayName: "Racial Slur", requirements: function(slave) { return ( - (V.arcologies[0].FSSupremacist !== "unset" && slave.race !== V.arcologies[0].FSSupremacistRace) || - (V.arcologies[0].FSSubjugationist !== "unset" && slave.race === V.arcologies[0].FSSubjugationistRace) + (FutureSocieties.isActive('FSSupremacist') && slave.race !== V.arcologies[0].FSSupremacistRace) || + (FutureSocieties.isActive('FSSubjugationist') && slave.race === V.arcologies[0].FSSubjugationistRace) ); } }, "how much sex $he needs per day": { displayName: "Scores", requirements: function(slave) { - return (V.arcologies[0].FSIntellectualDependency !== "unset"); + return (FutureSocieties.isActive('FSIntellectualDependency')); } }, "$his average slave aptitude test scores": { displayName: "Scores", requirements: function(slave) { - return (V.arcologies[0].FSSlaveProfessionalism !== "unset"); + return (FutureSocieties.isActive('FSSlaveProfessionalism')); } }, "the number of children $he has birthed": { displayName: "Birth Count", requirements: function(slave) { - return (V.arcologies[0].FSRepopulationFocus !== "unset"); + return (FutureSocieties.isActive('FSRepopulationFocus')); } }, "a gender symbol": { displayName: "Gender Symbol", requirements: function(slave) { - return ((V.arcologies[0].FSGenderRadicalist !== "unset") || (V.arcologies[0].FSGenderFundamentalist !== "unset")); + return ((FutureSocieties.isActive('FSGenderRadicalist')) || (FutureSocieties.isActive('FSGenderFundamentalist'))); } }, "$his own personal symbol": { displayName: "Personal Symbol", requirements: function(slave) { - return (V.arcologies[0].FSPaternalist !== "unset"); + return (FutureSocieties.isActive('FSPaternalist')); } }, "a chain symbol": { displayName: "Chain Symbol", requirements: function(slave) { - return (V.arcologies[0].FSDegradationist !== "unset"); + return (FutureSocieties.isActive('FSDegradationist')); } }, "a Vitruvian man": { displayName: "Vitruvian Man", requirements: function(slave) { - return (V.arcologies[0].FSBodyPurist !== "unset"); + return (FutureSocieties.isActive('FSBodyPurist')); } }, "a scalpel": { displayName: "Scalpel", requirements: function(slave) { - return (V.arcologies[0].FSTransformationFetishist !== "unset"); + return (FutureSocieties.isActive('FSTransformationFetishist')); } }, "$his virginity status": { displayName: "Virginity Status", requirements: function(slave) { - return (V.arcologies[0].FSYouthPreferentialist !== "unset"); + return (FutureSocieties.isActive('FSYouthPreferentialist')); } }, "$his sexual skills": { displayName: "Sexual Skill Info", requirements: function(slave) { - return (V.arcologies[0].FSMaturityPreferentialist !== "unset"); + return (FutureSocieties.isActive('FSMaturityPreferentialist')); } }, "$his current height": { displayName: "Current height", requirements: function(slave) { - return ((V.arcologies[0].FSPetiteAdmiration !== "unset") || (V.arcologies[0].FSStatuesqueGlorification !== "unset")); + return ((FutureSocieties.isActive('FSPetiteAdmiration')) || (FutureSocieties.isActive('FSStatuesqueGlorification'))); } }, "$his absolute minimum breast size": { displayName: "Breast Floor", requirements: function(slave) { - return (V.arcologies[0].FSSlimnessEnthusiast !== "unset"); + return (FutureSocieties.isActive('FSSlimnessEnthusiast')); } }, "$his absolute maximum breast size": { displayName: "Breast Ceiling", requirements: function(slave) { - return (V.arcologies[0].FSAssetExpansionist !== "unset"); + return (FutureSocieties.isActive('FSAssetExpansionist')); } }, "$his highest weigh-in": { displayName: "Weight Record", requirements: function(slave) { - return (V.arcologies[0].FSHedonisticDecadence !== "unset"); + return (FutureSocieties.isActive('FSHedonisticDecadence')); } }, "a big helping of your favorite food": { displayName: "Favorite Food", requirements: function(slave) { - return ((V.arcologies[0].FSHedonisticDecadence !== "unset") && V.PC.refreshmentType === 2); + return ((FutureSocieties.isActive('FSHedonisticDecadence')) && V.PC.refreshmentType === 2); } }, "$his body product quality": { displayName: "Product Quality", requirements: function(slave) { - return (V.arcologies[0].FSPastoralist !== "unset"); + return (FutureSocieties.isActive('FSPastoralist')); } }, "$his deadlift record": { displayName: "Deadlift Info", requirements: function(slave) { - return (V.arcologies[0].FSPhysicalIdealist !== "unset"); + return (FutureSocieties.isActive('FSPhysicalIdealist')); } }, "a religious symbol": { displayName: "Religious Symbol", requirements: function(slave) { - return (V.arcologies[0].FSChattelReligionist !== "unset"); + return (FutureSocieties.isActive('FSChattelReligionist')); } }, "the crest of your Republic": { displayName: "Republican Crest", requirements: function(slave) { - return (V.arcologies[0].FSRomanRevivalist !== "unset"); + return (FutureSocieties.isActive('FSRomanRevivalist')); } }, "the symbol of the Aztec gods": { displayName: "Seven Serpents", requirements: function(slave) { - return (V.arcologies[0].FSAztecRevivalist !== "unset"); + return (FutureSocieties.isActive('FSAztecRevivalist')); } }, "the sigil of your Dynasty": { displayName: "Dynastic Sigil", requirements: function(slave) { - return (V.arcologies[0].FSEgyptianRevivalist !== "unset"); + return (FutureSocieties.isActive('FSEgyptianRevivalist')); } }, "the Shogunate's mon": { displayName: "Mon", requirements: function(slave) { - return (V.arcologies[0].FSEdoRevivalist !== "unset"); + return (FutureSocieties.isActive('FSEdoRevivalist')); } }, "a symbol of the Caliphate": { displayName: "Caliphate Symbol", requirements: function(slave) { - return (V.arcologies[0].FSArabianRevivalist !== "unset"); + return (FutureSocieties.isActive('FSArabianRevivalist')); } }, "your Family Crest": { displayName: "Imperial Family Crest", requirements: function(slave) { - return (V.arcologies[0].FSNeoImperialist !== "unset"); + return (FutureSocieties.isActive('FSNeoImperialist')); } }, "your Imperial Seal": { displayName: "Imperial Seal", requirements: function(slave) { - return (V.arcologies[0].FSChineseRevivalist !== "unset"); + return (FutureSocieties.isActive('FSChineseRevivalist')); } }, + "fleur-de-lis": { + displayName: "Fleur-de-lis", + requirements: function(slave) { + return (FutureSocieties.isActive('FSAntebellumRevivalist')); + } + } } }; diff --git a/js/medicine/surgery/addGenitals/freshOvaries.js b/js/medicine/surgery/addGenitals/freshOvaries.js index ad4e6af972feaad66465a51813e091d0f9840d31..efe53de4c9fa9d63b7c0b4bff6a67e9781dc59b9 100644 --- a/js/medicine/surgery/addGenitals/freshOvaries.js +++ b/js/medicine/surgery/addGenitals/freshOvaries.js @@ -39,11 +39,7 @@ App.Medicine.Surgery.Procedures.OFFreshOvaries = class extends App.Medicine.Surg } apply(cheat) { - if (this._slave.ovaryAge >= 47) { - this._slave.ovaryAge = 45; - } else { - this._slave.ovaryAge = -2; // It shouldn't matter if this goes negative as it is just a signal for menopause to occur. - } + this._slave.ovaryAge = Math.clamp(this._slave.ovaryAge - 2, 0, 45); if (this._slave.preg < 0) { this._slave.preg = 0; } diff --git a/js/medicine/surgery/addGenitals/immortalOvaries.js b/js/medicine/surgery/addGenitals/immortalOvaries.js new file mode 100644 index 0000000000000000000000000000000000000000..aa0d887bb54c728cda37201f05e77054f9fe9649 --- /dev/null +++ b/js/medicine/surgery/addGenitals/immortalOvaries.js @@ -0,0 +1,62 @@ +App.Medicine.Surgery.Reactions.ImmortalOvaries = class extends App.Medicine.Surgery.SimpleReaction { + reaction(slave, diff) { + const reaction = super.reaction(slave, diff); + const {He, His, he, his, him} = getPronouns(slave); + const r = []; + + if (slave.ovaryAge >= 45 && this._hasEmotion(slave)) { // use same reactions as freshOvaries - slave doesn't know the difference + if (this._strongKnownFetish(slave, "pregnancy") || slave.origin === "$He sold $himself to you in the hope of someday bearing children.") { + r.push(`${He} leaves the surgery with nothing but a nonspecific ache, yet a familiar warmth, in ${his} lower abdomen, but ${he} knows enough about surgery and sex slaves to know that it means ${he} now has a chance to get pregnant once more. ${He} is <span class="devotion inc">filled with joy</span> whenever ${he} thinks about the fact that ${he}'ll have the chance to feel a life growing within ${him} again. ${He}'s so pleased that ${he} now <span class="trust inc">trusts</span> your plans for ${his} body. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.trust += 4; + reaction.devotion += 5; + } else if (slave.devotion > 50) { + r.push(`${He} leaves the surgery with nothing but a nonspecific ache, yet a familiar warmth, in ${his} lower abdomen, but ${he} knows enough about surgery and sex slaves to know that it means ${he} now has the chance to get pregnant again. ${He}'s <span class="devotion inc">grateful</span> that you think ${him} worthy of extending ${his} fertility, and even a little nervous about how ${he}'ll perform as a mother that has tasted menopause. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + reaction.devotion += 4; + } else if (slave.devotion >= -20) { + r.push(`${He} leaves the surgery with nothing but a nonspecific ache, yet a familiar warmth, in ${his} lower abdomen, but ${he} knows enough about surgery and sex slaves to know that it means ${he} may now be impregnated once more. ${He} understands the realities of ${his} life as a slave, but didn't expect to have ${his} waning fertility renewed. As with all surgery <span class="health dec">${his} health has been slightly affected.</span> ${He} is <span class="trust dec">sensibly fearful</span> of your total power over ${his} body.`); + reaction.trust -= 5; + } else { + r.push(`${He} leaves the surgery with nothing but a nonspecific ache, yet a familiar warmth, in ${his} lower abdomen, but ${he} knows enough about surgery and sex slaves to believe you have forced fertility upon ${him} again. ${He} does not understand the realities of ${his} life as a slave at a core level, so ${he}'s <span class="devotion dec">terrified and angry</span> at the potential that ${he}'ll be forced to carry children. As with all surgery <span class="health dec">${his} health has been slightly affected.</span> ${He} is <span class="trust dec">sensibly fearful</span> of your total power over ${his} body.`); + reaction.trust -= 5; + reaction.devotion -= 5; + } + } else { + r.push(`${He} leaves the surgery with nothing but a nonspecific ache in ${his} lower abdomen; it won't be clear to ${him} that menopause will never be a concern for ${him} again. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`); + } + if (slave.geneMods.immortality === 1) { + r.push(`${His} immortal body accepts the genetically modified organs as its own without protest.`); + } else { + r.push(`A temporary regimen of anti-rejection drugs is required while ${his} body integrates the extensively genetically modified organs, leaving ${him} feeling <span class="health dec">rather ill</span> over the following week.`); + healthDamage(slave, 10); + slave.chem += 100; + } + + reaction.longReaction.push(r); + return reaction; + } +}; + +App.Medicine.Surgery.Procedures.OFImmortalOvaries = class extends App.Medicine.Surgery.Procedure { + get name() { + return "Implant"; + } + + get healthCost() { + return 20; + } + + apply(cheat) { + this._slave.ovaryAge = -100; + if (this._slave.preg < 0) { + this._slave.preg = 0; + } + if (this._slave.pubertyXX === 0 && this._slave.physicalAge >= V.fertilityAge) { + if (V.precociousPuberty === 1) { + this._slave.pubertyAgeXX = this._slave.physicalAge + 1; + } else { + this._slave.pubertyXX = 1; + } + } + return this._assemble(new App.Medicine.Surgery.Reactions.ImmortalOvaries()); + } +}; diff --git a/js/medicine/z001-organFarm/3-organMap.js b/js/medicine/z001-organFarm/3-organMap.js index cc0dea1e7bba8ab48c92703b38adc3ae6f74187e..a37d4550dcc4e44070ca20cde7816fae55bf4373 100644 --- a/js/medicine/z001-organFarm/3-organMap.js +++ b/js/medicine/z001-organFarm/3-organMap.js @@ -88,8 +88,34 @@ App.Medicine.OrganFarm.Organs = new Map([ new App.Medicine.OrganFarm.OrganImplantAction({ name: "Implant", surgeryProcedure: App.Medicine.Surgery.Procedures.OFFreshOvaries, - canImplant: s => (s.mpreg !== 0 || s.ovaries !== 0) && s.bellyImplant === -1 && s.physicalAge < 70, - implantError: s => s.physicalAge >= 70 ? "This slave's body is too old to handle pregnancy." : "This slave lacks a viable womb.", + canImplant: s => (s.mpreg !== 0 || s.ovaries !== 0) && s.bellyImplant === -1 && s.physicalAge < 70 && s.ovaryAge >= 45, + implantError: s => + s.ovaryAge < 45 + ? "This slave's ovaries are too young to benefit from rejuvenation." + : s.physicalAge >= 70 + ? "This slave's body is too old to handle pregnancy." + : "This slave lacks a viable womb.", + }) + ] + })], + ["immortalOvaries", + new App.Medicine.OrganFarm.Organ({ + name: "Immortal Ovaries", + tooltip: "requires a womb for successful implantation", + cost: 50000, time: 20, + canGrow: () => V.immortalOvaries === 1, + dependencies: ["ovaries", "pigOvaries", "dogOvaries", "horseOvaries", "cowOvaries", "mpreg", "mpregPig", "mpregDog", "mpregHorse", "mpregCow"], + actions: [ + new App.Medicine.OrganFarm.OrganImplantAction({ + name: "Implant", + surgeryProcedure: App.Medicine.Surgery.Procedures.OFImmortalOvaries, + canImplant: s => (s.mpreg !== 0 || s.ovaries !== 0) && s.bellyImplant === -1 && s.physicalAge < 70 && s.ovaryAge >= 0, + implantError: s => + s.ovaryAge < 0 + ? "This slave already has immortal ovaries." + : s.physicalAge >= 70 + ? "This slave's body is too old to handle pregnancy." + : "This slave lacks a viable womb.", }) ] })], diff --git a/src/002-config/fc-version.js b/src/002-config/fc-version.js index 8ba8b42c6dd49778c7533faf261f22414e45ace3..0774ad19271af2bde0d1275f753623595a9e2013 100644 --- a/src/002-config/fc-version.js +++ b/src/002-config/fc-version.js @@ -2,5 +2,5 @@ App.Version = { base: "0.10.7.1", // The vanilla version the mod is based off of, this should never be changed. pmod: "4.0.0-alpha.27", commitHash: null, - release: 1204, // When getting close to 2000, please remove the check located within the onLoad() function defined at line five of src/js/eventHandlers.js. + release: 1208, // When getting close to 2000, please remove the check located within the onLoad() function defined at line five of src/js/eventHandlers.js. }; diff --git a/src/004-base/facility.js b/src/004-base/facility.js index d292356c61fbbf2fdd17ca3b484573759cd6107c..773f6c4e2120071424b3e07527d4caa8c377a1c5 100644 --- a/src/004-base/facility.js +++ b/src/004-base/facility.js @@ -34,7 +34,7 @@ App.Entity.Facilities.Job = class { checkRequirements(slave) { let r = []; if (this.desc.publicSexUse && - (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && V.arcologies[0].FSRestart !== "unset")) { + (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && FutureSocieties.isActive('FSRestart'))) { r.push(`${slave.slaveName} is for private use only.`); } if (!this.desc.fuckdollAccepted && slave.fuckdoll > 0) { diff --git a/src/005-passages/managePassages.js b/src/005-passages/managePassages.js index 9531718e2596d0ed4281c50667a184334487db85..17d80261a60166cf27268cfd8a73484e8e16b73a 100644 --- a/src/005-passages/managePassages.js +++ b/src/005-passages/managePassages.js @@ -8,7 +8,9 @@ new App.DomPassage("Main", }, ["jump-to-safe", "jump-from-safe"] ); -new App.DomPassage("Future Society", () => { return App.UI.fsPassage(); }, ["jump-to-safe", "jump-from-safe"]); +new App.DomPassage("Future Society", () => {return App.UI.fsPassage();}, ["jump-to-safe", "jump-from-safe"]); + +new App.DomPassage("Slave FS Conformance", () => App.FSConformance.slaveConformancePassage(), ["jump-to-safe", "jump-from-safe"]); new App.DomPassage("Manage Penthouse", () => { diff --git a/src/Corporation/manageCorporation.js b/src/Corporation/manageCorporation.js index 5a1e1364c775dd2211f86f4bfd4740877a44f6fe..c48c19e5967dd6a801845c87061177b75b8058c8 100644 --- a/src/Corporation/manageCorporation.js +++ b/src/Corporation/manageCorporation.js @@ -634,7 +634,7 @@ App.Corporate.manage = function() { const links = []; for (const [key, race] of App.Data.misc.filterRacesPublic) { - if (V.arcologies[0].FSSubjugationistRace !== key || V.arcologies[0].FSSubjugationist === "unset") { + if (V.arcologies[0].FSSubjugationistRace !== key || !FutureSocieties.isActive('FSSubjugationist')) { links.push(App.UI.DOM.link(race, () => { V.corp.SpecRaces = corpBlacklistRace(key, 1); V.corp.SpecToken -= 1; @@ -649,7 +649,7 @@ App.Corporate.manage = function() { if (V.corp.SpecToken >= 3) { const links = []; for (const [key, race] of App.Data.misc.filterRacesPublic) { - if (V.arcologies[0].FSSupremacistRace !== key || V.arcologies[0].FSSupremacist === "unset") { + if (V.arcologies[0].FSSupremacistRace !== key || !FutureSocieties.isActive('FSSupremacist')) { links.push(App.UI.DOM.link(race, () => { V.corp.SpecRaces = corpBlacklistRace(key, 0); V.corp.SpecToken -= 3; @@ -664,8 +664,8 @@ App.Corporate.manage = function() { } } - if ((!jsDef(V.corp.SpecNationality)) && V.corp.DivExtra > 0 && (V.arcologies[0].FSEdoRevivalist !== "unset" || V.arcologies[0].FSChineseRevivalist !== "unset")) { - if (V.arcologies[0].FSEdoRevivalist !== "unset") { + if ((!jsDef(V.corp.SpecNationality)) && V.corp.DivExtra > 0 && (FutureSocieties.isActive('FSEdoRevivalist') || FutureSocieties.isActive('FSChineseRevivalist'))) { + if (FutureSocieties.isActive('FSEdoRevivalist')) { addDiv(el, `Since you are pursuing Edo Revivalism, slaves who are `, App.UI.DOM.link("Japanese", () => { V.corp.SpecNationality = "Japanese"; V.corp.SpecToken -= 1; @@ -673,7 +673,7 @@ App.Corporate.manage = function() { refresh(); })); } - if (V.arcologies[0].FSChineseRevivalist !== "unset") { + if (FutureSocieties.isActive('FSChineseRevivalist')) { addDiv(el, `Since you are pursuing Chinese Revivalism, slaves who are `, App.UI.DOM.link("Chinese", () => { V.corp.SpecNationality = "Chinese"; V.corp.SpecToken -= 1; @@ -981,7 +981,7 @@ App.Corporate.manage = function() { if (!jsDef(V.corp.SpecMuscle) && V.corp.DivMenial > 0) { // This used to be V.generalUpgradeMuscle, it is the Menial division's specialization const links = []; - if (V.arcologies[0].FSPhysicalIdealist === "unset") { + if (!FutureSocieties.isActive('FSPhysicalIdealist')) { links.push(App.UI.DOM.link("Weak", () => { V.corp.SpecMuscle = 2; V.corp.SpecToken -= 1; @@ -1255,7 +1255,7 @@ App.Corporate.manage = function() { } else if (V.corp.SpecWeight === 2) { r.push("makes slaves diet."); if (V.corp.SpecTimer === 0) { - if (V.corp.SpecToken > 0 && V.arcologies[0].FSHedonisticDecadence === "unset") { + if (V.corp.SpecToken > 0 && !FutureSocieties.isActive('FSHedonisticDecadence')) { links.push(App.UI.DOM.link("Apply Strict Diet", () => { V.corp.SpecWeight = 1; V.corp.SpecTimer = 2; @@ -1286,7 +1286,7 @@ App.Corporate.manage = function() { } else if (V.corp.SpecWeight === 5) { r.push("aims for plump slaves."); if (V.corp.SpecTimer === 0) { - if (V.corp.SpecToken > 0 && V.arcologies[0].FSPhysicalIdealist === "unset") { + if (V.corp.SpecToken > 0 && !FutureSocieties.isActive('FSPhysicalIdealist')) { links.push(App.UI.DOM.link("Fatten Slaves", () => { V.corp.SpecWeight = 6; V.corp.SpecTimer = 2; @@ -1339,7 +1339,7 @@ App.Corporate.manage = function() { // Don't think this deserves the added cost of a token, unlike slaves getting ripped r.push("aims to have weak slaves."); if (V.corp.SpecTimer === 0) { - if (V.arcologies[0].FSPhysicalIdealist === "unset") { + if (!FutureSocieties.isActive('FSPhysicalIdealist')) { links.push(App.UI.DOM.link("Aim for Frail", () => { V.corp.SpecMuscle = 1; V.corp.SpecTimer = 2; @@ -1350,7 +1350,7 @@ App.Corporate.manage = function() { } else if (V.corp.SpecMuscle === 3) { r.push("is aiming for slaves with soft muscles."); if (V.corp.SpecTimer === 0) { - if (V.arcologies[0].FSPhysicalIdealist === "unset") { + if (!FutureSocieties.isActive('FSPhysicalIdealist')) { links.push(App.UI.DOM.link("Aim for Weak", () => { V.corp.SpecMuscle = 2; V.corp.SpecTimer = 2; @@ -2082,7 +2082,7 @@ App.Corporate.manage = function() { const r = []; if (V.corp.SpecRaces.includes(race)) { r.push(capRace); - if (!(V.arcologies[0].FSSubjugationist !== "unset" && V.arcologies[0].FSSubjugationistRace !== race)) { + if (!(FutureSocieties.isActive('FSSubjugationist') && V.arcologies[0].FSSubjugationistRace !== race)) { if (V.corp.SpecRaces.length > 1 && V.corp.SpecTimer === 0) { const blacklistLength = App.Data.misc.filterRacesPublic.size - V.corp.SpecRaces.length; const needsToken = blacklistLength % 4 === 0; diff --git a/src/Mods/Catmod/events/CMRESS/catWorship.js b/src/Mods/Catmod/events/CMRESS/catWorship.js index 55666a4f2a24d1855d9d460bb7f8d46c351e5b22..6b79a3eef9964c9d9838c682b2863bde4cfe43e3 100644 --- a/src/Mods/Catmod/events/CMRESS/catWorship.js +++ b/src/Mods/Catmod/events/CMRESS/catWorship.js @@ -1,7 +1,7 @@ App.Events.CMRESSCatWorship = class CMRESSCatWorship extends App.Events.BaseEvent { eventPrerequisites() { return [ - () => V.arcologies[0].FSEgyptianRevivalist !== "unset" + () => FutureSocieties.isActive('FSEgyptianRevivalist') ]; } diff --git a/src/Mods/Catmod/events/CMRESS/spoiledCat.js b/src/Mods/Catmod/events/CMRESS/spoiledCat.js index 402b7e9e7f1ba5d6312de202e03ea89194b84a46..fc3ef87ab395eb6c99e3a1121a86d1f8485128d5 100644 --- a/src/Mods/Catmod/events/CMRESS/spoiledCat.js +++ b/src/Mods/Catmod/events/CMRESS/spoiledCat.js @@ -1,7 +1,7 @@ App.Events.CMRESSSpoiledCat = class CMRESSSpoiledCat extends App.Events.BaseEvent { eventPrerequisites() { return [ - () => V.arcologies[0].FSEgyptianRevivalist !== "unset" + () => FutureSocieties.isActive('FSEgyptianRevivalist') ]; } diff --git a/src/Mods/Catmod/events/nonRandom/bodypuristprotest.js b/src/Mods/Catmod/events/nonRandom/bodypuristprotest.js index 014791f4479585151f36d91a66f05f2c4e942f24..3e6e253c58f09f0f541d2ef8cf31e8e3d10b4bf5 100644 --- a/src/Mods/Catmod/events/nonRandom/bodypuristprotest.js +++ b/src/Mods/Catmod/events/nonRandom/bodypuristprotest.js @@ -12,21 +12,21 @@ App.Events.SEBodyPuristProtest = class SEBodyPuristProtest extends App.Events.Ba let r = []; V.puristRiotDone = 1; - if (V.arcologies[0].FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist')) { repX(-1000, "event"); V.arcologies[0].prosperity -= 3; } - if (V.arcologies[0].FSBodyPurist === "unset") { + if (!FutureSocieties.isActive('FSBodyPurist')) { repX(-500, "event"); V.arcologies[0].prosperity -= 1; } r.push(`You awake in the morning to the sound of yelling and screaming outside your penthouse. Quickly getting dressed, you grab your handgun${(S.Bodyguard) ? ", order your bodyguard to follow behind you," : ""} and rush outside to find the source of the commotion. As you open the doors to the penthouse, you're greeted with the sight of`); - if (V.arcologies[0].FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist')) { r.push(`a massive, angry mob holding up signs reading "TRAITOR" and "VERMIN-LOVER", along with emblems of Vitruvian men. You can see what appears to be an effigy of a catgirl burning in the back, and the huge crowd appears to have completely surrounded the penthouse.`); } - if (V.arcologies[0].FSBodyPurist === "unset") { + if (!FutureSocieties.isActive('FSBodyPurist')) { r.push(`a small group of angry, shouting men and women holding up signs reading "BEAST FUCKER" and emblems of Vitruvian men.`); } r.push(`The angry crowd is held back from your penthouse door by`); @@ -49,7 +49,7 @@ App.Events.SEBodyPuristProtest = class SEBodyPuristProtest extends App.Events.Ba App.Events.addParagraph(node, r); r = []; r.push(`One of the riot officers glances back at you, awaiting an order. This situation seems fairly calm for the moment, but it could easily explode with the wrong words.`); - if (V.arcologies[0].FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist')) { r.push(`You're going to need to convince people that natural catgirls are acceptable, or else these protests are just going to get worse in your Body Purist arcology.`); } App.Events.addParagraph(node, r); @@ -59,11 +59,11 @@ App.Events.SEBodyPuristProtest = class SEBodyPuristProtest extends App.Events.Ba if (V.PC.skill.warfare >= 80) { choices.push(new App.Events.Result(`Use your fearsome reputation to intimidate them into surrender`, intimidate)); } - if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + if (FutureSocieties.isActive('FSEgyptianRevivalist')) { choices.push(new App.Events.Result(`Calm the crowd through appealing to the Gods`, gods)); } - if (V.arcologies[0].FSTransformationFetishist !== "unset") { + if (FutureSocieties.isActive('FSTransformationFetishist')) { choices.push(new App.Events.Result(`Allude to democracy and remind the crowd of your arcology's popular love of transformation`, transform)); } choices.push(new App.Events.Result(`Apologize and promise to discontinue Project N`, discontinue)); @@ -82,13 +82,13 @@ App.Events.SEBodyPuristProtest = class SEBodyPuristProtest extends App.Events.Ba const frag = new DocumentFragment(); let r = []; r.push(`"People, please!" You shout over at the assembled crowd. You start explaining to them that your catgirls are fully biological and not spliced from existent humans, making them totally natural and pure in their own right.`); - if (V.arcologies[0].FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist')) { r.push(`Your explanation is cut off by someone in the back angrily shouting "BEAST FUCKER", a chant which is taken up by the rest of the massive group and totally drowns you out. After a few minutes of trying to get a word in, you throw up your hands and return to your penthouse. These protests will inevitably cause <span class="red">economic disruption,</span> but at least they probably won't cause any direct damage and will burn out after a week or two.`); } - if (V.arcologies[0].FSBodyPurist === "unset") { + if (!FutureSocieties.isActive('FSBodyPurist')) { r.push(`The crowd is small enough that you're able to get in your explanations, and even engage in a brief back-and-forth conversation with the leader of the purist group. After showing him design documents and explaining what you know of the inner workings of the Project N process, the crowd's anger seems noticeably blunted, and they seem more willing to accept 'natural' catgirls. The crowd <span class="green">disperses,</span> and the blonde man even says that he'll be willing to give your ideas about 'natural' catgirls a chance - after all, there's a lot worse that happens in the Free Cities than genetic engineering.`); } - if (V.arcologies[0].FSBodyPurist === "unset") { + if (!FutureSocieties.isActive('FSBodyPurist')) { repX(500, "event"); V.arcologies[0].prosperity += 1; } @@ -103,11 +103,11 @@ App.Events.SEBodyPuristProtest = class SEBodyPuristProtest extends App.Events.Ba App.Events.addParagraph(frag, r); r = []; r.push(`You tell the frozen crowd that you'll be continuing your work on Project N, and that if any one of them ever shows up at your house again, let alone with a gun, it'll be the worst, and last, decision they ever make. A few people at the back start to break off from the crowd. You turn back to your penthouse and walk inside as the crowd disintegrates. You have work to do, and you get the feeling these people <span class="green">aren't going to bother you again.</span>`); - if (V.arcologies[0].FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist')) { repX(1000, "event"); V.arcologies[0].prosperity += 3; } - if (V.arcologies[0].FSBodyPurist === "unset") { + if (!FutureSocieties.isActive('FSBodyPurist')) { repX(500, "event"); V.arcologies[0].prosperity += 1; } @@ -139,11 +139,11 @@ App.Events.SEBodyPuristProtest = class SEBodyPuristProtest extends App.Events.Ba r.pop() + ".", `"How dare you insult the purity of my designs!" You yell at the watching crowd, who seem to have grown quieter. "I have neither marred nor corrupted the human form, but instead brought another form of purity into being. Our dynastic ancestors could recognize this beauty, and you insult them with these blemishes and affronts!" Perhaps owing to the legitimate belief in Egyptian Revivalism across your arcology, the crowd seems genuinely shamed. People start to break off from the back of the crowd, and after a few minutes the furious cluster of rioters has <span class="green">dispersed,</span> seemingly embarrassed that they'd attack feline icons considered holy by the ancient Egyptians.` ); - if (V.arcologies[0].FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist')) { repX(1000, "event"); V.arcologies[0].prosperity += 3; } - if (V.arcologies[0].FSBodyPurist === "unset") { + if (!FutureSocieties.isActive('FSBodyPurist')) { repX(500, "event"); V.arcologies[0].prosperity += 1; } @@ -167,11 +167,11 @@ App.Events.SEBodyPuristProtest = class SEBodyPuristProtest extends App.Events.Ba const frag = new DocumentFragment(); let r = []; r.push(`You loudly shout an apology over the crowd, which seems to get their attention and briefly calm their skirmishing. Having got the rioter's attention, you promise that you'll discontinue work on Project N and make any further biomodification efforts fully open to the public. Your outright agreement to their demands obviously surprises the rioting crowd, but it's enough to <span class="green">calm them down,</span> and the raised rifles drop after a few seconds of consideration. The blonde man leading the crowd tells you that they'll be back if you try this again, although you privately doubt they'd have the momentum for a second large protest if you were to quietly re-start Project N later. Shortly after, the crowd starts to disperse, leaving your officers exhaling in relief. Unfortunately, that'll put all the money you invested into Project N <span class="red">down the drain.</span>`); - if (V.arcologies[0].FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist')) { repX(1000, "event"); V.arcologies[0].prosperity += 3; } - if (V.arcologies[0].FSBodyPurist === "unset") { + if (!FutureSocieties.isActive('FSBodyPurist')) { repX(500, "event"); V.arcologies[0].prosperity += 1; } diff --git a/src/Mods/Catmod/events/nonRandom/bodypuristriot.js b/src/Mods/Catmod/events/nonRandom/bodypuristriot.js index 81973958e9c7170b8b60ce12ce6499eb10722161..7be858fdeedbc8b0987c2e08f59cd6b9524e2c54 100644 --- a/src/Mods/Catmod/events/nonRandom/bodypuristriot.js +++ b/src/Mods/Catmod/events/nonRandom/bodypuristriot.js @@ -12,22 +12,22 @@ App.Events.SEBodyPuristRiot = class SEBodyPuristRiot extends App.Events.BaseEven let r = []; V.puristRiotDone = 1; - if (V.arcologies[0].FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist')) { repX(-2000, "event"); cashX(-18000, "Body purist Riots"); V.arcologies[0].prosperity -= 4; } - if (V.arcologies[0].FSBodyPurist === "unset") { + if (!FutureSocieties.isActive('FSBodyPurist')) { repX(-500, "event"); cashX(-5000, "Body purist Riots"); V.arcologies[0].prosperity -= 1; } r.push(`You awake in the morning to the sound of yelling and screaming outside your penthouse. Quickly getting dressed, you grab your handgun${(S.Bodyguard) ? ", order your bodyguard to follow behind you," : ""} and rush outside to find the source of the commotion. As you open the doors to the penthouse, you're greeted with the sight of`); - if (V.arcologies[0].FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist')) { r.push(`an enormous, heavily armed mob surrounding you. The sea of shouting, furious faces looks to have completely encircled the penthouse, and almost all of them are holding batons, rifles, and whatever else they seem to have been able to get their hands on. Some are even holding up signs bearing the orange sun logo of the Sons of Sekhmet.`); } - if (V.arcologies[0].FSBodyPurist === "unset") { + if (!FutureSocieties.isActive('FSBodyPurist')) { r.push(`a small group of furious men and women carrying batons and rifles. Some are holding up signs reading "BEAST FUCKER", symbols of Vitruvian men, or painted-on orange Suns that you recognize as the logo of the Sons of Sekhmet.`); } r.push(`The furious crowd is being held back from your gates by`); @@ -50,7 +50,7 @@ App.Events.SEBodyPuristRiot = class SEBodyPuristRiot extends App.Events.BaseEven App.Events.addParagraph(node, r); r = []; r.push(`One of the riot officers glances back at you, awaiting an order. This whole situation is just waiting to explode.`); - if (V.arcologies[0].FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist')) { r.push(`You're going to need to convince people that natural catgirls are acceptable, or else these riots are just going to get worse in your Body Purist arcology.`); } App.Events.addParagraph(node, r); @@ -61,10 +61,10 @@ App.Events.SEBodyPuristRiot = class SEBodyPuristRiot extends App.Events.BaseEven if (V.PC.skill.warfare >= 80) { choices.push(new App.Events.Result(`Use your fearsome reputation to intimidate them into surrender`, reputation)); } - if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + if (FutureSocieties.isActive('FSEgyptianRevivalist')) { choices.push(new App.Events.Result(`Calm the crowd through appealing to the Gods`, egypt)); } - if (V.arcologies[0].FSTransformationFetishist !== "unset") { + if (FutureSocieties.isActive('FSTransformationFetishist')) { choices.push(new App.Events.Result(`Allude to democracy and remind the crowd of your arcology's popular love of transformation`, transform)); } choices.push(new App.Events.Result(`Apologize and promise to discontinue Project N`, stop)); @@ -74,10 +74,10 @@ App.Events.SEBodyPuristRiot = class SEBodyPuristRiot extends App.Events.BaseEven const frag = new DocumentFragment(); let r = []; r.push(`"Shut this nonsense down." You tell the guard officer glancing at you. That's all it takes for the scene to explode into catastrophic violence on both sides. As the guards slam forward into the crowd and the explosive cracks of gunfire going off light out the outside of your penthouse, you retreat back inside the doors before anyone can get a shot off at you. Inside, you walk up to a glass-windowed observatory and safely watch from above`); - if (V.arcologies[0].FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist')) { r.push(`as pure chaos unfolds below, fires from thrown bombs already starting to spread as your guards and the rioters transform the upper decks of the arcology into a <span class="red">wartorn hellscape.</span>`); } - if (V.arcologies[0].FSBodyPurist === "unset") { + if (!FutureSocieties.isActive('FSBodyPurist')) { r.push(`as the riot scene erupts into violent struggle, heavily-armed officers beating rioters into submission with electrobatons as the riot groups split into violent clusters, firing wildly into groups of advancing soldiers. <span class="red">This isn't going to look good.</span>`); } App.Events.addParagraph(frag, r); @@ -88,10 +88,10 @@ App.Events.SEBodyPuristRiot = class SEBodyPuristRiot extends App.Events.BaseEven const frag = new DocumentFragment(); let r = []; r.push(`You raise your hands and tell everyone to just calm down, and that you can surely work this all out. In response, one of the furious crowd members shouts that you're a traitor, which is immediately taken up by the rest of the crowd. Raising your voice over them, you try and tell them that there's nothing wrong with natural catgirls, that the claims of the Sons of Sekhmet were wildly exaggerated by delusional terrorists, and that you only withheld information to let the scientists work in peace, but if anyone's listening, they stop when someone hurls a molotov cocktail into the defensive line, exploding with a burst of flames that singes your face. Before you can get in another word, both sides <span class="red">explode into violence,</span> forcing you to retreat back into the penthouse as the rioters and guards start firing into one another, transforming the upper deck of your arcology into an instant warzone. This isn't going to look good, but at least you <span class="green">saved a little face</span> trying to calm them down on camera before the violence erupted.`); - if (V.arcologies[0].FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist')) { repX(1000, "event"); } - if (V.arcologies[0].FSBodyPurist === "unset") { + if (!FutureSocieties.isActive('FSBodyPurist')) { repX(250, "event"); } App.Events.addParagraph(frag, r); @@ -105,12 +105,12 @@ App.Events.SEBodyPuristRiot = class SEBodyPuristRiot extends App.Events.BaseEven App.Events.addParagraph(frag, r); r = []; r.push(`You tell the frozen crowd that you'll be continuing your work on Project N, and that if any one of them ever shows up at your house again with a gun, it'll be the worst, and last, decision they ever make. A few people at the back start to break off from the crowd. You turn back to your penthouse and walk inside as the crowd disintegrates. You have work to do, and you get the feeling these people <span class="green">aren't going to bother you again.</span>`); - if (V.arcologies[0].FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist')) { repX(2000, "event"); cashX(18000, "Body purist riots stopped"); V.arcologies[0].prosperity += 4; } - if (V.arcologies[0].FSBodyPurist === "unset") { + if (!FutureSocieties.isActive('FSBodyPurist')) { repX(500, "event"); cashX(5000, "Body purist riots stopped"); V.arcologies[0].prosperity += 1; @@ -123,12 +123,12 @@ App.Events.SEBodyPuristRiot = class SEBodyPuristRiot extends App.Events.BaseEven const frag = new DocumentFragment(); let r = []; r.push(`Even surrounded by violence held at bay only by a thin line of heavily-armed guards, you maintain the serene aura of a priest. Unperturbed, you turn and order one of the terrified slaves watching in the doorway to fetch your designs. "Have you forgotten the faces of the Gods, you sinners and fools? Beauty lies not simply in the perfection of the human form, but also in the life of our hands and the transcendence of our purity. Gaze upon my works and tell me you do not see within them the light of Bastet!" You chastise the furious crowd like they're children, and as the slave runs back out, you snatch the designs from her hands and hold up an early technical document from Nieskowitz, showing a serene-looking catgirl in full pharonic attire, portrayed as an Egyptian deity. "How dare you insult the purity of my designs!" You yell at the watching crowd, who seem to have grown quieter. "I have neither marred nor corrupted the human form, but instead brought another form of purity into being. Our dynastic ancestors could recognize this beauty, and you insult them with these blemishes and affronts!" Perhaps owing to the legitimate belief in Egyptian Revivalism across your arcology, the crowd seems genuinely shamed. People start to break off from the back of the crowd, and after a few minutes the furious cluster of rioters has <span class="green">dispersed,</span> seemingly embarrassed that they'd attack feline icons considered holy by the ancient Egyptians.`); - if (V.arcologies[0].FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist')) { repX(4000, "event"); cashX(18000, "Body purist riots stopped"); V.arcologies[0].prosperity += 4; } - if (V.arcologies[0].FSBodyPurist === "unset") { + if (!FutureSocieties.isActive('FSBodyPurist')) { repX(1000, "event"); cashX(5000, "Body purist riots stopped"); V.arcologies[0].prosperity += 1; @@ -151,12 +151,12 @@ App.Events.SEBodyPuristRiot = class SEBodyPuristRiot extends App.Events.BaseEven const frag = new DocumentFragment(); let r = []; r.push(`You loudly shout an apology over the crowd, which seems to get their attention and briefly calm their skirmishing. Having got the rioter's attention, you promise that you'll discontinue work on Project N and make any further biomodification efforts fully open to the public. Your outright agreement to their demands obviously surprises the rioting crowd, but it's enough to <span class="green">calm them down,</span> and the raised rifles drop after a few seconds of consideration. The blonde man leading the crowd tells you that they'll be back if you try this again, although you privately doubt they'd have the momentum for a second riot if you were to quietly re-start Project N later. Shortly after, the crowd starts to disperse, leaving your officers exhaling in relief. Unfortunately, that'll put all the money you invested into Project N <span class="red">down the drain.</span>`); - if (V.arcologies[0].FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist')) { repX(2000, "event"); cashX(18000, "Body purist riots stopped"); V.arcologies[0].prosperity += 4; } - if (V.arcologies[0].FSBodyPurist === "unset") { + if (!FutureSocieties.isActive('FSBodyPurist')) { repX(500, "event"); cashX(5000, "Body purist riots stopped"); V.arcologies[0].prosperity += 1; diff --git a/src/Mods/Catmod/events/nonRandom/projectNInitialized.js b/src/Mods/Catmod/events/nonRandom/projectNInitialized.js index d790bf750ad0683ec26cd997f4caf5eb1c843e93..d607aaffde47779da365c0df6f2209f117c87e46 100644 --- a/src/Mods/Catmod/events/nonRandom/projectNInitialized.js +++ b/src/Mods/Catmod/events/nonRandom/projectNInitialized.js @@ -20,13 +20,13 @@ App.Events.SEProjectNInitialized = class SEProjectNInitialized extends App.Event function announce() { let r = []; r.push(`You hold a press release the next day with a number of prominent journalists in the arcology noting the research team that you've gathered for project N, and its intention to create the world's first fully natural catgirl. Even though you've got absolutely no results to show and the project is still in its fully theoretical stage, the attending journalists react to the news with obvious <span class="green">excitement</span> and you spend the next few hours answering conceptual questions that run on arcology media for the next couple of days, which <span class="green">helps</span> promote your public image. When you return to the lab, Dr. Nieskowitz is clearly irritated, telling you that the media attention is almost guaranteed to <span class="red">slow down</span> progress in these early stages.`); - if (V.arcologies[0].FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist')) { r.push(`This announcement absolutely <span class="red">horrifies</span> the body purists in your arcology.`); } repX(2000, "event"); V.projectN.public = 1; V.bodyPuristRiot = 1; - if (V.arcologies[0].FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist')) { repX(-4000, "event"); } return r; diff --git a/src/Mods/Catmod/generateCatgirl.js b/src/Mods/Catmod/generateCatgirl.js index 6a5cf096343f60b6c2bb467704a03317ee0fcf86..1995d90fb159716c164395c409db212636a88d5b 100644 --- a/src/Mods/Catmod/generateCatgirl.js +++ b/src/Mods/Catmod/generateCatgirl.js @@ -40,22 +40,22 @@ globalThis.growCatgirl = function(sex, { // they're genetically engineered and very expensive, so go ahead and make their genes conform a bit better to local expectations... const arc = V.arcologies[0]; - if (arc.FSStatuesqueGlorification !== "unset") { + if (FutureSocieties.isActive('FSStatuesqueGlorification', arc)) { slave.natural.height = Math.min(slave.natural.height + 10, 274); slave.height = Height.forAge(slave.natural.height, slave); - } else if (arc.FSPetiteAdmiration !== "unset") { + } else if (FutureSocieties.isActive('FSPetiteAdmiration', arc)) { slave.natural.height = Math.max(slave.natural.height - 10, 85); slave.height = Height.forAge(slave.natural.height, slave); } - if (arc.FSIntellectualDependency !== "unset") { + if (FutureSocieties.isActive('FSIntellectualDependency', arc)) { slave.intelligence = Math.max(slave.intelligence - 15, -100); - } else if (arc.FSSlaveProfessionalism !== "unset") { + } else if (FutureSocieties.isActive('FSSlaveProfessionalism', arc)) { slave.intelligence = Math.min(slave.intelligence + 15, 100); } - if (arc.FSAssetExpansionist !== "unset") { + if (FutureSocieties.isActive('FSAssetExpansionist', arc)) { slave.natural.boobs += 500; slave.boobs += 500; - } else if (arc.FSSlimnessEnthusiast !== "unset") { + } else if (FutureSocieties.isActive('FSSlimnessEnthusiast', arc)) { if (slave.natural.boobs > 500) { slave.natural.boobs = 200; slave.boobs = 200; diff --git a/src/Mods/SecExp/js/authorityReport.js b/src/Mods/SecExp/js/authorityReport.js index 412ab5667d244e24cbbfa9e5271d33410d3b4d10..adf7f9def1ea0881763982c729a7f8e979d6120a 100644 --- a/src/Mods/SecExp/js/authorityReport.js +++ b/src/Mods/SecExp/js/authorityReport.js @@ -233,19 +233,19 @@ App.Mods.SecExp.authorityReport = function() { r.push(`The high security of the arcology does not allow free space for slaves to organize and agitate.`); slave -= 1; } - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { r.push(`Many slaves are so disgusted by your degradationist society, that they are willing to rise up against their masters to escape.`); slave += 30; - } else if (V.arcologies[0].FSPaternalist !== "unset") { + } else if (FutureSocieties.isActive('FSPaternalist')) { r.push(`Many slaves are content to live in your paternalist society.`); slave -= 5; } else { slave += 5; } - if (V.arcologies[0].FSRestart !== "unset") { + if (FutureSocieties.isActive('FSRestart')) { r.push(`Many slaves are worried by your eugenics projects and some are pushed towards radicalization.`); slave += 30; - } else if (V.arcologies[0].FSRepopulationFocus !== "unset") { + } else if (FutureSocieties.isActive('FSRepopulationFocus')) { r.push(`Many slaves are pleasantly happy of your repopulation effort, affording them the freedom to reproduce.`); slave -= 5; } else { @@ -269,10 +269,11 @@ App.Mods.SecExp.authorityReport = function() { } const militia = V.SecExp.edicts.defense.militia; - const militarizedSociety = [ + // WARNING the variable meaning is the opposite to its name + const militarizedSociety = !(new App.Utils.Arcology()).fsActiveSome( 'FSRomanRevivalist', 'FSAztecRevivalist', 'FSEgyptianRevivalist', 'FSEdoRevivalist', 'FSArabianRevivalist', 'FSChineseRevivalist', - 'FSNeoImperialist', 'FSAntebellumRevivalist'].every((FS) => V.arcologies[0][FS] === "unset"); + 'FSNeoImperialist', 'FSAntebellumRevivalist'); if (militia >= 1) { if (militia >= 4) { r.push(`${!militarizedSociety ? 'Many' : 'Some'} of your citizens are offended by your ${militia === 5 ? 'extreme' : ''} militarization of the arcology's society.`); @@ -285,18 +286,18 @@ App.Mods.SecExp.authorityReport = function() { citizen += !militarizedSociety ? 10 : -5; } } - if (V.arcologies[0].FSNull !== "unset") { + if (FutureSocieties.isActive('FSNull')) { r.push(`Many of your more conservative citizens do not enjoy the cultural freedom you afford the residents of the arcology.`); citizen += either(20, 30); } - if (V.arcologies[0].FSRestart !== "unset") { + if (FutureSocieties.isActive('FSRestart')) { if (CSratio > 2 || CSratio > 1) { r.push(`Your citizens are not happy with the ${CSratio > 2 ? 'noticeable' : ''} lack of slaves compared to their numbers.`); citizen += CSratio > 2 ? 20 : 15; } else if (CSratio < 0.5) { citizen -= 5; } - } else if (V.arcologies[0].FSRepopulationFocus !== "unset") { + } else if (FutureSocieties.isActive('FSRepopulationFocus')) { if (CSratio < 0.5 || CSratio < 1) { r.push(`Your citizens are not happy about being outbred by the slaves of the arcology.`); citizen += CSratio < 0.5 ? 20 : 15; diff --git a/src/Mods/SecExp/js/edicts.js b/src/Mods/SecExp/js/edicts.js index 708b3d8a24ebc2c7c5a6d7af22c563950149eb75..abdc3cd32747b2c3daba62362fad28df402b6694 100644 --- a/src/Mods/SecExp/js/edicts.js +++ b/src/Mods/SecExp/js/edicts.js @@ -183,7 +183,7 @@ App.Mods.SecExp.edicts = function() { repeal: [ { text: "slaves are able access a special security service in case of mistreatment.", - conditional: V.arcologies[0].FSPaternalist !== "unset" && V.SecExp.edicts.slaveWatch === 1, + conditional: FutureSocieties.isActive('FSPaternalist') && V.SecExp.edicts.slaveWatch === 1, set: function() { V.SecExp.edicts.slaveWatch = 0; }, @@ -192,7 +192,7 @@ App.Mods.SecExp.edicts = function() { implement: [ { text: "slaves will be able access a special security service in case of mistreatment.", - conditional: V.arcologies[0].FSPaternalist !== "unset" && V.SecExp.edicts.slaveWatch === 0, + conditional: FutureSocieties.isActive('FSPaternalist') && V.SecExp.edicts.slaveWatch === 0, set: function() { V.SecExp.edicts.slaveWatch = 1; }, diff --git a/src/Mods/SecExp/js/reportingRelatedFunctions.js b/src/Mods/SecExp/js/reportingRelatedFunctions.js index b85a1506892846e57e57d93d0c8bca38110431a3..31b92c8c39373045834219300388b3cfe9dbba6d 100644 --- a/src/Mods/SecExp/js/reportingRelatedFunctions.js +++ b/src/Mods/SecExp/js/reportingRelatedFunctions.js @@ -738,20 +738,20 @@ App.Mods.SecExp.commanderEffectiveness = function(passage) { break; case "citizen": if (inHandler) { - if (V.arcologies[0].FSDegradationist === "unset" && V.arcologies[0].FSPaternalist === "unset") { + if (!FutureSocieties.isActive('FSDegradationist') && !FutureSocieties.isActive('FSPaternalist')) { militiaMod += 0.15; slaveMod -= 0.15; - } else if (V.arcologies[0].FSPaternalist !== "unset") { + } else if (FutureSocieties.isActive('FSPaternalist')) { militiaMod += 0.15; slaveMod += 0.10; - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (FutureSocieties.isActive('FSDegradationist')) { militiaMod += 0.15; slaveMod -= 0.35; } - if (V.arcologies[0].FSRomanRevivalist !== "unset" || V.arcologies[0].FSNeoImperialist !== "unset") { + if (FutureSocieties.isActive('FSRomanRevivalist') || FutureSocieties.isActive('FSNeoImperialist')) { mercMod += 0.10; SFMod += 0.10; - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSAntebellumRevivalist')) { militiaMod += 0.15; } else { mercMod -= 0.10; @@ -763,36 +763,36 @@ App.Mods.SecExp.commanderEffectiveness = function(passage) { } else { r.push(`One of your volunteers was the commander.`); - if (V.arcologies[0].FSAntebellumRevivalist !== "unset" && V.arcologies[0].FSAntebellumRevivalistLaw2 === 1) { + if (FutureSocieties.policyActive('FSAntebellumRevivalist', 'Law2')) { if (App.Mods.SecExp.battle.deployedUnits('militia') >= 1) { r.push(`Your citizens' militia units are extremely proud that one of their own is leading the defense force of the city.`); } if (App.Mods.SecExp.battle.deployedUnits('slaves') >= 1) { - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { r.push(`Because of your degradationist society,`); if (App.Mods.SecExp.battle.deployedUnits('militia') >= 1) { r.push(`however,`); } r.push(`your slave soldiers are deeply distrustful of the new leader.`); - } else if (V.arcologies[0].FSPaternalist !== "unset") { + } else if (FutureSocieties.isActive('FSPaternalist')) { r.push(`Thanks to your paternalistic society, your slave soldiers trust your chosen citizen to treat them as more than cannon fodder.`); } } - } else if (V.arcologies[0].FSDegradationist === "unset" && V.arcologies[0].FSPaternalist === "unset") { + } else if (FutureSocieties.isActive('FSDegradationist') && FutureSocieties.isActive('FSPaternalist')) { if (App.Mods.SecExp.battle.deployedUnits('militia') >= 1) { r.push(`Your volunteers are honored and pleased that one of their own is leading the defense force of the city.`); } if (App.Mods.SecExp.battle.deployedUnits('slaves') >= 1) { r.push(`Your slaves${(App.Mods.SecExp.battle.deployedUnits('militia') >= 1) ? `, however,` : ``}are not thrilled by the news.`); } - } else if (V.arcologies[0].FSPaternalist !== "unset") { + } else if (FutureSocieties.isActive('FSPaternalist')) { if (App.Mods.SecExp.battle.deployedUnits('militia') >= 1) { r.push(`Your volunteers are honored and pleased that one of their own is leading the defense force of the city.`); } if (App.Mods.SecExp.battle.deployedUnits('slaves') >= 1) { r.push(`Thanks to your paternalistic society, your slave soldiers trust your chosen citizen to treat them as more than cannon fodder.`); } - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (FutureSocieties.isActive('FSDegradationist')) { if (App.Mods.SecExp.battle.deployedUnits('militia') >= 1) { r.push(`Your volunteers are honored and pleased that one of their own is leading the defense force of the city.`); } @@ -804,20 +804,20 @@ App.Mods.SecExp.commanderEffectiveness = function(passage) { r.push(`your slave soldiers are deeply distrustful of the new leader.`); } } - if (V.arcologies[0].FSRomanRevivalist !== "unset" && App.Mods.SecExp.battle.deployedUnits('mercs') >= 1) { + if (FutureSocieties.isActive('FSRomanRevivalist') && App.Mods.SecExp.battle.deployedUnits('mercs') >= 1) { r.push(`Since you decided to revive old Rome, many of your citizens took on themselves to educate themselves in martial matters, because of this your mercenaries feel safe enough in the hands of one of your volunteers.`); - } else if (V.arcologies[0].FSNeoImperialist !== "unset" && App.Mods.SecExp.battle.deployedUnits('mercs') >= 1) { + } else if (FutureSocieties.isActive('FSNeoImperialist') && App.Mods.SecExp.battle.deployedUnits('mercs') >= 1) { r.push(`Since having instituted an Imperial society, your citizens have become adept at modern warfare and your hardened mercenaries feel far more comfortable with one of your Imperial Knights in command.`); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset" && V.arcologies[0].FSAntebellumRevivalistLaw2 === 1 && App.Mods.SecExp.battle.deployedUnits('mercs') >= 1) { + } else if (FutureSocieties.policyActive('FSAntebellumRevivalist', 'Law2') && App.Mods.SecExp.battle.deployedUnits('mercs') >= 1) { r.push(`Since you have revived the Antebellum South and legally sanctioned citizens' militias, your hardened mercenaries feel safe enough in the hands of one of your experienced volunteers.`); } else if (App.Mods.SecExp.battle.deployedUnits('mercs') >= 1) { r.push(`Your mercenaries are not thrilled to be lead by a civilian without any formal martial training or education.`); } - if (V.arcologies[0].FSRomanRevivalist !== "unset" && V.SF.Toggle && V.SF.Active >= 1 && V.SecExp.war.deploySF) { + if (FutureSocieties.isActive('FSRomanRevivalist') && V.SF.Toggle && V.SF.Active >= 1 && V.SecExp.war.deploySF) { r.push(`Since you decided to revive old Rome, many of your citizens took on themselves to educate themselves in martial matters, because of this your soldiers feel safe enough in the hands of one of your volunteers.`); - } else if (V.arcologies[0].FSNeoImperialist !== "unset" && App.Mods.SecExp.battle.deployedUnits('mercs') >= 1) { + } else if (FutureSocieties.isActive('FSNeoImperialist') && App.Mods.SecExp.battle.deployedUnits('mercs') >= 1) { r.push(`Since having instituted an Imperial society, your citizens have become adept at modern warfare and the line soldiers feel much more comfortable being commanded by one of your Imperial Knights.`); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset" && V.arcologies[0].FSAntebellumRevivalistLaw2 === 1 && V.SF.Toggle && V.SF.Active >= 1 && V.SecExp.war.deploySF) { + } else if (FutureSocieties.policyActive('FSAntebellumRevivalist', 'Law2') && V.SF.Toggle && V.SF.Active >= 1 && V.SecExp.war.deploySF) { r.push(`Since you have revived the Antebellum South and legally sanctioned citizens' militias, your professional soldiers feel safe enough in the hands of one of your experienced volunteers.`); } else if (V.SF.Toggle && V.SF.Active >= 1 && V.SecExp.war.deploySF) { r.push(`You soldiers are not thrilled to be lead by a civilian without any formal martial training or education.`); @@ -828,12 +828,12 @@ App.Mods.SecExp.commanderEffectiveness = function(passage) { if (inHandler) { mercMod += 0.10; SFMod += 0.10; - if (V.arcologies[0].FSRomanRevivalist !== "unset" || V.arcologies[0].FSNeoImperialist !== "unset") { + if (FutureSocieties.isActive('FSRomanRevivalist') || FutureSocieties.isActive('FSNeoImperialist')) { militiaMod += 0.10; } else { militiaMod -= 0.10; } - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { slaveMod -= 0.35; } atkMod += random(15) * 0.1; @@ -847,12 +847,12 @@ App.Mods.SecExp.commanderEffectiveness = function(passage) { if (V.SF.Toggle && V.SF.Active >= 1 && V.SecExp.war.deploySF) { r.push(`Your soldiers feel more confident going into battle with an experienced commander.`); } - if (V.arcologies[0].FSRomanRevivalist !== "unset" && App.Mods.SecExp.battle.deployedUnits('militia') >= 1) { + if (FutureSocieties.isActive('FSRomanRevivalist') && App.Mods.SecExp.battle.deployedUnits('militia') >= 1) { r.push(`Since you decided to revive old Rome, your volunteers are more willing to trust one of your mercenaries as their leader.`); } else if (App.Mods.SecExp.battle.deployedUnits('militia') >= 1) { r.push(`Your volunteers are not enthusiastic at the prospect of being commanded around by a gun for hire.`); } - if (V.arcologies[0].FSDegradationist !== "unset" && App.Mods.SecExp.battle.deployedUnits('slaves') >= 1) { + if (FutureSocieties.isActive('FSDegradationist') && App.Mods.SecExp.battle.deployedUnits('slaves') >= 1) { r.push(`Because of your degradationist society, your slave soldiers are highly distrustful of the gun for hire you forced them to accept as leader.`); } } @@ -861,12 +861,12 @@ App.Mods.SecExp.commanderEffectiveness = function(passage) { if (inHandler) { mercMod += 0.10; SFMod += 0.15; - if (V.arcologies[0].FSRomanRevivalist !== "unset" || V.arcologies[0].FSNeoImperialist !== "unset") { + if (FutureSocieties.isActive('FSRomanRevivalist') || FutureSocieties.isActive('FSNeoImperialist')) { militiaMod += 0.10; } else { militiaMod -= 0.10; } - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { slaveMod -= 0.35; } atkMod += random(30) * 0.1; @@ -880,16 +880,16 @@ App.Mods.SecExp.commanderEffectiveness = function(passage) { if (V.SF.Toggle && V.SF.Active >= 1 && V.SecExp.war.deploySF) { r.push(`The soldiers of ${V.SF.Lower} obviously approved of your decision.`); } - if (V.arcologies[0].FSRomanRevivalist !== "unset" && App.Mods.SecExp.battle.deployedUnits('militia') >= 1) { + if (FutureSocieties.isActive('FSRomanRevivalist') && App.Mods.SecExp.battle.deployedUnits('militia') >= 1) { r.push(`Since you decided to revive old Rome, your volunteers are more willing to trust one of your soldiers as their leader.`); - } else if (V.arcologies[0].FSNeoImperialist !== "unset" && App.Mods.SecExp.battle.deployedUnits('militia') >= 1) { + } else if (FutureSocieties.isActive('FSNeoImperialist') && App.Mods.SecExp.battle.deployedUnits('militia') >= 1) { r.push(`Under the strict hierarchy of your Imperial society, the militia is more willing to follow the Colonel's commands.`); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset" && V.arcologies[0].FSAntebellumRevivalistLaw2 === 1 && App.Mods.SecExp.battle.deployedUnits('militia') >= 1) { + } else if (FutureSocieties.policyActive('FSAntebellumRevivalist', 'Law2') && App.Mods.SecExp.battle.deployedUnits('militia') >= 1) { r.push(`Your citizens' militias are reluctant to listen to the Colonel's commands, but begrudgingly accept.`); } else if (App.Mods.SecExp.battle.deployedUnits('militia') >= 1) { r.push(`Your volunteers are not enthusiastic at the prospect of being commanded around by an old style military officer.`); } - if (V.arcologies[0].FSDegradationist !== "unset" && App.Mods.SecExp.battle.deployedUnits('slaves') >= 1) { + if (FutureSocieties.isActive('FSDegradationist') && App.Mods.SecExp.battle.deployedUnits('slaves') >= 1) { r.push(`Because of your degradationist society, your slave soldiers are highly distrustful of the soldier you forced them to accept as leader.`); } } diff --git a/src/Mods/SecExp/js/secExp.js b/src/Mods/SecExp/js/secExp.js index dd03896c81512c9c02dd7559b62472db82bb7d6c..48dfe456442483f4ec1599a2721093440bcdf932 100644 --- a/src/Mods/SecExp/js/secExp.js +++ b/src/Mods/SecExp/js/secExp.js @@ -56,14 +56,13 @@ App.Mods.SecExp.generator = (function() { V.SecExp.battles.lastEncounterWeeks = 0; let raider = 25; let oldWorld = 25; let freeCity = 25; let free = 25; // type is the chance out of 100 of an attack of that type happening // the old world attracted by "degenerate" future societies - const setA = [ + const arcInfo = new App.Utils.Arcology(); + const resultA = arcInfo.fsActiveSome( 'FSRomanRevivalist', 'FSEdoRevivalist', 'FSArabianRevivalist', - 'FSChineseRevivalist', 'FSEgyptianRevivalist', 'FSAztecRevivalist']; - const setB = [ + 'FSChineseRevivalist', 'FSEgyptianRevivalist', 'FSAztecRevivalist'); + const resultB = arcInfo.fsActiveSome( 'FSRepopulationFocus', 'FSGenderRadicalist', 'FSPastoralist', - 'FSChattelReligionist', 'FSNeoImperialist', "FSAntebellumRevivalist"]; - const resultA = setA.some((FS) => V.arcologies[0][FS] !== "unset"); - const resultB = setB.some((FS) => V.arcologies[0][FS] !== "unset"); + 'FSChattelReligionist', 'FSNeoImperialist', "FSAntebellumRevivalist"); if (resultA && resultB) { oldWorld += 15; raider -= 5; @@ -81,7 +80,7 @@ App.Mods.SecExp.generator = (function() { raider -= 8; freeCity -= 8; free += 24; - } else if (V.ASlaves > V.ACitizens * 1.2 || V.arcologies[0].FSDegradationist !== "unset") { + } else if (V.ASlaves > V.ACitizens * 1.2 || arcInfo.fsActive('FSDegradationist')) { oldWorld -= 5; raider -= 5; freeCity -= 5; @@ -593,4 +592,3 @@ App.Mods.SecExp.inflictBattleWound = (function() { return doWound; })(); - diff --git a/src/Mods/SpecialForce/AfterActionReport.js b/src/Mods/SpecialForce/AfterActionReport.js index c4120dfb39834a2ab454714d76ad869643775ad7..f476b77e14a267daa11bd05d4978f7096dd3d7cc 100644 --- a/src/Mods/SpecialForce/AfterActionReport.js +++ b/src/Mods/SpecialForce/AfterActionReport.js @@ -471,9 +471,9 @@ App.Mods.SF.AAR = function() { r = []; r.push("As you make your way through the arcology you stop at a"); - if (V.arcologies[0].FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist')) { r.push(`paternalist shop, ${V.SF.Colonel.Core === "cruel" ? "earning a sneer from The Colonel" : "helping The Colonel select some luxurious and relaxing slave treatments"}.`); - } else if (V.arcologies[0].FSPastoralist !== "unset") { + } else if (FutureSocieties.isActive('FSPastoralist')) { r.push(`pastoralist shop, helping The Colonel select a more comfortable breast pump.`); } else { r.push(`shop that catches The Colonel's eye.`); diff --git a/src/arcologyBuilding/shops.js b/src/arcologyBuilding/shops.js index 27ef4c3c1108baef3243f2a85efa4d516bc00a7e..4570471b224d1736fe1d8cbddf36cbc37e2600b6 100644 --- a/src/arcologyBuilding/shops.js +++ b/src/arcologyBuilding/shops.js @@ -103,7 +103,7 @@ App.Arcology.Cell.Shop = class extends App.Arcology.Cell.BaseCell { )); break; case "Gender Fundamentalist": - fragment.append(`dedicated to Gender Fundamentalism. The establishments here are mostly focused on ${A.FSRestart !== "unset" ? "keeping slaves attractively feminine. There are shops offering all kinds of treatments, drugs, clothes, and furniture to satisfy even the most discerning lady " : "citizen reproduction with slaves. There are shops offering all kinds of treatments, drugs, clothes, and furniture to facilitate the successful impregnation of one's chattel, along with a variety of beauty products to keep them soft and feminine"}. `, + fragment.append(`dedicated to Gender Fundamentalism. The establishments here are mostly focused on ${FutureSocieties.isActive('FSRestart', A) ? "keeping slaves attractively feminine. There are shops offering all kinds of treatments, drugs, clothes, and furniture to satisfy even the most discerning lady " : "citizen reproduction with slaves. There are shops offering all kinds of treatments, drugs, clothes, and furniture to facilitate the successful impregnation of one's chattel, along with a variety of beauty products to keep them soft and feminine"}. `, App.UI.DOM.linkReplace("Get a massage", `You decide to put in an appearance at a tenant business, and the massage parlors are of course very eager to offer you complimentary services. The masseuse is very well-trained, and not at all a sex toy with poor massage skills as a veneer for handjob services. ${He} releases the muscle soreness from your latest workout, and uses ${his} delicate touch to bring you to an enjoyable orgasm; ${he} ${ V.PC.dick !== 0 @@ -158,9 +158,9 @@ App.Arcology.Cell.Shop = class extends App.Arcology.Cell.BaseCell { `Many of them recognize you, and it's immediately apparent that you have your choice of pretty much every retired slave present. You select the prettiest and make out with ${him} for a while, among many admirers, until you feel like bringing ${him} over to a nearby bench and doing ${him}. ${ V.PC.dick === 0 ? `${He}'s as eager as a teenager to have a lesbian experience in public, and can't stop giggling as you fuck.` - : A.FSGenderFundamentalist !== "unset" + : FutureSocieties.isActive('FSGenderFundamentalist', A) ? `Like many recently retired slaves in your arcology, ${he}'s gotten pregnant as a free ${woman}, and it's supercharged ${his} sex drive. No matter what you do to ${him}, ${he} just wants more.` - : A.FSGenderRadicalist !== "unset" + : FutureSocieties.isActive('FSGenderRadicalist', A) ? `${He}'s got a big dick, and clearly has close friends among the other recently retired ${girl}s, but is very willing to be your bottom, especially in public.` : `${He} was horny to begin with, but the foreplay and the naughtiness of doing it out in public has ${him} as eager as a teenager, and ${he} goes wild.` }`)); diff --git a/src/art/artJS.js b/src/art/artJS.js index a99ad1ea29d56c31d252685aae39d048d100f912..5fa703a85ddfbf472fbb3badaa10451086137dd8 100644 --- a/src/art/artJS.js +++ b/src/art/artJS.js @@ -455,7 +455,7 @@ async function renderAIArt(slave, imageSize) { const imageData = await App.Art.GenAI.imageDB.getImage(slave.custom.aiImageId); imgElement.setAttribute("src", imageData.data); } catch (e) { - console.error(e); + return Promise.reject(e); } return imgElement; @@ -481,21 +481,27 @@ App.Art.aiArtElement = function(slave, imageSize) { } makeSpinner(container); - // Refresh on click - function refresh() { + /** Refresh on click + * @param {boolean} retry should we retry image generation or not? + */ + function refresh(retry) { renderAIArt(slave, imageSize).then((imgElement) => { jQuery(container).empty().append(imgElement); makeSpinner(container); + }).catch(() => { + if (retry) { + updateAndRefresh(); + } }); } function updateAndRefresh() { - const imageGenerator = new App.Art.GenAI.StableDiffusionClient(V.aiApiUrl); + const imageGenerator = new App.Art.GenAI.StableDiffusionClient(); container.classList.add("refreshing"); imageGenerator.updateSlave(slave).then(() => { - refresh(); + refresh(false); container.classList.remove("refreshing"); }).catch(error => { @@ -513,12 +519,9 @@ App.Art.aiArtElement = function(slave, imageSize) { if (slave.custom.aiImageId === null) { updateAndRefresh(); + } else { + refresh(true); } - - renderAIArt(slave, imageSize).then((imgElement) => { - jQuery(container).empty().append(imgElement); - makeSpinner(container); - }); return container; }; diff --git a/src/art/genAI/imageDB.js b/src/art/genAI/imageDB.js index 992c4872043f6df7b213fbe5fd3d84c67e0ed509..0323db9090947cf51a78903218082318191e8c42 100644 --- a/src/art/genAI/imageDB.js +++ b/src/art/genAI/imageDB.js @@ -1,4 +1,5 @@ App.Art.GenAI.imageDB = (function() { + /** @type {IDBDatabase} */ let db; /** @@ -33,12 +34,12 @@ App.Art.GenAI.imageDB = (function() { * @param {Object} imageData - The image data to store * @returns {Promise<number>} Promise object that resolves with the ID of the stored image */ - async function addImage(imageData) { + async function putImage(imageData) { return new Promise((resolve, reject) => { let transaction = db.transaction(['images'], 'readwrite'); let objectStore = transaction.objectStore('images'); - let request = objectStore.add(imageData); + let request = objectStore.put(imageData); request.onsuccess = function() { resolve(request.result); @@ -73,10 +74,60 @@ App.Art.GenAI.imageDB = (function() { }); } + /** + * Remove an image from the IndexedDB + * @param {number} id - The ID of the image to remove + */ + async function removeImage(id) { + return new Promise((resolve, reject) => { + let transaction = db.transaction(['images'], 'readwrite'); + let objectStore = transaction.objectStore('images'); + + let request = objectStore.delete(id); + request.onsuccess = function() { + resolve(); + }; + }); + } + + /** + * Purge all the images from DB + */ + async function clear() { + return new Promise((resolve, reject) => { + let transaction = db.transaction(['images'], 'readwrite'); + let objectStore = transaction.objectStore('images'); + + let request = objectStore.clear(); + request.onsuccess = function() { + resolve(); + }; + }); + } + + /** + * Count the images currently in the DB + * @returns {Promise<number>} + */ + async function count() { + return new Promise((resolve, reject) => { + let transaction = db.transaction(['images'], 'readonly'); + let objectStore = transaction.objectStore('images'); + + let request = objectStore.count(); + request.onsuccess = function() { + resolve(request.result); + }; + }); + } + return { createDB, - addImage, + putImage, getImage, + removeImage, + clear, + count }; })(); diff --git a/src/art/genAI/piercingsPromptPart.js b/src/art/genAI/piercingsPromptPart.js index e760be542a030bc8b704bb425cd5089dd72b2078..e64cef56c8f25685a63ef4e0a14b3322ae714fa3 100644 --- a/src/art/genAI/piercingsPromptPart.js +++ b/src/art/genAI/piercingsPromptPart.js @@ -5,39 +5,39 @@ App.Art.GenAI.PiercingsPromptPart = class PiercingsPromptPart extends App.Art.Ge positive() { let piercingParts = []; if (this.slave.piercing.areola.weight > 0) { - let desc = this.slave.piercing.areola.desc ? (this.slave.piercing.areola.desc + ` `) : ``; + let desc = this.slave.piercing.areola.desc ? (pronounsForSlaveProp(this.slave, this.slave.piercing.areola.desc) + ` `) : ``; piercingParts.push(`${desc}areola piercing`); } if (this.slave.piercing.ear.weight > 0) { - let desc = this.slave.piercing.ear.desc ? (this.slave.piercing.ear.desc + ` `) : ``; + let desc = this.slave.piercing.ear.desc ? (pronounsForSlaveProp(this.slave, this.slave.piercing.ear.desc) + ` `) : ``; piercingParts.push(`${desc}ear piercing`); } if (this.slave.piercing.eyebrow.weight > 0) { - let desc = this.slave.piercing.eyebrow.desc ? (this.slave.piercing.eyebrow.desc + ` `) : ``; + let desc = this.slave.piercing.eyebrow.desc ? (pronounsForSlaveProp(this.slave, this.slave.piercing.eyebrow.desc) + ` `) : ``; piercingParts.push(`${desc}eyebrow piercing`); } if (this.slave.piercing.lips.weight > 0) { - let desc = this.slave.piercing.lips.desc ? (this.slave.piercing.lips.desc + ` `) : ``; + let desc = this.slave.piercing.lips.desc ? (pronounsForSlaveProp(this.slave, this.slave.piercing.lips.desc) + ` `) : ``; piercingParts.push(`${desc}lip piercing`); } if (this.slave.piercing.navel.weight > 0) { - let desc = this.slave.piercing.navel.desc ? (this.slave.piercing.navel.desc + ` `) : ``; + let desc = this.slave.piercing.navel.desc ? (pronounsForSlaveProp(this.slave, this.slave.piercing.navel.desc) + ` `) : ``; piercingParts.push(`${desc}navel piercing`); } if (this.slave.piercing.nipple.weight > 0) { - let desc = this.slave.piercing.nipple.desc ? (this.slave.piercing.nipple.desc + ` `) : ``; + let desc = this.slave.piercing.nipple.desc ? (pronounsForSlaveProp(this.slave, this.slave.piercing.nipple.desc) + ` `) : ``; piercingParts.push(`${desc}nipple piercing`); } if (this.slave.piercing.nose.weight > 0) { - let desc = this.slave.piercing.nose.desc ? (this.slave.piercing.nose.desc + ` `) : ``; + let desc = this.slave.piercing.nose.desc ? (pronounsForSlaveProp(this.slave, this.slave.piercing.nose.desc) + ` `) : ``; piercingParts.push(`${desc}nose piercing`); } if (this.slave.piercing.tongue.weight > 0) { - let desc = this.slave.piercing.tongue.desc ? (this.slave.piercing.tongue.desc + ` `) : ``; + let desc = this.slave.piercing.tongue.desc ? (pronounsForSlaveProp(this.slave, this.slave.piercing.tongue.desc) + ` `) : ``; piercingParts.push(`${desc}tongue piercing`); } if (this.slave.piercing.vagina.weight > 0) { - let desc = this.slave.piercing.vagina.desc ? (this.slave.piercing.vagina.desc + ` `) : ``; + let desc = this.slave.piercing.vagina.desc ? (pronounsForSlaveProp(this.slave, this.slave.piercing.vagina.desc) + ` `) : ``; piercingParts.push(`${desc}labia piercing`); } diff --git a/src/art/genAI/stableDiffusion.js b/src/art/genAI/stableDiffusion.js index 4bd455d76b31681017811bf8e87f92e1c75963da..ad68711605613fe8d2e4dd86dfc5982376ec8e21 100644 --- a/src/art/genAI/stableDiffusion.js +++ b/src/art/genAI/stableDiffusion.js @@ -79,41 +79,121 @@ async function fetchWithTimeout(url, timeout, options) { return response; } +App.Art.GenAI.StableDiffusionClientQueue = class { + constructor() { + /** @type {Array<{slaveID: number, body: string, resolve: function(Object): void, reject: function(string): void}>} */ + this.queue = []; + this.interrupted = false; + } -App.Art.GenAI.StableDiffusionClient = class { /** - * @param {string} apiUrl + * Process the top item in the queue, and continue processing the queue one at a time afterwards + * @private */ - constructor(apiUrl) { - this.apiUrl = apiUrl; + async process() { + while (this.queue.length > 0 && !this.interrupted) { + const top = this.queue.first(); + + // find all the requests for this slave in the queue; we'll satisfy them all at once + // using only the newest data (i.e. the data from the last member) + const satisfied = this.queue.filter(item => item.slaveID === top.slaveID); + console.log(`Fetching image for slave ${top.slaveID}, satisfying ${satisfied.length} requests`); + + const options = { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: satisfied.last().body, + }; + try { + const response = await fetchWithTimeout(`${V.aiApiUrl}/sdapi/v1/txt2img`, 60000, options); + if (!response.ok) { + throw new Error(`Error fetching Stable Diffusion image - status: ${response.status}`); + } + const obj = await response.json(); + satisfied.forEach(item => item.resolve(obj)); + } catch (e) { + satisfied.forEach(item => item.reject(e)); + } + this.queue.delete(...satisfied); + } } /** - * @param {App.Art.GenAI.StableDiffusionSettings} settings - * @returns {Promise<string>} - Base 64 encoded image (could be a jpeg or png) + * await this in order to block until the queue exits the interrupted state + */ + async resumeAfterInterrupt() { + const sleep = () => new Promise(r => setTimeout(r, 10)); + while (this.interrupted) { + await sleep(); + } + } + + /** + * Queue image generation for an entity + * @param {number} slaveID or a unique negative value for non-slave entities + * @param {string} body body of the post request to be sent to txt2img + * @returns {Promise<Object>} + */ + async add(slaveID, body) { + if (this.interrupted) { + await this.resumeAfterInterrupt(); + } + + return new Promise((resolve, reject) => { + this.queue.push({ + slaveID, + body, + resolve, + reject + }); + if (this.queue.length === 1) { + this.process(); // do not await + } + }); + } + + /** + * Stop processing the queue and reject everything in it. */ - async fetchImage(settings) { + async interrupt() { + if (this.interrupted) { // permit nesting and consecutive calls + return; + } + + this.interrupted = true; // pause processing of the queue and don't accept further interrupts + + // tell SD to stop generating the current image const options = { method: "POST", headers: { "Content-Type": "application/json", }, - body: JSON.stringify(settings), }; + try { + await fetchWithTimeout(`${V.aiApiUrl}/sdapi/v1/interrupt`, 1000, options); + } catch { + // ignore errors + } - const response = await fetchWithTimeout(`${this.apiUrl}/sdapi/v1/txt2img`, 60000, options); - if (!response.ok) { - console.error("Error fetching Stable Diffusion image", response); - throw new Error(`Error fetching Stable Diffusion image - status: ${response.status}`); + // reject everything in the queue + for (const item of this.queue) { + item.reject("Stable Diffusion fetch interrupted"); } + this.queue = []; - let parsedRes = await response.json(); - return parsedRes.images[0]; + this.interrupted = false; // resume with next add } +}; +// instantiate global queue +App.Art.GenAI.sdQueue = new App.Art.GenAI.StableDiffusionClientQueue(); + +App.Art.GenAI.StableDiffusionClient = class { /** * @param {FC.SlaveState} slave - * @returns {App.Art.GenAI.StableDiffusionSettings} + * @returns {InstanceType<App.Art.GenAI.StableDiffusionSettings>} */ buildStableDiffusionSettings(slave) { const prompt = buildPrompt(slave); @@ -139,7 +219,18 @@ App.Art.GenAI.StableDiffusionClient = class { */ async fetchImageForSlave(slave) { const settings = this.buildStableDiffusionSettings(slave); - return this.fetchImage(settings); + + // set up a passage switch handler to interrupt image generation if it's incomplete + const oldHandler = App.Utils.PassageSwitchHandler.get(); + App.Utils.PassageSwitchHandler.set(() => { + App.Art.GenAI.sdQueue.interrupt(); + if (oldHandler) { + oldHandler(); + } + }); + + const response = await App.Art.GenAI.sdQueue.add(slave.ID, JSON.stringify(settings)); + return response.images[0]; } /** @@ -150,7 +241,12 @@ App.Art.GenAI.StableDiffusionClient = class { const base64Image = await this.fetchImageForSlave(slave); const mimeType = getMimeType(base64Image); - const imageId = await App.Art.GenAI.imageDB.addImage({data: `data:${mimeType};base64,${base64Image}`}); + const dbrecord = {data: `data:${mimeType};base64,${base64Image}`}; + if (slave.custom.aiImageId !== null) { + dbrecord.id = slave.custom.aiImageId; + } + + const imageId = await App.Art.GenAI.imageDB.putImage(dbrecord); slave.custom.aiImageId = imageId; } }; diff --git a/src/cheats/cheatEditArcology.js b/src/cheats/cheatEditArcology.js index e902ea26605b6fade7eb9b7acfc0ba8b06204442..724a5e47674f807fd39627b10b583374bffbf61f 100644 --- a/src/cheats/cheatEditArcology.js +++ b/src/cheats/cheatEditArcology.js @@ -16,7 +16,7 @@ App.UI.Cheat.arcology = function(num) { } if (num === 0) { - if (arc.FSMaturityPreferentialist !== "unset") { + if (FutureSocieties.isActive('FSMaturityPreferentialist', arc)) { if (V.idealAge < 30) { V.idealAge = 30; } @@ -24,7 +24,7 @@ App.UI.Cheat.arcology = function(num) { V.targetIdealAge = 30; } V.policies.idealAge = 1; - } else if (arc.FSYouthPreferentialist !== "unset") { + } else if (FutureSocieties.isActive('FSYouthPreferentialist', arc)) { if (V.idealAge >= 30) { V.idealAge = 29; } @@ -114,7 +114,7 @@ App.UI.Cheat.arcology = function(num) { for (const FS of Object.keys(App.Data.FutureSociety.records)) { if (arc.hasOwnProperty(FS)) { option = options.addOption(App.Data.FutureSociety.records[FS].noun, FS, arc) - .addValue("Unset", "unset"); + .addValue("Unset", null); if (typeof arc[FS] === "number") { option.showTextBox(); } else { diff --git a/src/cheats/cheatEditNeightbors.js b/src/cheats/cheatEditNeightbors.js index 74a96bd3809b59488312649252b018ffc43ae25a..e718d8b61a40667f9ea1ee13dec49d66f4d92816 100644 --- a/src/cheats/cheatEditNeightbors.js +++ b/src/cheats/cheatEditNeightbors.js @@ -23,7 +23,7 @@ App.UI.Cheat.neighbors = function() { ]; /** @type {FC.ArcologyState} */ const activeArcology = { - name: "Arcology X-", direction: compass.random(), government: govTypes.random(), honeymoon: 0, prosperity: 50, ownership: 50, minority: 20, PCminority: 0, demandFactor: 0, FSSupremacist: "unset", FSSupremacistRace: 0, FSSubjugationist: "unset", FSSubjugationistRace: 0, FSGenderRadicalist: "unset", FSGenderFundamentalist: "unset", FSPaternalist: "unset", FSDegradationist: "unset", FSIntellectualDependency: "unset", FSSlaveProfessionalism: "unset", FSBodyPurist: "unset", FSTransformationFetishist: "unset", FSYouthPreferentialist: "unset", FSMaturityPreferentialist: "unset", FSStatuesqueGlorification: "unset", FSPetiteAdmiration: "unset", FSSlimnessEnthusiast: "unset", FSAssetExpansionist: "unset", FSPastoralist: "unset", FSPhysicalIdealist: "unset", FSChattelReligionist: "unset", FSRomanRevivalist: "unset", FSAztecRevivalist: "unset", FSEgyptianRevivalist: "unset", FSEdoRevivalist: "unset", FSArabianRevivalist: "unset", FSChineseRevivalist: "unset", FSAntebellumRevivalist: "unset", FSNull: "unset", FSRepopulationFocus: "unset", FSHedonisticDecadence: "unset", FSCummunism: "unset", FSIncestFetishist: "unset", FSRestart: "unset", embargo: 1, embargoTarget: -1, influenceTarget: -1, influenceBonus: 0, rival: 0 + name: "Arcology X-", direction: compass.random(), government: govTypes.random(), honeymoon: 0, prosperity: 50, ownership: 50, minority: 20, PCminority: 0, demandFactor: 0, FSSupremacist:null, FSSupremacistRace: 0, FSSubjugationist:null, FSSubjugationistRace: 0, FSGenderRadicalist:null, FSGenderFundamentalist:null, FSPaternalist:null, FSDegradationist:null, FSIntellectualDependency:null, FSSlaveProfessionalism:null, FSBodyPurist:null, FSTransformationFetishist:null, FSYouthPreferentialist:null, FSMaturityPreferentialist:null, FSStatuesqueGlorification:null, FSPetiteAdmiration:null, FSSlimnessEnthusiast:null, FSAssetExpansionist:null, FSPastoralist:null, FSPhysicalIdealist:null, FSChattelReligionist:null, FSRomanRevivalist:null, FSAztecRevivalist:null, FSEgyptianRevivalist:null, FSEdoRevivalist:null, FSArabianRevivalist:null, FSChineseRevivalist:null, FSAntebellumRevivalist:null, FSNull:null, FSRepopulationFocus:null, FSHedonisticDecadence:null, FSCummunism:null, FSIncestFetishist:null, FSRestart:null, embargo: 1, embargoTarget: -1, influenceTarget: -1, influenceBonus: 0, rival: 0 }; if (V.arcologies.length < 4) { diff --git a/src/data/backwardsCompatibility/backwardsCompatibility.js b/src/data/backwardsCompatibility/backwardsCompatibility.js index 6d7bcab2d6347806200658899596aa88d74a2e85..e72f4e5b889ee8b287f3d5a96c795bda67a2dc5f 100644 --- a/src/data/backwardsCompatibility/backwardsCompatibility.js +++ b/src/data/backwardsCompatibility/backwardsCompatibility.js @@ -512,58 +512,58 @@ App.Update.globalVariables = function(node) { } if (typeof V.arcologies[0].FSAztecRevivalist === "undefined") { for (let bci = 0; bci < V.arcologies.length; bci++) { - V.arcologies[bci].FSAztecRevivalist = "unset"; + V.arcologies[bci].FSAztecRevivalist = null; } } if (typeof V.arcologies[0].FSHedonisticDecadence === "undefined") { for (let bci = 0; bci < V.arcologies.length; bci++) { - V.arcologies[bci].FSHedonisticDecadence = "unset"; + V.arcologies[bci].FSHedonisticDecadence = null; V.arcologies[bci].FSHedonisticDecadenceResearch = 0; } } if (typeof V.arcologies[0].FSIntellectualDependency === "undefined") { for (let bci = 0; bci < V.arcologies.length; bci++) { - V.arcologies[bci].FSIntellectualDependency = "unset"; + V.arcologies[bci].FSIntellectualDependency = null; V.arcologies[bci].FSIntellectualDependencyResearch = 0; } } if (typeof V.arcologies[0].FSSlaveProfessionalism === "undefined") { for (let bci = 0; bci < V.arcologies.length; bci++) { - V.arcologies[bci].FSSlaveProfessionalism = "unset"; + V.arcologies[bci].FSSlaveProfessionalism = null; V.arcologies[bci].FSSlaveProfessionalismResearch = 0; } } if (typeof V.arcologies[0].FSPetiteAdmiration === "undefined") { for (let bci = 0; bci < V.arcologies.length; bci++) { - V.arcologies[bci].FSPetiteAdmiration = "unset"; + V.arcologies[bci].FSPetiteAdmiration = null; V.arcologies[bci].FSPetiteAdmirationResearch = 0; } } if (typeof V.arcologies[0].FSStatuesqueGlorification === "undefined") { for (let bci = 0; bci < V.arcologies.length; bci++) { - V.arcologies[bci].FSStatuesqueGlorification = "unset"; + V.arcologies[bci].FSStatuesqueGlorification = null; V.arcologies[bci].FSStatuesqueGlorificationResearch = 0; } } if (typeof V.arcologies[0].FSCummunism === "undefined") { for (let bci = 0; bci < V.arcologies.length; bci++) { - V.arcologies[bci].FSCummunism = "unset"; + V.arcologies[bci].FSCummunism = null; V.arcologies[bci].FSCummunismResearch = 0; } } if (typeof V.arcologies[0].FSIncestFetishist === "undefined") { for (let bci = 0; bci < V.arcologies.length; bci++) { - V.arcologies[bci].FSIncestFetishist = "unset"; + V.arcologies[bci].FSIncestFetishist = null; V.arcologies[bci].FSIncestFetishistResearch = 0; } } for (let bci = 0; bci < V.arcologies.length; bci++) { if (V.arcologies[bci].FSHedonisticDecadence === 0) { - V.arcologies[bci].FSHedonisticDecadence = "unset"; + V.arcologies[bci].FSHedonisticDecadence = null; V.arcologies[bci].FSHedonisticDecadenceResearch = 0; } } - if ( V.arcologies[0].FSRestart !== "unset" && V.playerBredTube) { + if ( V.arcologies[0].FSRestart !== null && V.playerBredTube) { V.playerBred = 2; } } @@ -578,38 +578,38 @@ App.Update.globalVariables = function(node) { government: 1, honeymoon: 0, prosperity: 50, - FSSupremacist: "unset", + FSSupremacist: null, FSSupremacistRace: 0, - FSSubjugationist: "unset", + FSSubjugationist: null, FSSubjugationistRace: 0, - FSGenderRadicalist: "unset", - FSGenderFundamentalist: "unset", - FSPaternalist: "unset", - FSDegradationist: "unset", - FSBodyPurist: "unset", - FSTransformationFetishist: "unset", - FSYouthPreferentialist: "unset", - FSMaturityPreferentialist: "unset", - FSSlimnessEnthusiast: "unset", - FSAssetExpansionist: "unset", - FSPastoralist: "unset", - FSPhysicalIdealist: "unset", - FSChattelReligionist: "unset", - FSRomanRevivalist: "unset", - FSNeoImperialist: "unset", - FSEgyptianRevivalist: "unset", - FSEdoRevivalist: "unset", - FSArabianRevivalist: "unset", - FSChineseRevivalist: "unset", - FSAntebellumRevivalist: "unset", - FSNull: "unset", - FSRepopulationFocus: "unset", - FSRestart: "unset", - FSHedonisticDecadence: "unset", - FSIntellectualDependency: "unset", - FSSlaveProfessionalism: "unset", - FSPetiteAdmiration: "unset", - FSStatuesqueGlorification: "unset", + FSGenderRadicalist: null, + FSGenderFundamentalist: null, + FSPaternalist: null, + FSDegradationist: null, + FSBodyPurist: null, + FSTransformationFetishist: null, + FSYouthPreferentialist: null, + FSMaturityPreferentialist: null, + FSSlimnessEnthusiast: null, + FSAssetExpansionist: null, + FSPastoralist: null, + FSPhysicalIdealist: null, + FSChattelReligionist: null, + FSRomanRevivalist: null, + FSNeoImperialist: null, + FSEgyptianRevivalist: null, + FSEdoRevivalist: null, + FSArabianRevivalist: null, + FSChineseRevivalist: null, + FSAntebellumRevivalist: null, + FSNull: null, + FSRepopulationFocus: null, + FSRestart: null, + FSHedonisticDecadence: null, + FSIntellectualDependency: null, + FSSlaveProfessionalism: null, + FSPetiteAdmiration: null, + FSStatuesqueGlorification: null, embargo: 1, embargoTarget: -1, influenceTarget: -1, @@ -624,11 +624,11 @@ App.Update.globalVariables = function(node) { App.Update.playerArcologyDatatypeCleanup(); // FS { - if ((typeof V.FSSupremacist !== "undefined") && V.FSSupremacist !== "unset") { + if ((typeof V.FSSupremacist !== "undefined") && V.FSSupremacist !== null) { V.arcologies[0].FSSupremacist = V.FSSupremacist; V.arcologies[0].FSSupremacistRace = V.FSSupremacistRace; } else if (typeof V.arcologies[0].FSSupremacist === "undefined") { - V.arcologies[0].FSSupremacist = "unset"; + V.arcologies[0].FSSupremacist = null; } if ((typeof V.FSSupremacistLawME !== "undefined") && V.FSSupremacistLawME !== 0) { V.arcologies[0].FSSupremacistLawME = V.FSSupremacistLawME; @@ -644,11 +644,11 @@ App.Update.globalVariables = function(node) { } else if (V.arcologies[0].FSSupremacistRace === "mixed") { V.arcologies[0].FSSupremacistRace = "mixed race"; } - if ((typeof V.FSSubjugationist !== "undefined") && V.FSSubjugationist !== "unset") { + if ((typeof V.FSSubjugationist !== "undefined") && V.FSSubjugationist !== null) { V.arcologies[0].FSSubjugationist = V.FSSubjugationist; V.arcologies[0].FSSubjugationistRace = V.FSSubjugationistRace; } else if (typeof V.arcologies[0].FSSubjugationist === "undefined") { - V.arcologies[0].FSSubjugationist = "unset"; + V.arcologies[0].FSSubjugationist = null; } if ((typeof V.FSSubjugationistLawME !== "undefined") && V.FSSubjugationistLawME !== 0) { V.arcologies[0].FSSubjugationistLawME = V.FSSubjugationistLawME; @@ -664,30 +664,30 @@ App.Update.globalVariables = function(node) { } else if (V.arcologies[0].FSSubjugationistRace === "mixed") { V.arcologies[0].FSSubjugationistRace = "mixed race"; } - if ((typeof V.FSDegradationist !== "undefined") && V.FSDegradationist !== "unset") { + if ((typeof V.FSDegradationist !== "undefined") && V.FSDegradationist !== null) { V.arcologies[0].FSDegradationist = V.FSDegradationist; } else if (typeof V.arcologies[0].FSDegradationist === "undefined") { - V.arcologies[0].FSDegradationist = "unset"; + V.arcologies[0].FSDegradationist = null; } if ((typeof V.FSDegradationistLaw !== "undefined") && V.FSDegradationistLaw !== 0) { V.arcologies[0].FSDegradationistLaw = V.FSDegradationistLaw; } else if (typeof V.arcologies[0].FSDegradationistLaw === "undefined") { V.arcologies[0].FSDegradationistLaw = 0; } - if ((typeof V.FSPaternalist !== "undefined") && V.FSPaternalist !== "unset") { + if ((typeof V.FSPaternalist !== "undefined") && V.FSPaternalist !== null) { V.arcologies[0].FSPaternalist = V.FSPaternalist; } else if (typeof V.arcologies[0].FSPaternalist === "undefined") { - V.arcologies[0].FSPaternalist = "unset"; + V.arcologies[0].FSPaternalist = null; } if ((typeof V.FSPaternalistLaw !== "undefined") && V.FSPaternalistLaw !== 0) { V.arcologies[0].FSPaternalistLaw = V.FSPaternalistLaw; } else if (typeof V.arcologies[0].FSPaternalistLaw === "undefined") { V.arcologies[0].FSPaternalistLaw = 0; } - if ((typeof V.FSGenderFundamentalist !== "undefined") && V.FSGenderFundamentalist !== "unset") { + if ((typeof V.FSGenderFundamentalist !== "undefined") && V.FSGenderFundamentalist !== null) { V.arcologies[0].FSGenderFundamentalist = V.FSGenderFundamentalist; } else if (typeof V.arcologies[0].FSGenderFundamentalist === "undefined") { - V.arcologies[0].FSGenderFundamentalist = "unset"; + V.arcologies[0].FSGenderFundamentalist = null; } if ((typeof V.FSGenderFundamentalistSMR !== "undefined") && V.FSGenderFundamentalistSMR !== 0) { V.arcologies[0].FSGenderFundamentalistSMR = V.FSGenderFundamentalistSMR; @@ -695,10 +695,10 @@ App.Update.globalVariables = function(node) { V.arcologies[0].FSGenderFundamentalistSMR = 0; } delete V.arcologies[0].FSGenderFundamentalistLaw; - if ((typeof V.FSGenderRadicalist !== "undefined") && V.FSGenderRadicalist !== "unset") { + if ((typeof V.FSGenderRadicalist !== "undefined") && V.FSGenderRadicalist !== null) { V.arcologies[0].FSGenderRadicalist = V.FSGenderRadicalist; } else if (typeof V.arcologies[0].FSGenderRadicalist === "undefined") { - V.arcologies[0].FSGenderRadicalist = "unset"; + V.arcologies[0].FSGenderRadicalist = null; } if (typeof V.arcologies[0].FSGenderRadicalistLawBeauty === "undefined") { V.arcologies[0].FSGenderRadicalistLawBeauty = 0; @@ -708,30 +708,30 @@ App.Update.globalVariables = function(node) { } delete V.arcologies[0].FSGenderRadicalistLawDicks; delete V.arcologies[0].FSGenderRadicalistSMR; - if ((typeof V.FSBodyPurist !== "undefined") && V.FSBodyPurist !== "unset") { + if ((typeof V.FSBodyPurist !== "undefined") && V.FSBodyPurist !== null) { V.arcologies[0].FSBodyPurist = V.FSBodyPurist; } else if (typeof V.arcologies[0].FSBodyPurist === "undefined") { - V.arcologies[0].FSBodyPurist = "unset"; + V.arcologies[0].FSBodyPurist = null; } if ((typeof V.FSBodyPuristLaw !== "undefined") && V.FSBodyPuristLaw !== 0) { V.arcologies[0].FSBodyPuristLaw = V.FSBodyPuristLaw; } else if (typeof V.arcologies[0].FSBodyPuristLaw === "undefined") { V.arcologies[0].FSBodyPuristLaw = 0; } - if ((typeof V.FSPhysicalIdealist !== "undefined") && V.FSPhysicalIdealist !== "unset") { + if ((typeof V.FSPhysicalIdealist !== "undefined") && V.FSPhysicalIdealist !== null) { V.arcologies[0].FSPhysicalIdealist = V.FSPhysicalIdealist; } else if (typeof V.arcologies[0].FSPhysicalIdealist === "undefined") { - V.arcologies[0].FSPhysicalIdealist = "unset"; + V.arcologies[0].FSPhysicalIdealist = null; } if ((typeof V.FSPhysicalIdealistSMR !== "undefined") && V.FSPhysicalIdealistSMR !== 0) { V.arcologies[0].FSPhysicalIdealistSMR = V.FSPhysicalIdealistSMR; } else if (typeof V.arcologies[0].FSPhysicalIdealistSMR === "undefined") { V.arcologies[0].FSPhysicalIdealistSMR = 0; } - if ((typeof V.FSTransformationFetishist !== "undefined") && V.FSTransformationFetishist !== "unset") { + if ((typeof V.FSTransformationFetishist !== "undefined") && V.FSTransformationFetishist !== null) { V.arcologies[0].FSTransformationFetishist = V.FSTransformationFetishist; } else if (typeof V.arcologies[0].FSTransformationFetishist === "undefined") { - V.arcologies[0].FSTransformationFetishist = "unset"; + V.arcologies[0].FSTransformationFetishist = null; } if ((typeof V.FSTransformationFetishistSMR !== "undefined") && V.FSTransformationFetishistSMR !== 0) { V.arcologies[0].FSTransformationFetishistSMR = V.FSTransformationFetishistSMR; @@ -739,10 +739,10 @@ App.Update.globalVariables = function(node) { V.arcologies[0].FSTransformationFetishistSMR = 0; } delete V.arcologies[0].FSTransformationFetishistLaw; - if ((typeof V.FSAssetExpansionist !== "undefined") && V.FSAssetExpansionist !== "unset") { + if ((typeof V.FSAssetExpansionist !== "undefined") && V.FSAssetExpansionist !== null) { V.arcologies[0].FSAssetExpansionist = V.FSAssetExpansionist; } else if (typeof V.arcologies[0].FSAssetExpansionist === "undefined") { - V.arcologies[0].FSAssetExpansionist = "unset"; + V.arcologies[0].FSAssetExpansionist = null; } if ((typeof V.FSAssetExpansionistSMR !== "undefined") && V.FSAssetExpansionistSMR !== 0) { V.arcologies[0].FSAssetExpansionistSMR = V.FSAssetExpansionistSMR; @@ -750,10 +750,10 @@ App.Update.globalVariables = function(node) { V.arcologies[0].FSAssetExpansionistSMR = 0; } delete V.arcologies[0].FSAssetExpansionistLaw; - if ((typeof V.FSSlimnessEnthusiast !== "undefined") && V.FSSlimnessEnthusiast !== "unset") { + if ((typeof V.FSSlimnessEnthusiast !== "undefined") && V.FSSlimnessEnthusiast !== null) { V.arcologies[0].FSSlimnessEnthusiast = V.FSSlimnessEnthusiast; } else if (typeof V.arcologies[0].FSSlimnessEnthusiast === "undefined") { - V.arcologies[0].FSSlimnessEnthusiast = "unset"; + V.arcologies[0].FSSlimnessEnthusiast = null; } if ((typeof V.FSSlimnessEnthusiastSMR !== "undefined") && V.FSSlimnessEnthusiastSMR !== 0) { V.arcologies[0].FSSlimnessEnthusiastSMR = V.FSSlimnessEnthusiastSMR; @@ -763,40 +763,40 @@ App.Update.globalVariables = function(node) { if (typeof V.arcologies[0].FSSlimnessEnthusiastFoodLaw === "undefined") { V.arcologies[0].FSSlimnessEnthusiastFoodLaw = 0; } - if ((typeof V.FSMaturityPreferentialist !== "undefined") && V.FSMaturityPreferentialist !== "unset") { + if ((typeof V.FSMaturityPreferentialist !== "undefined") && V.FSMaturityPreferentialist !== null) { V.arcologies[0].FSMaturityPreferentialist = V.FSMaturityPreferentialist; } else if (typeof V.arcologies[0].FSMaturityPreferentialist === "undefined") { - V.arcologies[0].FSMaturityPreferentialist = "unset"; + V.arcologies[0].FSMaturityPreferentialist = null; } if ((typeof V.FSMaturityPreferentialistLaw !== "undefined") && V.FSMaturityPreferentialistLaw !== 0) { V.arcologies[0].FSMaturityPreferentialistLaw = V.FSMaturityPreferentialistLaw; } else if (typeof V.arcologies[0].FSMaturityPreferentialistLaw === "undefined") { V.arcologies[0].FSMaturityPreferentialistLaw = 0; } - if ((typeof V.FSYouthPreferentialist !== "undefined") && V.FSYouthPreferentialist !== "unset") { + if ((typeof V.FSYouthPreferentialist !== "undefined") && V.FSYouthPreferentialist !== null) { V.arcologies[0].FSYouthPreferentialist = V.FSYouthPreferentialist; } else if (typeof V.arcologies[0].FSYouthPreferentialist === "undefined") { - V.arcologies[0].FSYouthPreferentialist = "unset"; + V.arcologies[0].FSYouthPreferentialist = null; } if ((typeof V.FSYouthPreferentialistLaw !== "undefined") && V.FSYouthPreferentialistLaw !== 0) { V.arcologies[0].FSYouthPreferentialistLaw = V.FSYouthPreferentialistLaw; } else if (typeof V.arcologies[0].FSYouthPreferentialistLaw === "undefined") { V.arcologies[0].FSYouthPreferentialistLaw = 0; } - if ((typeof V.FSPastoralist !== "undefined") && V.FSPastoralist !== "unset") { + if ((typeof V.FSPastoralist !== "undefined") && V.FSPastoralist !== null) { V.arcologies[0].FSPastoralist = V.FSPastoralist; } else if (typeof V.arcologies[0].FSPastoralist === "undefined") { - V.arcologies[0].FSPastoralist = "unset"; + V.arcologies[0].FSPastoralist = null; } if ((typeof V.FSPastoralistLaw !== "undefined") && V.FSPastoralistLaw !== 0) { V.arcologies[0].FSPastoralistLaw = V.FSPastoralistLaw; } else if (typeof V.arcologies[0].FSPastoralistLaw === "undefined") { V.arcologies[0].FSPastoralistLaw = 0; } - if ((typeof V.FSChattelReligionist !== "undefined") && V.FSChattelReligionist !== "unset") { + if ((typeof V.FSChattelReligionist !== "undefined") && V.FSChattelReligionist !== null) { V.arcologies[0].FSChattelReligionist = V.FSChattelReligionist; } else if (typeof V.arcologies[0].FSChattelReligionist === "undefined") { - V.arcologies[0].FSChattelReligionist = "unset"; + V.arcologies[0].FSChattelReligionist = null; } if ((typeof V.FSChattelReligionistLaw !== "undefined") && V.FSChattelReligionistLaw !== 0) { V.arcologies[0].FSChattelReligionistLaw = V.FSChattelReligionistLaw; @@ -806,20 +806,20 @@ App.Update.globalVariables = function(node) { if (typeof V.arcologies[0].FSChattelReligionistLaw2 === "undefined") { V.arcologies[0].FSChattelReligionistLaw2 = 0; } - if ((typeof V.FSRomanRevivalist !== "undefined") && V.FSRomanRevivalist !== "unset") { + if ((typeof V.FSRomanRevivalist !== "undefined") && V.FSRomanRevivalist !== null) { V.arcologies[0].FSRomanRevivalist = V.FSRomanRevivalist; } else if (typeof V.arcologies[0].FSRomanRevivalist === "undefined") { - V.arcologies[0].FSRomanRevivalist = "unset"; + V.arcologies[0].FSRomanRevivalist = null; } if ((typeof V.FSRomanRevivalistLaw !== "undefined") && V.FSRomanRevivalistLaw !== 0) { V.arcologies[0].FSRomanRevivalistLaw = V.FSRomanRevivalistLaw; } else if (typeof V.arcologies[0].FSRomanRevivalistLaw === "undefined") { V.arcologies[0].FSRomanRevivalistLaw = 0; } - if ((typeof V.FSNeoImperialist !== "undefined") && V.FSNeoImperialist !== "unset") { + if ((typeof V.FSNeoImperialist !== "undefined") && V.FSNeoImperialist !== null) { V.arcologies[0].FSNeoImperialist = V.FSNeoImperialist; } else if (typeof V.arcologies[0].FSNeoImperialist === "undefined") { - V.arcologies[0].FSNeoImperialist = "unset"; + V.arcologies[0].FSNeoImperialist = null; } if ((typeof V.FSNeoImperialistLaw1 !== "undefined") && V.FSNeoImperialistLaw1 !== 0) { V.arcologies[0].FSNeoImperialistLaw1 = V.FSNeoImperialistLaw1; @@ -831,10 +831,10 @@ App.Update.globalVariables = function(node) { } else if (typeof V.arcologies[0].FSNeoImperialistLaw2 === "undefined") { V.arcologies[0].FSNeoImperialistLaw2 = 0; } - if ((typeof V.FSEgyptianRevivalist !== "undefined") && V.FSEgyptianRevivalist !== "unset") { + if ((typeof V.FSEgyptianRevivalist !== "undefined") && V.FSEgyptianRevivalist !== null) { V.arcologies[0].FSEgyptianRevivalist = V.FSEgyptianRevivalist; } else if (typeof V.arcologies[0].FSEgyptianRevivalist === "undefined") { - V.arcologies[0].FSEgyptianRevivalist = "unset"; + V.arcologies[0].FSEgyptianRevivalist = null; } if ((typeof V.FSEgyptianRevivalistLaw !== "undefined") && V.FSEgyptianRevivalistLaw !== 0) { V.arcologies[0].FSEgyptianRevivalistLaw = V.FSEgyptianRevivalistLaw; @@ -847,32 +847,32 @@ App.Update.globalVariables = function(node) { if (typeof V.arcologies[0].FSEgyptianRevivalistInterest === "undefined") { V.arcologies[0].FSEgyptianRevivalistInterest = 0; } - if ((typeof V.FSEdoRevivalist !== "undefined") && V.FSEdoRevivalist !== "unset") { + if ((typeof V.FSEdoRevivalist !== "undefined") && V.FSEdoRevivalist !== null) { V.arcologies[0].FSEdoRevivalist = V.FSEdoRevivalist; } else if (typeof V.arcologies[0].FSEdoRevivalist === "undefined") { - V.arcologies[0].FSEdoRevivalist = "unset"; + V.arcologies[0].FSEdoRevivalist = null; } if ((typeof V.FSEdoRevivalistLaw !== "undefined") && V.FSEdoRevivalistLaw !== 0) { V.arcologies[0].FSEdoRevivalistLaw = V.FSEdoRevivalistLaw; } - if ((typeof V.FSArabianRevivalist !== "undefined") && V.FSArabianRevivalist !== "unset") { + if ((typeof V.FSArabianRevivalist !== "undefined") && V.FSArabianRevivalist !== null) { V.arcologies[0].FSArabianRevivalist = V.FSArabianRevivalist; } else if (typeof V.arcologies[0].FSArabianRevivalist === "undefined") { - V.arcologies[0].FSArabianRevivalist = "unset"; + V.arcologies[0].FSArabianRevivalist = null; } if ((typeof V.FSArabianRevivalistLaw !== "undefined") && V.FSArabianRevivalistLaw !== 0) { V.arcologies[0].FSArabianRevivalistLaw = V.FSArabianRevivalistLaw; } - if ((typeof V.FSChineseRevivalist !== "undefined") && V.FSChineseRevivalist !== "unset") { + if ((typeof V.FSChineseRevivalist !== "undefined") && V.FSChineseRevivalist !== null) { V.arcologies[0].FSChineseRevivalist = V.FSChineseRevivalist; } else if (typeof V.arcologies[0].FSChineseRevivalist === "undefined") { - V.arcologies[0].FSChineseRevivalist = "unset"; + V.arcologies[0].FSChineseRevivalist = null; } if ((typeof V.FSChineseRevivalistLaw !== "undefined") && V.FSChineseRevivalistLaw !== 0) { V.arcologies[0].FSChineseRevivalistLaw = V.FSChineseRevivalistLaw; } if (typeof V.arcologies[0].FSAntebellumRevivalist === "undefined") { - V.arcologies[0].FSAntebellumRevivalist = "unset"; + V.arcologies[0].FSAntebellumRevivalist = null; } if (typeof V.arcologies[0].FSAntebellumRevivalistSMR === "undefined") { V.arcologies[0].FSAntebellumRevivalistSMR = 0; @@ -885,123 +885,130 @@ App.Update.globalVariables = function(node) { } delete V.arcologies[0].FSNullLaw; - if (V.arcologies[0].FSSubjugationist !== "unset" && !Number.isFinite(V.arcologies[0].FSSubjugationist)) { + for (const fs of Object.keys(App.Data.FutureSociety.records)) { + // @ts-expect-error + if (V.arcologies[0][fs] === "unset") { + V.arcologies[0][fs] = null; + } + } + + if (V.arcologies[0].FSSubjugationist !== null && !Number.isFinite(V.arcologies[0].FSSubjugationist)) { V.arcologies[0].FSSubjugationist = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSSubjugationist`); } - if (V.arcologies[0].FSGenderRadicalist !== "unset" && !Number.isFinite(V.arcologies[0].FSGenderRadicalist)) { + if (V.arcologies[0].FSGenderRadicalist !== null && !Number.isFinite(V.arcologies[0].FSGenderRadicalist)) { V.arcologies[0].FSGenderRadicalist = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSGenderRadicalist`); } - if (V.arcologies[0].FSRestart !== "unset" && !Number.isFinite(V.arcologies[0].FSRestart)) { + if (V.arcologies[0].FSRestart !== null && !Number.isFinite(V.arcologies[0].FSRestart)) { V.arcologies[0].FSRestart = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSRestart`); } - if (V.arcologies[0].FSRepopulationFocus !== "unset" && !Number.isFinite(V.arcologies[0].FSRepopulationFocus)) { + if (V.arcologies[0].FSRepopulationFocus !== null && !Number.isFinite(V.arcologies[0].FSRepopulationFocus)) { V.arcologies[0].FSRepopulationFocus = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSRepopulationFocus`); } - if (V.arcologies[0].FSSupremacist !== "unset" && !Number.isFinite(V.arcologies[0].FSSupremacist)) { + if (V.arcologies[0].FSSupremacist !== null && !Number.isFinite(V.arcologies[0].FSSupremacist)) { V.arcologies[0].FSSupremacist = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSSupremacist`); } - if (V.arcologies[0].FSBodyPurist !== "unset" && !Number.isFinite(V.arcologies[0].FSBodyPurist)) { + if (V.arcologies[0].FSBodyPurist !== null && !Number.isFinite(V.arcologies[0].FSBodyPurist)) { V.arcologies[0].FSBodyPurist = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSBodyPurist`); } - if (V.arcologies[0].FSPaternalist !== "unset" && !Number.isFinite(V.arcologies[0].FSPaternalist)) { + if (V.arcologies[0].FSPaternalist !== null && !Number.isFinite(V.arcologies[0].FSPaternalist)) { V.arcologies[0].FSPaternalist = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSPaternalist`); } - if (V.arcologies[0].FSSlimnessEnthusiast !== "unset" && !Number.isFinite(V.arcologies[0].FSSlimnessEnthusiast)) { + if (V.arcologies[0].FSSlimnessEnthusiast !== null && !Number.isFinite(V.arcologies[0].FSSlimnessEnthusiast)) { V.arcologies[0].FSSlimnessEnthusiast = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSSlimnessEnthusiast`); } - if (V.arcologies[0].FSGenderFundamentalist !== "unset" && !Number.isFinite(V.arcologies[0].FSGenderFundamentalist)) { + if (V.arcologies[0].FSGenderFundamentalist !== null && !Number.isFinite(V.arcologies[0].FSGenderFundamentalist)) { V.arcologies[0].FSGenderFundamentalist = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSGenderFundamentalist`); } - if (V.arcologies[0].FSMaturityPreferentialist !== "unset" && !Number.isFinite(V.arcologies[0].FSMaturityPreferentialist)) { + if (V.arcologies[0].FSMaturityPreferentialist !== null && !Number.isFinite(V.arcologies[0].FSMaturityPreferentialist)) { V.arcologies[0].FSMaturityPreferentialist = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSMaturityPreferentialist`); } - if (V.arcologies[0].FSYouthPreferentialist !== "unset" && !Number.isFinite(V.arcologies[0].FSYouthPreferentialist)) { + if (V.arcologies[0].FSYouthPreferentialist !== null && !Number.isFinite(V.arcologies[0].FSYouthPreferentialist)) { V.arcologies[0].FSYouthPreferentialist = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSYouthPreferentialist`); } - if (V.arcologies[0].FSTransformationFetishist !== "unset" && !Number.isFinite(V.arcologies[0].FSTransformationFetishist)) { + if (V.arcologies[0].FSTransformationFetishist !== null && !Number.isFinite(V.arcologies[0].FSTransformationFetishist)) { V.arcologies[0].FSTransformationFetishist = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSTransformationFetishist`); } - if (V.arcologies[0].FSHedonisticDecadence !== "unset" && !Number.isFinite(V.arcologies[0].FSHedonisticDecadence)) { + if (V.arcologies[0].FSHedonisticDecadence !== null && !Number.isFinite(V.arcologies[0].FSHedonisticDecadence)) { V.arcologies[0].FSHedonisticDecadence = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSHedonisticDecadence`); } - if (V.arcologies[0].FSPhysicalIdealist !== "unset" && !Number.isFinite(V.arcologies[0].FSPhysicalIdealist)) { + if (V.arcologies[0].FSPhysicalIdealist !== null && !Number.isFinite(V.arcologies[0].FSPhysicalIdealist)) { V.arcologies[0].FSPhysicalIdealist = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSPhysicalIdealist`); } - if (V.arcologies[0].FSPastoralist !== "unset" && !Number.isFinite(V.arcologies[0].FSPastoralist)) { + if (V.arcologies[0].FSPastoralist !== null && !Number.isFinite(V.arcologies[0].FSPastoralist)) { V.arcologies[0].FSPastoralist = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSPastoralist`); } - if (V.arcologies[0].FSAssetExpansionist !== "unset" && !Number.isFinite(V.arcologies[0].FSAssetExpansionist)) { + if (V.arcologies[0].FSAssetExpansionist !== null && !Number.isFinite(V.arcologies[0].FSAssetExpansionist)) { V.arcologies[0].FSAssetExpansionist = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSAssetExpansionist`); } - if (V.arcologies[0].FSDegradationist !== "unset" && !Number.isFinite(V.arcologies[0].FSDegradationist)) { + if (V.arcologies[0].FSDegradationist !== null && !Number.isFinite(V.arcologies[0].FSDegradationist)) { V.arcologies[0].FSDegradationist = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSDegradationist`); } - if (V.arcologies[0].FSRomanRevivalist !== "unset" && !Number.isFinite(V.arcologies[0].FSRomanRevivalist)) { + if (V.arcologies[0].FSRomanRevivalist !== null && !Number.isFinite(V.arcologies[0].FSRomanRevivalist)) { V.arcologies[0].FSRomanRevivalist = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSRomanRevivalist`); } - if (V.arcologies[0].FSNeoImperialist !== "unset" && !Number.isFinite(V.arcologies[0].FSNeoImperialist)) { + if (V.arcologies[0].FSNeoImperialist !== null && !Number.isFinite(V.arcologies[0].FSNeoImperialist)) { V.arcologies[0].FSNeoImperialist = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSNeoImperialist`); } - if (V.arcologies[0].FSChattelReligionist !== "unset" && !Number.isFinite(V.arcologies[0].FSChattelReligionist)) { + if (V.arcologies[0].FSChattelReligionist !== null && !Number.isFinite(V.arcologies[0].FSChattelReligionist)) { V.arcologies[0].FSChattelReligionist = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSChattelReligionist`); } - if (V.arcologies[0].FSChineseRevivalist !== "unset" && !Number.isFinite(V.arcologies[0].FSChineseRevivalist)) { + if (V.arcologies[0].FSChineseRevivalist !== null && !Number.isFinite(V.arcologies[0].FSChineseRevivalist)) { V.arcologies[0].FSChineseRevivalist = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSChineseRevivalist`); } - if (V.arcologies[0].FSArabianRevivalist !== "unset" && !Number.isFinite(V.arcologies[0].FSArabianRevivalist)) { + if (V.arcologies[0].FSArabianRevivalist !== null && !Number.isFinite(V.arcologies[0].FSArabianRevivalist)) { V.arcologies[0].FSArabianRevivalist = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSArabianRevivalist`); } - if (V.arcologies[0].FSEdoRevivalist !== "unset" && !Number.isFinite(V.arcologies[0].FSEdoRevivalist)) { + if (V.arcologies[0].FSEdoRevivalist !== null && !Number.isFinite(V.arcologies[0].FSEdoRevivalist)) { V.arcologies[0].FSEdoRevivalist = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSEdoRevivalist`); } - if (V.arcologies[0].FSEgyptianRevivalist !== "unset" && !Number.isFinite(V.arcologies[0].FSEgyptianRevivalist)) { + if (V.arcologies[0].FSEgyptianRevivalist !== null && !Number.isFinite(V.arcologies[0].FSEgyptianRevivalist)) { V.arcologies[0].FSEgyptianRevivalist = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSEgyptianRevivalist`); } - if (V.arcologies[0].FSAztecRevivalist !== "unset" && !Number.isFinite(V.arcologies[0].FSAztecRevivalist)) { + if (V.arcologies[0].FSAztecRevivalist !== null && !Number.isFinite(V.arcologies[0].FSAztecRevivalist)) { V.arcologies[0].FSAztecRevivalist = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSAztecRevivalist`); } - if (V.arcologies[0].FSAntebellumRevivalist !== "unset" && !Number.isFinite(V.arcologies[0].FSAntebellumRevivalist)) { + if (V.arcologies[0].FSAntebellumRevivalist !== null && !Number.isFinite(V.arcologies[0].FSAntebellumRevivalist)) { V.arcologies[0].FSAntebellumRevivalist = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSAntebellumRevivalist`); } - if (V.arcologies[0].FSIntellectualDependency !== "unset" && !Number.isFinite(V.arcologies[0].FSIntellectualDependency)) { + if (V.arcologies[0].FSIntellectualDependency !== null && !Number.isFinite(V.arcologies[0].FSIntellectualDependency)) { V.arcologies[0].FSIntellectualDependency = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSIntellectualDependency`); } - if (V.arcologies[0].FSSlaveProfessionalism !== "unset" && !Number.isFinite(V.arcologies[0].FSSlaveProfessionalism)) { + if (V.arcologies[0].FSSlaveProfessionalism !== null && !Number.isFinite(V.arcologies[0].FSSlaveProfessionalism)) { V.arcologies[0].FSSlaveProfessionalism = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSSlaveProfessionalism`); } - if (V.arcologies[0].FSPetiteAdmiration !== "unset" && !Number.isFinite(V.arcologies[0].FSPetiteAdmiration)) { + if (V.arcologies[0].FSPetiteAdmiration !== null && !Number.isFinite(V.arcologies[0].FSPetiteAdmiration)) { V.arcologies[0].FSPetiteAdmiration = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSPetiteAdmiration`); } - if (V.arcologies[0].FSStatuesqueGlorification !== "unset" && !Number.isFinite(V.arcologies[0].FSStatuesqueGlorification)) { + if (V.arcologies[0].FSStatuesqueGlorification !== null && !Number.isFinite(V.arcologies[0].FSStatuesqueGlorification)) { V.arcologies[0].FSStatuesqueGlorification = 10; App.UI.DOM.appendNewElement("div", node, `Fixed NaN FS value for FSStatuesqueGlorification`); } @@ -2380,7 +2387,7 @@ App.Update.oldVersions = function(node) { newPC.buttImplant = newPC.butt - 2; } newPC.geneticQuirks = clone(V.PC.geneticQuirks); - if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (V.arcologies[0].FSPhysicalIdealist !== null) { newPC.muscles = 100; } else if (V.PC.title === 1) { newPC.muscles = 50; @@ -2532,6 +2539,15 @@ App.Update.oldVersions = function(node) { V.imageChoice = 5; } } + if (V.releaseID < 1207) { + V.slaves.forEach(s => { + if (s.geneMods.NCS === 1 || (s.geneticQuirks.neoteny >= 2 && s.geneticQuirks.progeria !== 2)) { + s.ovaryAge = Math.max(s.ovaryAge, Math.min(s.physicalAge * 0.5, s.physicalAge - 2, 45)); + } else { + s.ovaryAge = Math.max(s.ovaryAge, Math.min(s.physicalAge * 0.8, s.physicalAge - 2, 45)); + } + }); + } node.append(`Done!`); }; diff --git a/src/data/backwardsCompatibility/datatypeCleanup.js b/src/data/backwardsCompatibility/datatypeCleanup.js index 3df7e495b7e0556fed36d022a802a82fc68d42ed..ddfd8e89112942d2b2030c68ac6746703dc344d8 100644 --- a/src/data/backwardsCompatibility/datatypeCleanup.js +++ b/src/data/backwardsCompatibility/datatypeCleanup.js @@ -253,6 +253,10 @@ App.Entity.Utils.SlaveDataSchemeCleanup = (function() { if (!slave.custom.hasOwnProperty("name")) { slave.custom.name = ""; } + + if (!slave.custom.hasOwnProperty("aiImageId")) { + slave.custom.aiImageId = null; + } } /** @@ -460,7 +464,7 @@ globalThis.SlaveDatatypeCleanup = (function SlaveDatatypeCleanup() { } slave.visualAge = Math.max(+slave.visualAge, 0) || slave.actualAge; slave.physicalAge = Math.max(+slave.physicalAge, 0) || slave.actualAge; - if (typeof slave.ovaryAge !== "number") { // freshOvaries intentionally sets ovaryAge to a negative number, so treat it more leniently + if (typeof slave.ovaryAge !== "number") { // immortalOvaries intentionally sets ovaryAge to a negative number, so treat it more leniently slave.ovaryAge = slave.physicalAge; } slave.pubertyAgeXX = Math.max(+slave.pubertyAgeXX, 0) || V.fertilityAge; @@ -1198,7 +1202,9 @@ globalThis.PCDatatypeCleanup = (function PCDatatypeCleanup() { } PC.physicalAge = Math.clamp(+PC.physicalAge, 10, Infinity) || PC.actualAge; PC.visualAge = Math.clamp(+PC.visualAge, 10, Infinity) || PC.actualAge; - PC.ovaryAge = Math.clamp(+PC.ovaryAge, 10, Infinity) || PC.physicalAge; + if (typeof PC.ovaryAge !== "number") { // immortalOvaries intentionally sets ovaryAge to a negative number, so treat it more leniently + PC.ovaryAge = PC.physicalAge; + } if (V.playerAging !== 0) { V.playerAging = Math.clamp(+V.playerAging, 0, 2) || 2; } @@ -2729,16 +2735,23 @@ App.Update.arcologiesDatatypeCleanup = function() { arc.PCminority = Number(arc.PCminority) || 0; arc.demandFactor = Number(arc.demandFactor) || 0; + for (const fs of Object.keys(App.Data.FutureSociety.records)) { + // @ts-expect-error + if (arc[fs] === "unset") { + arc[fs] = null; + } + } + // enforce future society mutual exclusion rules for (const group of App.Data.FutureSociety.mutexGroups) { for (const fs1 of group) { - if (arc[fs1] !== "unset") { - arc[fs1] = Number(arc[fs1]) || "unset"; + if (arc[fs1] !== null) { + arc[fs1] = Number(arc[fs1]) || null; } - if (arc[fs1] !== "unset" /* check again, may have just changed */) { + if (arc[fs1] !== null /* check again, may have just changed */) { for (const fs2 of group) { if (fs1 !== fs2) { - arc[fs2] = "unset"; + arc[fs2] = null; } } } @@ -2746,14 +2759,14 @@ App.Update.arcologiesDatatypeCleanup = function() { } const raceArray = Array.from(App.Data.misc.filterRaces.keys()); if (!raceArray.includes(arc.FSSupremacistRace)) { - if (arc.FSSupremacist !== "unset") { + if (arc.FSSupremacist !== null) { arc.FSSupremacistRace = raceArray.random(); } else { arc.FSSupremacistRace = 0; } } if (!raceArray.includes(arc.FSSubjugationistRace)) { - if (arc.FSSubjugationist !== "unset") { + if (arc.FSSubjugationist !== null) { arc.FSSubjugationistRace = raceArray.random(); } else { arc.FSSubjugationistRace = 0; diff --git a/src/descriptions/arcologyDescription.js b/src/descriptions/arcologyDescription.js index c7e00a59c485ae6f896d48475069ab138d645b4e..a46b19fe078da94702b63f0c12972b76082642a7 100644 --- a/src/descriptions/arcologyDescription.js +++ b/src/descriptions/arcologyDescription.js @@ -915,7 +915,7 @@ App.Desc.playerArcology = function(lastElement) { } if (A.FSRomanRevivalistDecoration >= 80 && A.FSRomanRevivalistSMR === 1) { buffer.push(`Faintly, the sound of cheering can be heard as`); - if (A.FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist', A)) { buffer.push(`a slave achieves sexual victory over their partner`); } else if (V.pitKillsTotal > 0) { buffer.push(`a slave dies`); @@ -924,7 +924,7 @@ App.Desc.playerArcology = function(lastElement) { } buffer.push(`in gladiatorial combat.`); } else if (A.FSAztecRevivalistDecoration >= 80) { - buffer.push(`The sound of prayer and chanting echoes across the space, briefly accompanied by a sacrifice's ${A.FSPaternalist !== "unset" ? "moaning" : "last scream"} as the rite completes.`); + buffer.push(`The sound of prayer and chanting echoes across the space, briefly accompanied by a sacrifice's ${FutureSocieties.isActive('FSPaternalist', A) ? "moaning" : "last scream"} as the rite completes.`); } else if (A.FSNeoImperialistDecoration >= 80) { buffer.push(`The constant noise of trade and revelry echoes across every inch of the crowded plaza, kept under control by stern-looking guards in armor painted your colors, holding holographic halberds and standing at attention.`); } else if (A.FSEgyptianRevivalistDecoration >= 80) { @@ -997,9 +997,9 @@ App.Desc.playerArcology = function(lastElement) { buffer.push(`The average slave is quite healthy.`); } else if (A.FSTransformationFetishistSMR === 1) { if (A.FSTransformationFetishistResearch === 1) { - buffer.push(`Breast implants are almost universal; ${A.FSSlimnessEnthusiast === "unset" ? "an M-cup bust is below average among the slave population" : "even the most lithe slave sports a pair of overly round chest balloons"}.`); + buffer.push(`Breast implants are almost universal; ${!FutureSocieties.isActive('FSSlimnessEnthusiast', A) ? "an M-cup bust is below average among the slave population" : "even the most lithe slave sports a pair of overly round chest balloons"}.`); } else { - buffer.push(`Breast implants are almost universal; ${A.FSSlimnessEnthusiast === "unset" ? "a D-cup bust is below average among the slave population" : "even the most lithe slave sports a pair of overly round chest balloons"}.`); + buffer.push(`Breast implants are almost universal; ${!FutureSocieties.isActive('FSSlimnessEnthusiast', A) ? "a D-cup bust is below average among the slave population" : "even the most lithe slave sports a pair of overly round chest balloons"}.`); } } if (A.FSIntellectualDependencySMR === 1) { diff --git a/src/endWeek/economics/arcmgmt.js b/src/endWeek/economics/arcmgmt.js index 44da2d19efa61c81fb31db92e9ed89a9f37a1318..5269817e0a8eba198f672cff45fe8a8134117e0c 100644 --- a/src/endWeek/economics/arcmgmt.js +++ b/src/endWeek/economics/arcmgmt.js @@ -19,7 +19,7 @@ App.EndWeek.arcManagement = function() { App.UI.DOM.appendNewElement("p", el, ownershipReport(false)); /* Sexual Satisfaction */ - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { if (V.arcadeDemandDegResult === 1) { appendDiv(`Your endeavors to see slaves as less than human are hampered as citizens find that there are too few slaves ready to be treated as sexual objects around. <span class="red">Development towards a degradationist society is damaged</span> as a result.`); } else if (V.arcadeDemandDegResult === 2) { @@ -142,14 +142,14 @@ App.EndWeek.arcManagement = function() { } else if (V.arcologies[0].FSTransformationFetishistSMR === 1) { if (V.arcologies[0].FSTransformationFetishistResearch === 1) { r.push(`Breast implants are almost universal;`); - if (V.arcologies[0].FSSlimnessEnthusiast === "unset") { + if (!FutureSocieties.isActive('FSSlimnessEnthusiast')) { r.push(`an M-cup bust is below average among the slave population.`); } else { r.push(`even the most lithe slave sports a pair of overly round chest balloons.`); } } else { r.push(`Breast implants are almost universal;`); - if (V.arcologies[0].FSSlimnessEnthusiast === "unset") { + if (!FutureSocieties.isActive('FSSlimnessEnthusiast')) { r.push(`a D-cup bust is below average among the slave population.`); } else { r.push(`even the most lithe slave sports a pair of overly round chest balloons.`); @@ -471,11 +471,11 @@ App.EndWeek.arcManagement = function() { } } } - if (V.arcologies[0].FSNull !== "unset") { + if (FutureSocieties.isActive('FSNull')) { r.push(`Your cultural openness is a powerful driver of economic activity.`); AWeekGrowth += Math.max(1, Math.trunc(V.arcologies[0].FSNull / 25)); } - if (V.arcologies[0].FSRestart !== "unset") { + if (FutureSocieties.isActive('FSRestart')) { r.push(`Your powerful connections open many avenues of economic expansion.`); AWeekGrowth += Math.max(1, Math.trunc(V.arcologies[0].FSRestart / 10)); } @@ -503,7 +503,7 @@ App.EndWeek.arcManagement = function() { } else if (V.arcologies[0].FSNeoImperialist >= random(1, 100)) { r.push(`This week, your tightly hierarchical Imperial society's efficient organization has attracted traders and increased prosperity.`); AWeekGrowth++; - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSChineseRevivalist')) { if ((V.HeadGirlID !== 0) && (V.RecruiterID !== 0) && (V.BodyguardID !== 0)) { r.push(`This week, your imperial administration, staffed with a Head Girl, a Recruiter, and a Bodyguard, has improved prosperity.`); AWeekGrowth += 2; @@ -675,11 +675,11 @@ App.EndWeek.arcManagement = function() { if (V.cash > V.assistant.market.limit + menialSlaveValue) { let menialBulkPremium = Math.trunc(1 + Math.clamp((V.cash - V.assistant.market.limit) / menialSlaveValue, 0, bulkMax) / 400); r.push(`${HeM} acquires more chattel, since it's a buyers' market.`); - if (V.arcologies[0].FSPastoralist !== "unset" && V.arcologies[0].FSPaternalist === "unset") { + if (FutureSocieties.isActive('FSPastoralist') && !FutureSocieties.isActive('FSPaternalist')) { V.menialBioreactors += Math.trunc(Math.clamp((V.cash - V.assistant.market.limit) / (menialSlaveValue + menialBulkPremium - 100), 0, bulkMax)); V.menialSupplyFactor -= Math.trunc(Math.clamp((V.cash - V.assistant.market.limit) / (menialSlaveValue + menialBulkPremium - 100), 0, bulkMax)); cashX(forceNeg(Math.trunc(Math.clamp((V.cash - V.assistant.market.limit) / (menialSlaveValue + menialBulkPremium - 100), 0, bulkMax)) * (menialSlaveValue + menialBulkPremium - 100)), "menialBioreactorsTransferA"); - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (FutureSocieties.isActive('FSDegradationist')) { V.fuckdolls += Math.trunc(Math.clamp((V.cash - V.assistant.market.limit) / ((menialSlaveValue + menialBulkPremium) * 2), 0, bulkMax)); V.menialSupplyFactor -= Math.trunc(Math.clamp((V.cash - V.assistant.market.limit) / ((menialSlaveValue + menialBulkPremium) * 2), 0, bulkMax)); cashX(forceNeg(Math.trunc(Math.clamp((V.cash - V.assistant.market.limit) / ((menialSlaveValue + menialBulkPremium) * 2), 0, bulkMax)) * ((menialSlaveValue + menialBulkPremium) * 2)), "fuckdollsTransferA"); @@ -734,7 +734,7 @@ App.EndWeek.arcManagement = function() { const el = new DocumentFragment(); const r = []; - if (V.arcologies[0].FSSupremacist !== "unset") { + if (FutureSocieties.isActive('FSSupremacist')) { FSScore += Math.min(V.arcologies[0].FSSupremacist, 100); slaveDemandU *= 1 + Math.trunc(Math.min(V.arcologies[0].FSSupremacist, 100) / 20) * 0.04; slaveDemandT *= 1 + Math.trunc(Math.min(V.arcologies[0].FSSupremacist, 100) / 20) * 0.05; @@ -748,7 +748,7 @@ App.EndWeek.arcManagement = function() { topClassP *= 1 + Math.trunc(Math.min(V.arcologies[0].FSSupremacist, 100) / 20) * 0.004; r.push(`Your racial policies are concentrating power in the hands of ${V.arcologies[0].FSSupremacistRace} people.`); /* perhaps too obvious to bother with printing? */ } - if (V.arcologies[0].FSSubjugationist !== "unset") { + if (FutureSocieties.isActive('FSSubjugationist')) { FSScore += Math.min(V.arcologies[0].FSSubjugationist, 100); slaveDemandU *= 1 + Math.trunc(Math.min(V.arcologies[0].FSSubjugationist, 100) / 20) * 0.04; slaveDemandT *= 1 + Math.trunc(Math.min(V.arcologies[0].FSSubjugationist, 100) / 20) * 0.05; @@ -762,7 +762,7 @@ App.EndWeek.arcManagement = function() { topClassP *= 1 + Math.trunc(Math.min(V.arcologies[0].FSSubjugationist, 100) / 20) * 0.004; r.push(`Your racial policies are stripping all power from the ${V.arcologies[0].FSSubjugationistRace} people.`); /* perhaps too obvious to bother with printing? */ } - if (V.arcologies[0].FSGenderRadicalist !== "unset") { + if (FutureSocieties.isActive('FSGenderRadicalist')) { FSScore += Math.min(V.arcologies[0].FSGenderRadicalist, 100); slaveDemandU *= 1 + Math.trunc(Math.min(V.arcologies[0].FSGenderRadicalist, 100) / 20) * 0.02; slaveDemandT *= 1 + Math.trunc(Math.min(V.arcologies[0].FSGenderRadicalist, 100) / 20) * 0.025; @@ -772,7 +772,7 @@ App.EndWeek.arcManagement = function() { topClassP *= 1 + Math.trunc(Math.min(V.arcologies[0].FSGenderRadicalist, 100) / 20) * 0.002; r.push(`Your radical views on gender are scaring away the more traditionally minded.`); } - if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + if (FutureSocieties.isActive('FSGenderFundamentalist')) { FSScore += Math.min(V.arcologies[0].FSGenderFundamentalist, 100); lowerClass += Math.trunc(Math.min(V.arcologies[0].FSGenderFundamentalist, 100) / 20) * 40; lowerClassP *= 1 + Math.trunc(Math.min(V.arcologies[0].FSGenderFundamentalist, 100) / 20) * 0.002; @@ -780,7 +780,7 @@ App.EndWeek.arcManagement = function() { topClassP *= 1 + Math.trunc(Math.min(V.arcologies[0].FSGenderFundamentalist, 100) / 20) * -0.002; r.push(`Your traditional views on gender are comforting to many, unimaginative to some.`); } - if (V.arcologies[0].FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist')) { FSScore += Math.min(V.arcologies[0].FSPaternalist, 100); slaveDemandU *= 1 + Math.trunc(Math.min(V.arcologies[0].FSPaternalist, 100) / 20) * -0.04; slaveDemandT *= 1 + Math.trunc(Math.min(V.arcologies[0].FSPaternalist, 100) / 20) * -0.05; @@ -797,7 +797,7 @@ App.EndWeek.arcManagement = function() { topClassP *= 1 + Math.trunc(Math.min(V.arcologies[0].FSPaternalist, 100) / 20) * -0.002; r.push(`Poor citizens can rely on their better-off peers in ${V.arcologies[0].name}.`); } - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { FSScore += Math.min(V.arcologies[0].FSDegradationist, 100); slaveDemandU *= 1 + Math.trunc(Math.min(V.arcologies[0].FSDegradationist, 100) / 20) * 0.04; slaveDemandT *= 1 + Math.trunc(Math.min(V.arcologies[0].FSDegradationist, 100) / 20) * 0.05; @@ -814,7 +814,7 @@ App.EndWeek.arcManagement = function() { topClassP *= 1 + Math.trunc(Math.min(V.arcologies[0].FSDegradationist, 100) / 20) * 0.004; r.push(`The arcology is a cutthroat place in which falling into slavery is very easy.`); } - if (V.arcologies[0].FSIntellectualDependency !== "unset") { + if (FutureSocieties.isActive('FSIntellectualDependency')) { FSScore += Math.min(V.arcologies[0].FSIntellectualDependency, 100); slaveDemandU *= 1 + Math.trunc(Math.min(V.arcologies[0].FSIntellectualDependency, 100) / 20) * 0.03; slaveDemandT *= 1 + Math.trunc(Math.min(V.arcologies[0].FSIntellectualDependency, 100) / 20) * 0.04; @@ -827,7 +827,7 @@ App.EndWeek.arcManagement = function() { topClassP *= 1 + Math.trunc(Math.min(V.arcologies[0].FSIntellectualDependency, 100) / 20) * -0.020; r.push(`It's always a party in ${V.arcologies[0].name}, giving it a strong appeal to those unable to host such an event.`); } - if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + if (FutureSocieties.isActive('FSSlaveProfessionalism')) { FSScore += Math.min(V.arcologies[0].FSSlaveProfessionalism, 100); slaveDemandU *= 1 + Math.trunc(Math.min(V.arcologies[0].FSSlaveProfessionalism, 100) / 20) * -0.1; slaveDemandT *= 1 + Math.trunc(Math.min(V.arcologies[0].FSSlaveProfessionalism, 100) / 20) * -0.125; @@ -839,7 +839,7 @@ App.EndWeek.arcManagement = function() { topClassP *= 1 + Math.trunc(Math.min(V.arcologies[0].FSSlaveProfessionalism, 100) / 20) * 0.001; r.push(`The intelligent atmosphere of ${V.arcologies[0].name} makes it an attractive place for those with the brains to define their place in the world.`); } - if (V.arcologies[0].FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist')) { FSScore += Math.min(V.arcologies[0].FSBodyPurist, 100); lowerClass += Math.trunc(Math.min(V.arcologies[0].FSBodyPurist, 100) / 20) * 40; lowerClassP *= 1 + Math.trunc(Math.min(V.arcologies[0].FSBodyPurist, 100) / 20) * 0.002; @@ -849,7 +849,7 @@ App.EndWeek.arcManagement = function() { topClassP *= 1 + Math.trunc(Math.min(V.arcologies[0].FSBodyPurist, 100) / 20) * -0.001; r.push(`Body purist fashion standards comfort the poor as they stand out less from their more fortunate neighbors.`); } - if (V.arcologies[0].FSTransformationFetishist !== "unset") { + if (FutureSocieties.isActive('FSTransformationFetishist')) { FSScore += Math.min(V.arcologies[0].FSTransformationFetishist, 100); slaveDemandU *= 1 + Math.trunc(Math.min(V.arcologies[0].FSTransformationFetishist, 100) / 20) * 0.02; slaveDemandT *= 1 + Math.trunc(Math.min(V.arcologies[0].FSTransformationFetishist, 100) / 20) * 0.025; @@ -861,7 +861,7 @@ App.EndWeek.arcManagement = function() { topClassP *= 1 + Math.trunc(Math.min(V.arcologies[0].FSTransformationFetishist, 100) / 20) * 0.001; r.push(`The lower class fear the kind of transformations could be forced on them if they ever end up enslaved, whereas the rich enjoy wielding such power.`); } - if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + if (FutureSocieties.isActive('FSYouthPreferentialist')) { FSScore += Math.min(V.arcologies[0].FSYouthPreferentialist, 100); slaveDemandU *= 1 + Math.trunc(Math.min(V.arcologies[0].FSYouthPreferentialist, 100) / 20) * 0.02; slaveDemandT *= 1 + Math.trunc(Math.min(V.arcologies[0].FSYouthPreferentialist, 100) / 20) * 0.025; @@ -871,7 +871,7 @@ App.EndWeek.arcManagement = function() { middleClassP *= 1 + Math.trunc(Math.min(V.arcologies[0].FSYouthPreferentialist, 100) / 20) * -0.002; r.push(`Preference for youth makes the young poor in your arcology feel appreciated despite their lack of wealth.`); } - if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + if (FutureSocieties.isActive('FSMaturityPreferentialist')) { FSScore += Math.min(V.arcologies[0].FSMaturityPreferentialist, 100); slaveDemandU *= 1 + Math.trunc(Math.min(V.arcologies[0].FSMaturityPreferentialist, 100) / 20) * 0.02; slaveDemandT *= 1 + Math.trunc(Math.min(V.arcologies[0].FSMaturityPreferentialist, 100) / 20) * 0.025; @@ -881,32 +881,32 @@ App.EndWeek.arcManagement = function() { middleClassP *= 1 + Math.trunc(Math.min(V.arcologies[0].FSMaturityPreferentialist, 100) / 20) * 0.002; r.push(`Preference for maturity makes the middle class of your arcology feel like their experience is finally properly appreciated.`); } - if (V.arcologies[0].FSPetiteAdmiration !== "unset") { + if (FutureSocieties.isActive('FSPetiteAdmiration')) { FSScore += Math.min(V.arcologies[0].FSPetiteAdmiration, 100); slaveDemandU *= 1 + Math.trunc(Math.min(V.arcologies[0].FSPetiteAdmiration, 100) / 20) * 0.02; slaveDemandT *= 1 + Math.trunc(Math.min(V.arcologies[0].FSPetiteAdmiration, 100) / 20) * 0.025; } - if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { + if (FutureSocieties.isActive('FSStatuesqueGlorification')) { FSScore += Math.min(V.arcologies[0].FSStatuesqueGlorification, 100); slaveDemandU *= 1 + Math.trunc(Math.min(V.arcologies[0].FSStatuesqueGlorification, 100) / 20) * 0.02; slaveDemandT *= 1 + Math.trunc(Math.min(V.arcologies[0].FSStatuesqueGlorification, 100) / 20) * 0.025; } - if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + if (FutureSocieties.isActive('FSSlimnessEnthusiast')) { FSScore += Math.min(V.arcologies[0].FSSlimnessEnthusiast, 100); } - if (V.arcologies[0].FSAssetExpansionist !== "unset") { + if (FutureSocieties.isActive('FSAssetExpansionist')) { FSScore += Math.min(V.arcologies[0].FSAssetExpansionist, 100); - if (V.arcologies[0].FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist')) { expirationFS *= 1 + (Math.trunc(Math.min(V.arcologies[0].FSAssetExpansionist, 100) / 20) * 0.05) * (1 + (Math.trunc(Math.min(V.arcologies[0].FSBodyPurist, 100) / 20) * -0.1)); } else { expirationFS *= 1 + Math.trunc(Math.min(V.arcologies[0].FSAssetExpansionist, 100) / 20) * 0.05; } } - if (V.arcologies[0].FSPastoralist !== "unset") { + if (FutureSocieties.isActive('FSPastoralist')) { FSScore += Math.min(V.arcologies[0].FSPastoralist, 100); slaveDemandU *= 1 + Math.trunc(Math.min(V.arcologies[0].FSPastoralist, 100) / 20) * 0.04; slaveDemandT *= 1 + Math.trunc(Math.min(V.arcologies[0].FSPastoralist, 100) / 20) * 0.05; - if (V.arcologies[0].FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist')) { expirationFS *= 1 + (Math.trunc(Math.min(V.arcologies[0].FSPastoralist, 100) / 20) * 0.05) * (1 + (Math.trunc(Math.min(V.arcologies[0].FSPaternalist, 100) / 20) * -0.1)); } else { expirationFS *= 1 + Math.trunc(Math.min(V.arcologies[0].FSPastoralist, 100) / 20) * 0.05; @@ -921,7 +921,7 @@ App.EndWeek.arcManagement = function() { topClassP *= 1 + Math.trunc(Math.min(V.arcologies[0].FSPastoralist, 100) / 20) * 0.001; r.push(`The pastoralization of ${V.arcologies[0].name} spurs a whole industry around human produce.`); } - if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (FutureSocieties.isActive('FSPhysicalIdealist')) { FSScore += Math.min(V.arcologies[0].FSPhysicalIdealist, 100); slaveDemandU *= 1 + Math.trunc(Math.min(V.arcologies[0].FSPhysicalIdealist, 100) / 20) * 0.02; slaveDemandT *= 1 + Math.trunc(Math.min(V.arcologies[0].FSPhysicalIdealist, 100) / 20) * 0.025; @@ -934,7 +934,7 @@ App.EndWeek.arcManagement = function() { topClassP *= 1 + Math.trunc(Math.min(V.arcologies[0].FSPhysicalIdealist, 100) / 20) * 0.001; r.push(`Fit slaves and citizens are more productive! However, your arcology's poor do not look forward to even more toil and sweat.`); } - if (V.arcologies[0].FSChattelReligionist !== "unset") { + if (FutureSocieties.isActive('FSChattelReligionist')) { FSScore += Math.min(V.arcologies[0].FSChattelReligionist, 100); slaveDemandU *= 1 + Math.trunc(Math.min(V.arcologies[0].FSChattelReligionist, 100) / 20) * 0.02; slaveDemandT *= 1 + Math.trunc(Math.min(V.arcologies[0].FSChattelReligionist, 100) / 20) * 0.025; @@ -946,7 +946,7 @@ App.EndWeek.arcManagement = function() { topClassP *= 1 + Math.trunc(Math.min(V.arcologies[0].FSChattelReligionist, 100) / 20) * 0.001; r.push(`Chattel Religionism helps some poor citizens see slavery as a spiritually pure fate.`); } - if (V.arcologies[0].FSRomanRevivalist !== "unset") { + if (FutureSocieties.isActive('FSRomanRevivalist')) { FSScore += Math.min(V.arcologies[0].FSRomanRevivalist, 100); slaveDemandU *= 1 + Math.trunc(Math.min(V.arcologies[0].FSRomanRevivalist, 100) / 20) * 0.02; slaveDemandT *= 1 + Math.trunc(Math.min(V.arcologies[0].FSRomanRevivalist, 100) / 20) * 0.025; @@ -958,7 +958,7 @@ App.EndWeek.arcManagement = function() { topClassP *= 1 + Math.trunc(Math.min(V.arcologies[0].FSRomanRevivalist, 100) / 20) * -0.002; r.push(`Your citizens take pride in looking after each other.`); } - if (V.arcologies[0].FSNeoImperialist !== "unset") { + if (FutureSocieties.isActive('FSNeoImperialist')) { FSScore += Math.min(V.arcologies[0].FSNeoImperialist, 100); slaveDemandU *= 1 + Math.trunc(Math.min(V.arcologies[0].FSNeoImperialist, 100) / 20) * 0.05; slaveDemandT *= 1 + Math.trunc(Math.min(V.arcologies[0].FSNeoImperialist, 100) / 20) * 0.030; @@ -974,7 +974,7 @@ App.EndWeek.arcManagement = function() { topClassP *= 1 + Math.trunc(Math.min(V.arcologies[0].FSNeoImperialist, 100) / 20) * 0.002; r.push(`Your new Imperium creates a staunchly hierarchical society, and while your elites and soldiers enjoy social prestige and luxury, the lower classes are often unhappy about being made to grovel.`); } - if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + if (FutureSocieties.isActive('FSAntebellumRevivalist')) { FSScore += Math.min(V.arcologies[0].FSAntebellumRevivalist, 100); slaveDemandU *= 1 + Math.trunc(Math.min(V.arcologies[0].FSAntebellumRevivalist, 100) / 20) * 0.075; slaveDemandT *= 1 + Math.trunc(Math.min(V.arcologies[0].FSAntebellumRevivalist, 100) / 20) * 0.050; @@ -989,7 +989,7 @@ App.EndWeek.arcManagement = function() { topClassP *= 1 + Math.trunc(Math.min(V.arcologies[0].FSAntebellumRevivalist, 100) / 20) * 0.001; r.push(`Antebellum Revivalism prioritizes the wealthy while also encouraging a strong yeoman, or middle, class, but offers little assistance to the poor.`); } - if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + if (FutureSocieties.isActive('FSEgyptianRevivalist')) { FSScore += Math.min(V.arcologies[0].FSEgyptianRevivalist, 100); slaveDemandU *= 1 + Math.trunc(Math.min(V.arcologies[0].FSEgyptianRevivalist, 100) / 20) * 0.02; slaveDemandT *= 1 + Math.trunc(Math.min(V.arcologies[0].FSEgyptianRevivalist, 100) / 20) * 0.025; @@ -1000,27 +1000,27 @@ App.EndWeek.arcManagement = function() { topClassP *= 1 + Math.trunc(Math.min(V.arcologies[0].FSEgyptianRevivalist, 100) / 20) * -0.002; r.push(`Egyptian Revivalism is benevolent in some ways, and charity is common here.`); } - if (V.arcologies[0].FSEdoRevivalist !== "unset") { + if (FutureSocieties.isActive('FSEdoRevivalist')) { FSScore += Math.min(V.arcologies[0].FSEdoRevivalist, 100); slaveDemandU *= 1 + Math.trunc(Math.min(V.arcologies[0].FSEdoRevivalist, 100) / 20) * 0.02; slaveDemandT *= 1 + Math.trunc(Math.min(V.arcologies[0].FSEdoRevivalist, 100) / 20) * 0.025; } - if (V.arcologies[0].FSArabianRevivalist !== "unset") { + if (FutureSocieties.isActive('FSArabianRevivalist')) { FSScore += Math.min(V.arcologies[0].FSArabianRevivalist, 100); slaveDemandU *= 1 + Math.trunc(Math.min(V.arcologies[0].FSArabianRevivalist, 100) / 20) * 0.02; slaveDemandT *= 1 + Math.trunc(Math.min(V.arcologies[0].FSArabianRevivalist, 100) / 20) * 0.025; } - if (V.arcologies[0].FSChineseRevivalist !== "unset") { + if (FutureSocieties.isActive('FSChineseRevivalist')) { FSScore += Math.min(V.arcologies[0].FSChineseRevivalist, 100); slaveDemandU *= 1 + Math.trunc(Math.min(V.arcologies[0].FSChineseRevivalist, 100) / 20) * 0.02; slaveDemandT *= 1 + Math.trunc(Math.min(V.arcologies[0].FSChineseRevivalist, 100) / 20) * 0.025; } - if (V.arcologies[0].FSAztecRevivalist !== "unset") { + if (FutureSocieties.isActive('FSAztecRevivalist')) { FSScore += Math.min(V.arcologies[0].FSAztecRevivalist, 100); slaveDemandU *= 1 + Math.trunc(Math.min(V.arcologies[0].FSAztecRevivalist, 100) / 20) * 0.02; slaveDemandT *= 1 + Math.trunc(Math.min(V.arcologies[0].FSAztecRevivalist, 100) / 20) * 0.025; } - if (V.arcologies[0].FSNull !== "unset") { + if (FutureSocieties.isActive('FSNull')) { FSScore += Math.min(V.arcologies[0].FSNull, 100); slaveDemandU *= 1 + Math.trunc(Math.min(V.arcologies[0].FSNull, 100) / 20) * -0.1; slaveDemandT *= 1 + Math.trunc(Math.min(V.arcologies[0].FSNull, 100) / 20) * -0.125; @@ -1034,12 +1034,12 @@ App.EndWeek.arcManagement = function() { topClassP *= 1 + Math.trunc(Math.min(V.arcologies[0].FSNull, 100) / 20) * -0.016; r.push(`Your arcology's vibrant, open culture helps everyone succeed, preventing many struggling citizens from falling into slavery.`); } - if (V.arcologies[0].FSRepopulationFocus !== "unset") { + if (FutureSocieties.isActive('FSRepopulationFocus')) { FSScore += Math.min(V.arcologies[0].FSRepopulationFocus, 100); slaveDemandU *= 1 + Math.trunc(Math.min(V.arcologies[0].FSRepopulationFocus, 100) / 20) * 0.04; slaveDemandT *= 1 + Math.trunc(Math.min(V.arcologies[0].FSRepopulationFocus, 100) / 20) * 0.05; slaveProductivity += Math.trunc(Math.min(V.arcologies[0].FSRepopulationFocus, 100) / 20) * -0.01; - if (V.arcologies[0].FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist')) { expirationFS *= 1 + (Math.trunc(Math.min(V.arcologies[0].FSRepopulationFocus, 100) / 20) * 0.05) * (1 + (Math.trunc(Math.min(V.arcologies[0].FSPaternalist, 100) / 20) * -0.1)); } else { expirationFS *= 1 + Math.trunc(Math.min(V.arcologies[0].FSRepopulationFocus, 100) / 20) * 0.05; @@ -1054,7 +1054,7 @@ App.EndWeek.arcManagement = function() { topClassP *= 1 + Math.trunc(Math.min(V.arcologies[0].FSRepopulationFocus, 100) / 20) * -0.004; r.push(`You've made repopulation a priority and the less fortunate hope all these new children will make their lives easier in the future, but the wealthy are wary.`); } - if (V.arcologies[0].FSRestart !== "unset") { + if (FutureSocieties.isActive('FSRestart')) { FSScore += Math.min(V.arcologies[0].FSRestart, 100); slaveDemandU *= 1 + Math.trunc(Math.min(V.arcologies[0].FSRestart, 100) / 20) * 0.04; slaveDemandT *= 1 + Math.trunc(Math.min(V.arcologies[0].FSRestart, 100) / 20) * 0.05; @@ -1068,7 +1068,7 @@ App.EndWeek.arcManagement = function() { topClassP *= 1 + Math.trunc(Math.min(V.arcologies[0].FSRestart, 100) / 20) * 0.004; r.push(`Highly restricted breeding pleases the powerful, but the less fortunate may seek reproductive freedom elsewhere.`); } - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { FSScore += Math.min(V.arcologies[0].FSHedonisticDecadence, 100); slaveDemandU *= 1 + Math.trunc(Math.min(V.arcologies[0].FSHedonisticDecadence, 100) / 20) * 0.02; slaveDemandT *= 1 + Math.trunc(Math.min(V.arcologies[0].FSHedonisticDecadence, 100) / 20) * 0.025; diff --git a/src/endWeek/economics/fsDevelopments.js b/src/endWeek/economics/fsDevelopments.js index 0f7bd6c401a2a765b41092e4c07ff3e58f328808..a1e85f2013d38cfb3e5b5e457bb82e2e694970a0 100644 --- a/src/endWeek/economics/fsDevelopments.js +++ b/src/endWeek/economics/fsDevelopments.js @@ -234,7 +234,7 @@ App.EndWeek.FSDevelopments = function() { if (V.policies.publicPA === 1 && V.assistant.appearance !== "normal") { let seed = 0; for (const FS of App.Data.FutureSociety.playerFSNames.filter(FS => FS !== "FSNull")) { - if (arc[FS] !== "unset") { + if (arc[FS] !== null) { if (App.Data.Assistant.appearanceForFS.get(FS).includes(V.assistant.appearance)) { arc[FS] += 0.1 * V.FSSingleSlaveRep; seed = seed || 1; @@ -286,7 +286,7 @@ App.EndWeek.FSDevelopments = function() { } for (const FS of App.Data.FutureSociety.playerFSNames.filter(FS => FS !== "FSNull")) { - if (arc[FS] !== "unset") { + if (arc[FS] !== null) { const FSDecoration = `${FS}Decoration`; r.push(FutureSocieties.arcSupport(FS)); if (arc[FS] < 0 && (FS !== "FSRestart" || arc.FSRestartDecoration !== 100)) { diff --git a/src/endWeek/economics/neighborsDevelopment.js b/src/endWeek/economics/neighborsDevelopment.js index a08c9868ba83b03fa13a5c96a17b21ad82ef1aa2..fd871452e197d4add8c7c435ff4f37b8f00d774f 100644 --- a/src/endWeek/economics/neighborsDevelopment.js +++ b/src/endWeek/economics/neighborsDevelopment.js @@ -14,6 +14,7 @@ App.EndWeek.neighborsDevelopment = function() { for (let i = 0; i < V.arcologies.length; i++) { const arc = V.arcologies[i]; + const arcInfo = new App.Utils.Arcology(arc); const r = []; r.push(`<span class="bold">${arc.name},</span> your`); if (arc.direction === 0) { @@ -407,7 +408,7 @@ App.EndWeek.neighborsDevelopment = function() { FutureSocieties.applyBroadProgress(i, efficiency); } const passive = new App.Neighbor.PassiveFSInfluence(i); - if (arc.FSSupremacist !== "unset") { + if (arcInfo.fsActive('FSSupremacist')) { r.push(passive.output("FSSupremacist")); if (arc.direction !== 0) { if (arc.FSSupremacist >= V.FSLockinLevel) { @@ -454,10 +455,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSSupremacist < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on ${arc.FSSupremacistRace} Supremacy.`); - arc.FSSupremacist = "unset"; + arc.FSSupremacist = null; } } - if (arc.FSSupremacist !== "unset") { + if (arcInfo.fsActive('FSSupremacist')) { if (V.corp.Incorporated === 1) { if (!V.corp.SpecRaces.includes(arc.FSSupremacistRace)) { r.push(`It's a <span class="lightgreen">good market</span> for your corporation's racially inferior slaves, improving sales and helping social progress.`); @@ -468,7 +469,7 @@ App.EndWeek.neighborsDevelopment = function() { } } - if (arc.FSSubjugationist !== "unset") { + if (arcInfo.fsActive('FSSubjugationist')) { r.push(passive.output("FSSubjugationist")); if (arc.direction !== 0) { if (arc.FSSubjugationist >= V.FSLockinLevel) { @@ -515,10 +516,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSSubjugationist < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on ${arc.FSSubjugationistRace} Subjugationism.`); - arc.FSSubjugationist = "unset"; + arc.FSSubjugationist = null; } } - if (arc.FSSubjugationist !== "unset") { + if (arcInfo.fsActive('FSSubjugationist')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecRaces.includes(arc.FSSubjugationistRace)) { r.push(`It's a <span class="lightgreen">good market</span> for your corporation's ${arc.FSSubjugationistRace} slaves, improving sales and helping social progress.`); @@ -529,7 +530,7 @@ App.EndWeek.neighborsDevelopment = function() { } } - if (arc.FSRepopulationFocus !== "unset") { + if (arcInfo.fsActive('FSRepopulationFocus')) { r.push(passive.output("FSRepopulationFocus")); if (arc.direction !== 0) { if (arc.FSRepopulationFocus >= V.FSLockinLevel) { @@ -540,10 +541,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSRepopulationFocus < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Repopulationism.`); - arc.FSRepopulationFocus = "unset"; + arc.FSRepopulationFocus = null; } } - if (arc.FSRepopulationFocus !== "unset") { + if (arcInfo.fsActive('FSRepopulationFocus')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecMilk > 0) { r.push(`It's a <span class="lightgreen">good market</span> for your corporation's milky cows, improving sales and helping social progress.`); @@ -560,7 +561,7 @@ App.EndWeek.neighborsDevelopment = function() { } } } - } else if (arc.FSRestart !== "unset") { + } else if (arcInfo.fsActive('FSRestart')) { r.push(passive.output("FSRestart")); if (arc.direction !== 0) { if (arc.FSRestart >= V.FSLockinLevel) { @@ -572,10 +573,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSRestart < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Eugenics.`); - arc.FSRestart = "unset"; + arc.FSRestart = null; } } - if (arc.FSRestart !== "unset") { + if (arcInfo.fsActive('FSRestart')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecBalls === -1) { r.push(`It's an <span class="lightgreen">excellent market</span> for your corporation's neutered slavegirls, improving sales and helping social progress.`); @@ -594,7 +595,7 @@ App.EndWeek.neighborsDevelopment = function() { } } - if (arc.FSGenderRadicalist !== "unset") { + if (arcInfo.fsActive('FSGenderRadicalist')) { r.push(passive.output("FSGenderRadicalist")); if (arc.direction !== 0) { if (arc.FSGenderRadicalist >= V.FSLockinLevel) { @@ -606,10 +607,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSGenderRadicalist < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Gender Radicalism.`); - arc.FSGenderRadicalist = "unset"; + arc.FSGenderRadicalist = null; } } - if (arc.FSGenderRadicalist !== "unset") { + if (arcInfo.fsActive('FSGenderRadicalist')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecHormones > 0) { r.push(`It's a <span class="lightgreen">good market</span> for your corporation's hormonally treated slaves, improving sales and helping social progress.`); @@ -632,7 +633,7 @@ App.EndWeek.neighborsDevelopment = function() { } } } - } else if (arc.FSGenderFundamentalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderFundamentalist')) { r.push(passive.output("FSGenderFundamentalist")); if (arc.direction !== 0) { if (arc.FSGenderFundamentalist >= V.FSLockinLevel) { @@ -643,10 +644,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSGenderFundamentalist < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Gender Fundamentalism.`); - arc.FSGenderFundamentalist = "unset"; + arc.FSGenderFundamentalist = null; } } - if (arc.FSGenderFundamentalist !== "unset") { + if (arcInfo.fsActive('FSGenderFundamentalist')) { if (V.corp.Incorporated === 1) { if ((V.corp.SpecGender === 1) || (V.seeDicks === 0)) { r.push(`It's a <span class="lightgreen">good market</span> for your corporation's enslaved females, improving sales and helping social progress.`); @@ -657,7 +658,7 @@ App.EndWeek.neighborsDevelopment = function() { } } - if (arc.FSPaternalist !== "unset") { + if (arcInfo.fsActive('FSPaternalist')) { r.push(passive.output("FSPaternalist")); if (arc.direction !== 0) { if (arc.FSPaternalist >= V.FSLockinLevel) { @@ -668,10 +669,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSPaternalist < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Paternalism.`); - arc.FSPaternalist = "unset"; + arc.FSPaternalist = null; } } - if (arc.FSPaternalist !== "unset") { + if (arcInfo.fsActive('FSPaternalist')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecTrust > 3) { r.push(`It's a <span class="lightgreen">good market</span> for your corporation's well-treated companions, improving sales and helping social progress.`); @@ -689,7 +690,7 @@ App.EndWeek.neighborsDevelopment = function() { } } } - } else if (arc.FSDegradationist !== "unset") { + } else if (arcInfo.fsActive('FSDegradationist')) { r.push(passive.output("FSDegradationist")); if (arc.direction !== 0) { if (arc.FSDegradationist >= V.FSLockinLevel) { @@ -700,10 +701,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSDegradationist < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Degradationism.`); - arc.FSDegradationist = "unset"; + arc.FSDegradationist = null; } } - if (arc.FSDegradationist !== "unset") { + if (arcInfo.fsActive('FSDegradationist')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecTrust < 3) { r.push(`It's a <span class="lightgreen">good market</span> for your corporation's thoroughly terrified slaves, improving sales and helping social progress.`); @@ -723,7 +724,7 @@ App.EndWeek.neighborsDevelopment = function() { } } - if (arc.FSIntellectualDependency !== "unset") { + if (arcInfo.fsActive('FSIntellectualDependency')) { r.push(passive.output("FSIntellectualDependency")); if (arc.direction !== 0) { if (arc.FSIntellectualDependency >= V.FSLockinLevel) { @@ -734,10 +735,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSIntellectualDependency < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Intellectual Dependency.`); - arc.FSIntellectualDependency = "unset"; + arc.FSIntellectualDependency = null; } } - if (arc.FSIntellectualDependency !== "unset") { + if (arcInfo.fsActive('FSIntellectualDependency')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecIntelligence === 1) { r.push(`It's an <span class="lightgreen">excellent market</span> for your corporation's idiotic sluts, improving sales and helping social progress.`); @@ -750,7 +751,7 @@ App.EndWeek.neighborsDevelopment = function() { } } } - } else if (arc.FSSlaveProfessionalism !== "unset") { + } else if (arcInfo.fsActive('FSSlaveProfessionalism')) { r.push(passive.output("FSSlaveProfessionalism")); if (arc.direction !== 0) { if (arc.FSSlaveProfessionalism >= V.FSLockinLevel) { @@ -761,10 +762,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSSlaveProfessionalism < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Slave Professionalism.`); - arc.FSSlaveProfessionalism = "unset"; + arc.FSSlaveProfessionalism = null; } } - if (arc.FSSlaveProfessionalism !== "unset") { + if (arcInfo.fsActive('FSSlaveProfessionalism')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecIntelligence === 3) { r.push(`It's an <span class="lightgreen">excellent market</span> for your corporation's smarter captures, improving sales and helping social progress.`); @@ -793,7 +794,7 @@ App.EndWeek.neighborsDevelopment = function() { } } - if (arc.FSBodyPurist !== "unset") { + if (arcInfo.fsActive('FSBodyPurist')) { r.push(passive.output("FSBodyPurist")); if (arc.direction !== 0) { if (arc.FSBodyPurist >= V.FSLockinLevel) { @@ -803,10 +804,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSBodyPurist < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Body Purism.`); - arc.FSBodyPurist = "unset"; + arc.FSBodyPurist = null; } } - if (arc.FSBodyPurist !== "unset") { + if (arcInfo.fsActive('FSBodyPurist')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecImplants === 0) { if (V.corp.SpecAmputee !== 1) { @@ -817,7 +818,7 @@ App.EndWeek.neighborsDevelopment = function() { } } } - } else if (arc.FSTransformationFetishist !== "unset") { + } else if (arcInfo.fsActive('FSTransformationFetishist')) { r.push(passive.output("FSTransformationFetishist")); if (arc.direction !== 0) { if (arc.FSTransformationFetishist >= V.FSLockinLevel) { @@ -828,10 +829,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSTransformationFetishist < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Transformation Fetishism.`); - arc.FSTransformationFetishist = "unset"; + arc.FSTransformationFetishist = null; } } - if (arc.FSTransformationFetishist !== "unset") { + if (arcInfo.fsActive('FSTransformationFetishist')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecImplants === 1) { r.push(`It's a <span class="lightgreen">good market</span> for your corporation's implanted slaves, improving sales and helping social progress.`); @@ -846,7 +847,7 @@ App.EndWeek.neighborsDevelopment = function() { } } - if (arc.FSYouthPreferentialist !== "unset") { + if (arcInfo.fsActive('FSYouthPreferentialist')) { r.push(passive.output("FSYouthPreferentialist")); if (arc.direction !== 0) { if (arc.FSYouthPreferentialist >= V.FSLockinLevel) { @@ -864,10 +865,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSYouthPreferentialist < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Youth Preferentialism.`); - arc.FSYouthPreferentialist = "unset"; + arc.FSYouthPreferentialist = null; } } - if (arc.FSYouthPreferentialist !== "unset") { + if (arcInfo.fsActive('FSYouthPreferentialist')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecAge === 1) { r.push(`It's a <span class="lightgreen">good market</span> for your corporation's young slaves, improving sales and helping social progress.`); @@ -876,7 +877,7 @@ App.EndWeek.neighborsDevelopment = function() { } } } - } else if (arc.FSMaturityPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSMaturityPreferentialist')) { r.push(passive.output("FSMaturityPreferentialist")); if (arc.direction !== 0) { if (arc.FSMaturityPreferentialist >= V.FSLockinLevel) { @@ -887,10 +888,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSMaturityPreferentialist < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Maturity Preferentialism.`); - arc.FSMaturityPreferentialist = "unset"; + arc.FSMaturityPreferentialist = null; } } - if (arc.FSMaturityPreferentialist !== "unset") { + if (arcInfo.fsActive('FSMaturityPreferentialist')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecAge === 3) { r.push(`It's a <span class="lightgreen">good market</span> for your corporation's enslaved MILFs, improving sales and helping social progress.`); @@ -901,7 +902,7 @@ App.EndWeek.neighborsDevelopment = function() { } } - if (arc.FSPetiteAdmiration !== "unset") { + if (arcInfo.fsActive('FSPetiteAdmiration')) { r.push(passive.output("FSPetiteAdmiration")); if (arc.direction !== 0) { if (arc.FSPetiteAdmiration >= V.FSLockinLevel) { @@ -912,10 +913,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSPetiteAdmiration < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Petite Admiration.`); - arc.FSPetiteAdmiration = "unset"; + arc.FSPetiteAdmiration = null; } } - if (arc.FSPetiteAdmiration !== "unset") { + if (arcInfo.fsActive('FSPetiteAdmiration')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecHeight === 1) { r.push(`It's an <span class="lightgreen">excellent market</span> for your corporation's minuscule slaves, improving sales and helping social progress.`); @@ -928,7 +929,7 @@ App.EndWeek.neighborsDevelopment = function() { } } } - } else if (arc.FSStatuesqueGlorification !== "unset") { + } else if (arcInfo.fsActive('FSStatuesqueGlorification')) { r.push(passive.output("FSStatuesqueGlorification")); if (arc.direction !== 0) { if (arc.FSStatuesqueGlorification >= V.FSLockinLevel) { @@ -939,10 +940,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSStatuesqueGlorification < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Statuesque Glorification.`); - arc.FSStatuesqueGlorification = "unset"; + arc.FSStatuesqueGlorification = null; } } - if (arc.FSStatuesqueGlorification !== "unset") { + if (arcInfo.fsActive('FSStatuesqueGlorification')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecHeight === 5) { r.push(`It's an <span class="lightgreen">excellent market</span> for your corporation's gigantic slaves, improving sales and helping social progress.`); @@ -957,7 +958,7 @@ App.EndWeek.neighborsDevelopment = function() { } } - if (arc.FSSlimnessEnthusiast !== "unset") { + if (arcInfo.fsActive('FSSlimnessEnthusiast')) { r.push(passive.output("FSSlimnessEnthusiast")); if (arc.direction !== 0) { if (arc.FSSlimnessEnthusiast >= V.FSLockinLevel) { @@ -969,10 +970,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSSlimnessEnthusiast < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Slimness Enthusiasm.`); - arc.FSSlimnessEnthusiast = "unset"; + arc.FSSlimnessEnthusiast = null; } } - if (arc.FSSlimnessEnthusiast !== "unset") { + if (arcInfo.fsActive('FSSlimnessEnthusiast')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecInjection < 2) { if (V.corp.SpecWeight < 3) { @@ -983,7 +984,7 @@ App.EndWeek.neighborsDevelopment = function() { } } } - } else if (arc.FSAssetExpansionist !== "unset") { + } else if (arcInfo.fsActive('FSAssetExpansionist')) { r.push(passive.output("FSAssetExpansionist")); if (arc.direction !== 0) { if (arc.FSAssetExpansionist >= V.FSLockinLevel) { @@ -995,10 +996,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSAssetExpansionist < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Asset Expansionism.`); - arc.FSAssetExpansionist = "unset"; + arc.FSAssetExpansionist = null; } } - if (arc.FSAssetExpansionist !== "unset") { + if (arcInfo.fsActive('FSAssetExpansionist')) { if (V.corp.Incorporated === 1) { if (V.corp.SPecInjection === 4) { r.push(`It's an <span class="lightgreen">excellent market</span> for your corporation's world-class tits and ass, improving sales and helping social progress.`); @@ -1017,7 +1018,7 @@ App.EndWeek.neighborsDevelopment = function() { } } - if (arc.FSPastoralist !== "unset") { + if (arcInfo.fsActive('FSPastoralist')) { r.push(passive.output("FSPastoralist")); if (arc.direction !== 0) { if (arc.FSPastoralist >= V.FSLockinLevel) { @@ -1028,10 +1029,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSPastoralist < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Pastoralism.`); - arc.FSPastoralist = "unset"; + arc.FSPastoralist = null; } } - if (arc.FSPastoralist !== "unset") { + if (arcInfo.fsActive('FSPastoralist')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecInjection === 5) { r.push(`It's an <span class="lightgreen">excellent market</span> for your corporation's world-class milk producers, improving sales and helping social progress.`); @@ -1044,7 +1045,7 @@ App.EndWeek.neighborsDevelopment = function() { } } } - } else if (arc.FSCummunism !== "unset") { + } else if (arcInfo.fsActive('FSCummunism')) { r.push(passive.output("FSCummunism")); if (arc.direction !== 0) { if (arc.FSCummunism >= V.FSLockinLevel) { @@ -1055,10 +1056,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSCummunism < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Cummunism.`); - arc.FSCummunism = "unset"; + arc.FSCummunism = null; } } - if (arc.FSCummunism !== "unset") { + if (arcInfo.fsActive('FSCummunism')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecInjection === 5) { r.push(`It's an <span class="lightgreen">excellent market</span> for your corporation's world-class cum producers, improving sales and helping social progress.`); @@ -1077,7 +1078,7 @@ App.EndWeek.neighborsDevelopment = function() { } } - if (arc.FSPhysicalIdealist !== "unset") { + if (arcInfo.fsActive('FSPhysicalIdealist')) { r.push(passive.output("FSPhysicalIdealist")); if (arc.direction !== 0) { if (arc.FSPhysicalIdealist >= V.FSLockinLevel) { @@ -1088,10 +1089,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSPhysicalIdealist < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Physical Idealism.`); - arc.FSPhysicalIdealist = "unset"; + arc.FSPhysicalIdealist = null; } } - if (arc.FSPhysicalIdealist !== "unset") { + if (arcInfo.fsActive('FSPhysicalIdealist')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecMuscle === 5) { r.push(`It's an <span class="lightgreen">excellent market</span> for your corporation's ripped chicks, improving sales and helping social progress.`); @@ -1108,7 +1109,7 @@ App.EndWeek.neighborsDevelopment = function() { } } } - } else if (arc.FSHedonisticDecadence !== "unset") { + } else if (arcInfo.fsActive('FSHedonisticDecadence')) { r.push(passive.output("FSHedonisticDecadence")); if (arc.direction !== 0) { if (arc.FSHedonisticDecadence >= V.FSLockinLevel) { @@ -1120,10 +1121,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSHedonisticDecadence < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Decadent Hedonism.`); - arc.FSHedonisticDecadence = "unset"; + arc.FSHedonisticDecadence = null; } } - if (arc.FSHedonisticDecadence !== "unset") { + if (arcInfo.fsActive('FSHedonisticDecadence')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecTrust > 3) { r.push(`It's an <span class="lightgreen">excellent market</span> for your corporation's well kept, happy slaves, improving sales and helping social progress.`); @@ -1138,7 +1139,7 @@ App.EndWeek.neighborsDevelopment = function() { } } - if (arc.FSIncestFetishist !== "unset") { + if (arcInfo.fsActive('FSIncestFetishist')) { r.push(passive.output("FSIncestFetishist")); if (arc.direction !== 0) { if (arc.FSIncestFetishist >= V.FSLockinLevel) { @@ -1149,10 +1150,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSIncestFetishist < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Incest Fetishism.`); - arc.FSIncestFetishist = "unset"; + arc.FSIncestFetishist = null; } } - if (arc.FSIncestFetishist !== "unset") { + if (arcInfo.fsActive('FSIncestFetishist')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecAge === 3) { r.push(`It's a <span class="lightgreen">good market</span> for your corporation's motherly slaves, especially those that look like peoples mothers, improving sales and helping social progress.`); @@ -1163,7 +1164,7 @@ App.EndWeek.neighborsDevelopment = function() { } } - if (arc.FSChattelReligionist !== "unset") { + if (arcInfo.fsActive('FSChattelReligionist')) { r.push(passive.output("FSChattelReligionist")); if (arc.direction !== 0) { if (arc.FSChattelReligionist >= V.FSLockinLevel) { @@ -1174,10 +1175,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSChattelReligionist < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Chattel Religionism.`); - arc.FSChattelReligionist = "unset"; + arc.FSChattelReligionist = null; } } - if (arc.FSChattelReligionist !== "unset") { + if (arcInfo.fsActive('FSChattelReligionist')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecSexEd === 2) { r.push(`It's an <span class="lightgreen">excellent market</span> for your corporation's holy sex slaves, improving sales and helping social progress.`); @@ -1192,7 +1193,7 @@ App.EndWeek.neighborsDevelopment = function() { } } - if (arc.FSRomanRevivalist !== "unset") { + if (arcInfo.fsActive('FSRomanRevivalist')) { r.push(passive.output("FSRomanRevivalist")); if (arc.direction !== 0) { if (arc.FSRomanRevivalist >= V.FSLockinLevel) { @@ -1203,10 +1204,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSRomanRevivalist < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Roman Revivalism.`); - arc.FSRomanRevivalist = "unset"; + arc.FSRomanRevivalist = null; } } - if (arc.FSRomanRevivalist !== "unset") { + if (arcInfo.fsActive('FSRomanRevivalist')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecEducation > 0) { r.push(`It's a <span class="lightgreen">good market</span> for your corporation's properly educated slaves, improving sales and helping social progress.`); @@ -1215,7 +1216,7 @@ App.EndWeek.neighborsDevelopment = function() { } } } - } else if (arc.FSNeoImperialist !== "unset") { + } else if (arcInfo.fsActive('FSNeoImperialist')) { r.push(passive.output("FSNeoImperialist")); if (arc.direction !== 0) { if (arc.FSNeoImperialist >= V.FSLockinLevel) { @@ -1226,10 +1227,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSNeoImperialist < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Neo-Imperialism.`); - arc.FSNeoImperialist = "unset"; + arc.FSNeoImperialist = null; } } - if (arc.FSNeoImperialist !== "unset") { + if (arcInfo.fsActive('FSNeoImperialist')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecEducation > 0) { r.push(`It's a <span class="lightgreen">good market</span> for your corporation's properly educated slaves, improving sales and helping advocate for a hierarchical Imperial society.`); @@ -1238,7 +1239,7 @@ App.EndWeek.neighborsDevelopment = function() { } } } - } else if (arc.FSAztecRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAztecRevivalist')) { r.push(passive.output("FSAztecRevivalist")); if (arc.direction !== 0) { if (arc.FSAztecRevivalist >= V.FSLockinLevel) { @@ -1249,10 +1250,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSAztecRevivalist < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Aztec Revivalism.`); - arc.FSAztecRevivalist = "unset"; + arc.FSAztecRevivalist = null; } } - if (arc.FSAztecRevivalist !== "unset") { + if (arcInfo.fsActive('FSAztecRevivalist')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecAccent === 1) { r.push(`It's a <span class="lightgreen">good market</span> for your corporation's lovely mix of slave accents, improving sales and helping social progress.`); @@ -1261,7 +1262,7 @@ App.EndWeek.neighborsDevelopment = function() { } } } - } else if (arc.FSEgyptianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEgyptianRevivalist')) { r.push(passive.output("FSEgyptianRevivalist")); if (arc.direction !== 0) { if (arc.FSEgyptianRevivalist >= V.FSLockinLevel) { @@ -1272,10 +1273,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSEgyptianRevivalist < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Egyptian Revivalism.`); - arc.FSEgyptianRevivalist = "unset"; + arc.FSEgyptianRevivalist = null; } } - if (arc.FSEgyptianRevivalist !== "unset") { + if (arcInfo.fsActive('FSEgyptianRevivalist')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecAccent === 1) { r.push(`It's a <span class="lightgreen">good market</span> for your corporation's lovely mix of slave accents, improving sales and helping social progress.`); @@ -1284,7 +1285,7 @@ App.EndWeek.neighborsDevelopment = function() { } } } - } else if (arc.FSEdoRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEdoRevivalist')) { r.push(passive.output("FSEdoRevivalist")); if (arc.direction !== 0) { if (arc.FSEdoRevivalist >= V.FSLockinLevel) { @@ -1295,10 +1296,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSEdoRevivalist < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Edo Revivalism.`); - arc.FSEdoRevivalist = "unset"; + arc.FSEdoRevivalist = null; } } - if (arc.FSEdoRevivalist !== "unset") { + if (arcInfo.fsActive('FSEdoRevivalist')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecAccent === 2) { r.push(`It's a <span class="lightgreen">good market</span> for your corporation's linguistically perfect slaves, improving sales and helping social progress.`); @@ -1307,7 +1308,7 @@ App.EndWeek.neighborsDevelopment = function() { } } } - } else if (arc.FSArabianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSArabianRevivalist')) { r.push(passive.output("FSArabianRevivalist")); if (arc.direction !== 0) { if (arc.FSArabianRevivalist >= V.FSLockinLevel) { @@ -1318,10 +1319,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSArabianRevivalist < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Arabian Revivalism.`); - arc.FSArabianRevivalist = "unset"; + arc.FSArabianRevivalist = null; } } - if (arc.FSArabianRevivalist !== "unset") { + if (arcInfo.fsActive('FSArabianRevivalist')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecDevotion === 5) { r.push(`It's an <span class="lightgreen">excellent market</span> for your corporation's harem-ready devotees, improving sales and helping social progress.`); @@ -1334,7 +1335,7 @@ App.EndWeek.neighborsDevelopment = function() { } } } - } else if (arc.FSChineseRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSChineseRevivalist')) { r.push(passive.output("FSChineseRevivalist")); if (arc.direction !== 0) { if (arc.FSChineseRevivalist >= V.FSLockinLevel) { @@ -1345,10 +1346,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSChineseRevivalist < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Chinese Revivalism.`); - arc.FSChineseRevivalist = "unset"; + arc.FSChineseRevivalist = null; } } - if (arc.FSChineseRevivalist !== "unset") { + if (arcInfo.fsActive('FSChineseRevivalist')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecIntelligence === 3) { r.push(`It's a <span class="lightgreen">good market</span> for your corporation's intelligent Head Girl prospects, improving sales and helping social progress.`); @@ -1357,7 +1358,7 @@ App.EndWeek.neighborsDevelopment = function() { } } } - } else if (arc.FSAntebellumRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAntebellumRevivalist')) { r.push(passive.output("FSAntebellumRevivalist")); if (arc.direction !== 0) { if (arc.FSAntebellumRevivalist >= V.FSLockinLevel) { @@ -1368,10 +1369,10 @@ App.EndWeek.neighborsDevelopment = function() { } } else if (arc.FSAntebellumRevivalist < 0) { r.push(`${arc.name} <span class="cyan">has given up</span> on Antebellum Revivalism.`); - arc.FSAntebellumRevivalist = "unset"; + arc.FSAntebellumRevivalist = null; } } - if (arc.FSAntebellumRevivalist !== "unset") { + if (arcInfo.fsActive('FSAntebellumRevivalist')) { if (V.corp.Incorporated === 1) { if (V.corp.SpecEducation > 0) { r.push(`It's a <span class="lightgreen">good market</span> for your corporation's properly educated slaves.`); @@ -1617,7 +1618,7 @@ App.EndWeek.neighborsDevelopment = function() { const group = App.Data.FutureSociety.mutexGroups.find(g => g.includes(adoptFS)); if (group && group.length > 1) { for (const opposing of group) { - arc[opposing] = "unset"; + arc[opposing] = null; } } // and initialize the target FS at 5 @@ -1763,7 +1764,7 @@ App.EndWeek.neighborsDevelopment = function() { } else { // RIVAL ADOPTION let desc = "Its owner is"; if (V.arcologies[0].FSSubjugationist > random(5, 60)) { - if (validFSes.includes("FSSupremacist") && (arc.FSSubjugationist === "unset") || (arc.FSSubjugationistRace !== V.arcologies[0].FSSubjugationistRace)) { + if (validFSes.includes("FSSupremacist") && (!FutureSocieties.isActive('FSSubjugationist', arc)) || (arc.FSSubjugationistRace !== V.arcologies[0].FSSubjugationistRace)) { r.push(`${desc} preoccupied by belief in the superiority of the ${V.arcologies[0].FSSubjugationistRace} race, leading the arcology to <span class="yellow">adopt ${V.arcologies[0].FSSubjugationistRace} Supremacy.</span>`); arc.FSSupremacist = 5; arc.FSSupremacistRace = V.arcologies[0].FSSubjugationistRace; @@ -1771,7 +1772,7 @@ App.EndWeek.neighborsDevelopment = function() { } } if (V.arcologies[0].FSSupremacist > random(5, 60)) { - if ((validFSes.includes("FSSubjugationist") && (arc.FSSupremacist === "unset") || (arc.FSSupremacistRace !== V.arcologies[0].FSSupremacistRace))) { + if ((validFSes.includes("FSSubjugationist") && (!FutureSocieties.isActive('FSSupremacist', arc)) || (arc.FSSupremacistRace !== V.arcologies[0].FSSupremacistRace))) { r.push(`${desc} preoccupied by a racial animus towards ${V.arcologies[0].FSSupremacistRace} people, leading the arcology to <span class="yellow">adopt ${V.arcologies[0].FSSupremacistRace} Subjugation.</span>`); arc.FSSubjugationist = 5; arc.FSSubjugationistRace = V.arcologies[0].FSSupremacistRace; @@ -2626,7 +2627,7 @@ App.EndWeek.neighborsDevelopment = function() { switch (validFSes.random()) { case "FSSubjugationist": { const subjugationRace = Array.from(App.Data.misc.filterRaces.keys()).random(); - if ((arc.FSSupremacist === "unset") || (subjugationRace !== arc.FSSupremacistRace)) { + if (!FutureSocieties.isActive('FSSupremacist', arc) || (subjugationRace !== arc.FSSupremacistRace)) { r.push(`${desc} preoccupied by a racial animus towards ${subjugationRace} people, leading the arcology to <span class="yellow">adopt ${subjugationRace} Subjugation.</span>`); arc.FSSubjugationist = 5; arc.FSSubjugationistRace = subjugationRace; @@ -2636,7 +2637,7 @@ App.EndWeek.neighborsDevelopment = function() { } case "FSSupremacist": { const supremacistRace = Array.from(App.Data.misc.filterRaces.keys()).random(); - if ((arc.FSSubjugationist === "unset") || (supremacistRace !== arc.FSSubjugationistRace)) { + if (!FutureSocieties.isActive('FSSubjugationist', arc) || (supremacistRace !== arc.FSSubjugationistRace)) { r.push(`${desc} preoccupied by belief in the superiority of the ${supremacistRace} race, leading the arcology to <span class="yellow">adopt ${supremacistRace} Supremacy.</span>`); arc.FSSupremacist = 5; arc.FSSupremacistRace = supremacistRace; diff --git a/src/endWeek/economics/persBusiness.js b/src/endWeek/economics/persBusiness.js index 71af9db99ecebc4d24215ca684be80a6788977cb..7f662c379e86bcf7afb2d54535b5598957e31aa7 100644 --- a/src/endWeek/economics/persBusiness.js +++ b/src/endWeek/economics/persBusiness.js @@ -23,7 +23,7 @@ App.EndWeek.personalBusiness = function() { const interest = 1 + Math.trunc(Math.abs(V.cash) / 100); cashX(forceNeg(interest), "personalBusiness"); r.push(`<span class="red">You are in debt.</span> This week, interest came to ${cashFormat(interest)}.`); - if (V.arcologies[0].FSRomanRevivalist !== "unset") { + if (FutureSocieties.isActive('FSRomanRevivalist')) { r.push(`Society <span class="red">very strongly disapproves</span> of your being in debt; this damages the idea that you model yourself on what a Roman leader should be.`); FutureSocieties.Change("Roman Revivalist", -10); } @@ -654,6 +654,8 @@ App.EndWeek.personalBusiness = function() { // If it is long enough to be a nuisance to scroll through, put it down here. function whoring() { const arcology = V.arcologies[0]; + const arcologyInfo = new App.Utils.Arcology(arcology); + hindranceMod = isHinderedDegree(V.PC, true); let sceneContinues = true; let desperation = false; @@ -701,7 +703,7 @@ App.EndWeek.personalBusiness = function() { income -= V.PC.health.illness * 150; // An attractive player can charge more, while an unattractive one will have to offer less. - if ((arcology.FSTransformationFetishist > 20 && arcology.FSSlimnessEnthusiast === "unset") || arcology.FSAssetExpansionist > 20) { + if ((arcology.FSTransformationFetishist > 20 && !arcologyInfo.fsActive('FSSlimnessEnthusiast')) || arcology.FSAssetExpansionist > 20) { if (V.PC.boobs > 500) { income += V.PC.boobs / 10; } else if (V.PC.title === 0) { // These all need to be appearance checks in 5.0.0. @@ -725,7 +727,7 @@ App.EndWeek.personalBusiness = function() { } } if (arcology.FSTransformationFetishist > 20) { - if (arcology.FSSlimnessEnthusiast !== "unset") { + if (arcologyInfo.fsActive('FSSlimnessEnthusiast')) { if (V.PC.boobsImplant / V.PC.boobs >= 0.25) { if (V.PC.boobs > 500) { income += 25; @@ -757,16 +759,16 @@ App.EndWeek.personalBusiness = function() { if (V.PC.boobShape === "downward-facing" || V.PC.boobShape === "saggy") { income -= 25; } else if (V.PC.boobShape === "spherical") { - if (arcology.FSTransformationFetishist !== "unset") { + if (arcologyInfo.fsActive('FSTransformationFetishist')) { income += arcology.FSTransformationFetishist * 5; - } else if (arcology.FSBodyPurist !== "unset") { + } else if (arcologyInfo.fsActive('FSBodyPurist')) { income -= arcology.FSBodyPurist * 5; } else { income -= 100; } } } - if ((arcology.FSTransformationFetishist > 20 && arcology.FSSlimnessEnthusiast === "unset") || arcology.FSAssetExpansionist > 20) { + if ((arcology.FSTransformationFetishist > 20 && !arcologyInfo.fsActive('FSSlimnessEnthusiast')) || arcology.FSAssetExpansionist > 20) { if (V.PC.butt <= 2) { income -= 100; } else { @@ -788,7 +790,7 @@ App.EndWeek.personalBusiness = function() { } } if (arcology.FSTransformationFetishist > 20) { - if (arcology.FSSlimnessEnthusiast !== "unset") { + if (arcologyInfo.fsActive('FSSlimnessEnthusiast')) { if (V.PC.buttImplant / V.PC.butt >= 0.25) { if (V.PC.butt >= 3) { income += 10; @@ -804,36 +806,36 @@ App.EndWeek.personalBusiness = function() { } if (arcology.FSAssetExpansionist > 20) { if (V.PC.dick > 6) { - if ((arcology.FSGenderFundamentalist !== "unset" && V.PC.title === 1) || arcology.FSGenderFundamentalist === "unset") { // 5.0.0 + if ((arcologyInfo.fsActive('FSGenderFundamentalist') && V.PC.title === 1) || !arcologyInfo.fsActive('FSGenderFundamentalist')) { // 5.0.0 income += 20 * V.PC.dick; } } - } else if (arcology.FSGenderRadicalist !== "unset") { + } else if (arcologyInfo.fsActive('FSGenderRadicalist')) { if (V.PC.title === 0 || V.PC.boobs >= 300 || V.PC.vagina >= 0) { income += 50 * V.PC.dick; } } - if (arcology.FSAssetExpansionist > 20 && arcology.FSGenderFundamentalist === "unset") { + if (arcology.FSAssetExpansionist > 20 && !arcologyInfo.fsActive('FSGenderFundamentalist')) { if (V.PC.balls > 10) { - if ((arcology.FSGenderFundamentalist !== "unset" && V.PC.title === 1) || arcology.FSGenderFundamentalist === "unset") { // 5.0.0 + if ((arcologyInfo.fsActive('FSGenderFundamentalist') && V.PC.title === 1) || !arcologyInfo.fsActive('FSGenderFundamentalist')) { // 5.0.0 income += 10 * V.PC.balls; } } - } else if (arcology.FSGenderRadicalist !== "unset") { + } else if (arcologyInfo.fsActive('FSGenderRadicalist')) { if (V.PC.balls > 2) { if (V.PC.title === 0 || V.PC.boobs >= 300 || V.PC.vagina >= 0) { income += 10 * V.PC.balls; } } } - if (arcology.FSPetiteAdmiration !== "unset" || arcology.FSStatuesqueGlorification !== "unset") { + if (arcologyInfo.fsActive('FSPetiteAdmiration') || arcologyInfo.fsActive('FSStatuesqueGlorification')) { if (heightPass(V.PC)) { income += 200; - } else if (arcology.FSStatuesqueGlorification !== "unset") { + } else if (arcologyInfo.fsActive('FSStatuesqueGlorification')) { income -= 200; } } - if (arcology.FSPhysicalIdealist !== "unset") { + if (arcologyInfo.fsActive('FSPhysicalIdealist')) { if (arcology.FSPhysicalIdealistLaw === 1 && Math.abs(V.PC.weight) <= 30 && V.PC.health.condition >= 20 && V.PC.muscles >= 20 && V.PC.muscles <= 50) { income += 100; } else if (V.PC.muscles > 30) { @@ -846,7 +848,7 @@ App.EndWeek.personalBusiness = function() { income += 50; } } - } else if (arcology.FSHedonisticDecadence !== "unset") { + } else if (arcologyInfo.fsActive('FSHedonisticDecadence')) { if (arcology.FSHedonisticDecadenceStrongFat === 1) { income += (V.PC.muscles * (arcology.FSHedonisticDecadence / 200)); } @@ -949,7 +951,7 @@ App.EndWeek.personalBusiness = function() { income += 200; } } - if (V.PC.lactation > 0 && arcology.FSPastoralist !== "unset") { + if (V.PC.lactation > 0 && arcologyInfo.fsActive('FSPastoralist')) { income += Math.max(V.PC.lactationAdaptation * V.PC.lactation, 10); V.PC.lactationDuration = 2; V.PC.boobs -= V.PC.boobsMilk; @@ -965,15 +967,15 @@ App.EndWeek.personalBusiness = function() { income *= 2; } if (V.PC.bellyPreg >= 500) { - if (arcology.FSRestart !== "unset") { + if (arcologyInfo.fsActive('FSRestart')) { income *= .5; - } else if (arcology.FSRepopulationFocus !== "unset") { + } else if (arcologyInfo.fsActive('FSRepopulationFocus')) { income *= 1.1; } else if (arcology.FSRepopulationFocusPregPolicy === 1) { income *= .9; - } else if (arcology.FSGenderRadicalist !== "unset" && V.PC.mpreg === 1) { + } else if (arcologyInfo.fsActive('FSGenderRadicalist') && V.PC.mpreg === 1) { income *= .9; - } else if (arcology.FSGenderFundamentalist === "unset" && V.PC.title === 0) { // 5.0.0 + } else if (!arcologyInfo.fsActive('FSGenderFundamentalist') && V.PC.title === 0) { // 5.0.0 income *= .8; } else { income *= .7; @@ -1061,7 +1063,7 @@ App.EndWeek.personalBusiness = function() { if (canPenetrate(V.PC)) { if (V.PC.dick > 3) { dickMod += V.PC.dick * .02; - } else if (arcology.FSGenderRadicalist !== "unset" && (V.PC.title === 0 || V.PC.boobs >= 300 || V.PC.vagina >= 0)) { // 5.0.0 + } else if (arcologyInfo.fsActive('FSGenderRadicalist') && (V.PC.title === 0 || V.PC.boobs >= 300 || V.PC.vagina >= 0)) { // 5.0.0 dickMod += .1; } else if (V.PC.dick === 2) { dickMod -= .2; @@ -1223,7 +1225,7 @@ App.EndWeek.personalBusiness = function() { if (onBedRest(V.PC)) { r.push(`You ${intro}.`); } else { - if (V.PC.bellyPreg >= 1500 && V.arcologies[0].FSRestart !== "unset" && V.PC.pregSource !== -1 && V.PC.pregSource !== -6) { + if (V.PC.bellyPreg >= 1500 && FutureSocieties.isActive('FSRestart') && V.PC.pregSource !== -1 && V.PC.pregSource !== -6) { r.push(`You ${intro} and earn <span class="yellowgreen">${cashFormat(25)},</span> barely enough to cover the abortion the john that gave it to you told you to get. Showing off your gravid body <span class="red">infuriates your citizens and cripples your reputation.</span>`); cashX(25, "personalBusiness"); repX((V.rep * .5) - V.rep, "personalBusiness"); @@ -1314,15 +1316,15 @@ App.EndWeek.personalBusiness = function() { r.push(`You are virtually unknown, placing you in direct competition with other free whores and the sea of cheap slave holes.`); } if (V.PC.bellyPreg >= 500) { - if (arcology.FSRestart !== "unset") { + if (arcologyInfo.fsActive('FSRestart')) { r.push(`Your pregnancy turns off most potential clients, and those that were willing to have sex with a pregnant whore refused to pay very much to do so.`); - } else if (arcology.FSRepopulationFocus !== "unset") { + } else if (arcologyInfo.fsActive('FSRepopulationFocus')) { r.push(`You were able to charge clients more than expected despite being with child; you guess your pregnancy-focused population wants your baby-rounded body more than ever.`); } else if (arcology.FSRepopulationFocusPregPolicy === 1) { r.push(`You were able to charge your clients a little more than anticipated for a ${girlP} with child; but that's not too surprising, after all, pregnancy is trendy right now.`); - } else if (arcology.FSGenderRadicalist !== "unset" && V.PC.mpreg === 1) { + } else if (arcologyInfo.fsActive('FSGenderRadicalist') && V.PC.mpreg === 1) { r.push(`You were able to charge your clients a little more than anticipated for a ${girlP} with child; you guess your radical reproductive alterations are a turn on to society these days.`); - } else if (arcology.FSGenderFundamentalist === "unset" && V.PC.title === 0) { // 5.0.0 + } else if (!arcologyInfo.fsActive('FSGenderFundamentalist') && V.PC.title === 0) { // 5.0.0 r.push(`Clients were willing to pay a little more than normal to help support a pregnant woman, but you still had to cut prices to see any use.`); } else { r.push(`Your pregnancy was turning off potential clients, so you were forced to cut your prices to encourage purchases.`); @@ -1330,7 +1332,7 @@ App.EndWeek.personalBusiness = function() { } else if (V.PC.bellyImplant >= 1500 && arcology.FSTransformationFetishist <= 20 && arcology.FSRepopulationFocus <= 60) { r.push(`Your faux pregnancy was turning off potential clients, so you were forced to cut your prices to encourage purchases.`); } else if (canGetPregnant(V.PC) && (vaginalUse > 0 || (analUse > 0 && V.PC.mpreg === 1))) { - if (V.arcologies[0].FSRepopulationFocus !== "unset" && random(1, 100) > 80) { + if (FutureSocieties.isActive('FSRepopulationFocus') && random(1, 100) > 80) { r.push(`A horny client offered you an extra <span class="yellowgreen">${cashFormat(1000)}</span> for downing some fertility drugs. You're already forgoing birth control, so what harm could an extra baby do?`); cashX(1000, "personalBusiness"); V.PC.forcedFertDrugs += 2; @@ -1978,7 +1980,7 @@ App.EndWeek.personalBusiness = function() { } else if (hindranceMod < 1) { r.push(`You missed out on several lucrative deals by getting slowed down by your body.`); } - if (V.arcologies[0].FSRomanRevivalist !== "unset") { + if (FutureSocieties.isActive('FSRomanRevivalist')) { r.push(`Society <span class="green">approves</span> of your close attention to your own affairs; this advances your image as a`); if (V.PC.title === 1) { r.push(`well-rounded Roman man.`); diff --git a/src/endWeek/economics/reputation.js b/src/endWeek/economics/reputation.js index 796bd27da7ae347322e4ead3694bccfdc086b412..e36b88077601f130b70ebd52062450b78cbb1ac3 100644 --- a/src/endWeek/economics/reputation.js +++ b/src/endWeek/economics/reputation.js @@ -10,7 +10,7 @@ App.EndWeek.reputation = function() { App.UI.DOM.appendNewElement("h2", el, `Reputation`); } r.push(`On formal occasions, you are announced as ${PCTitle()}.`); - if (V.arcologies[0].FSChattelReligionist !== "unset") { + if (FutureSocieties.isActive('FSChattelReligionist')) { if (V.arcologies[0].FSChattelReligionistCreed === 1) { r.push(`${V.arcologies[0].name} keeps the creed of the ${V.nicaea.name}. The faithful`); if (V.nicaea.achievement === "slaves") { @@ -243,7 +243,7 @@ App.EndWeek.reputation = function() { if (V.arcologies[0].FSChattelReligionistLaw === 1 || V.arcologies[0].FSRestartDecoration === 100) { /* already handled above */ - } else if (V.arcologies[0].FSIntellectualDependency !== "unset") { + } else if (FutureSocieties.isActive('FSIntellectualDependency')) { if (V.PC.intelligence + V.PC.intelligenceImplant < -10) { 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.`); @@ -252,7 +252,7 @@ App.EndWeek.reputation = function() { r.push(`Society <span class="red">is uncomfortable</span> with just how slow you are. While they may find your mannerisms cute, it is not befitting of a leader.`); } } - } else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + } else if (FutureSocieties.isActive('FSSlaveProfessionalism')) { if (V.PC.intelligence + V.PC.intelligenceImplant < 100) { 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.`); @@ -282,7 +282,7 @@ App.EndWeek.reputation = function() { if (V.arcologies[0].FSChattelReligionistLaw === 1 || V.arcologies[0].FSRestartDecoration === 100) { /* already handled above */ } else { - if (V.arcologies[0].FSGenderRadicalist !== "unset") { + if (FutureSocieties.isActive('FSGenderRadicalist')) { 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 { @@ -290,7 +290,7 @@ App.EndWeek.reputation = function() { FutureSocieties.Change("Gender Radicalist", -1); repX(-1000, "PCactions"); } - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset" && V.PC.vagina !== -1 && V.PC.title === 0) { + } else if (FutureSocieties.isActive('FSGenderFundamentalist') && V.PC.vagina !== -1 && V.PC.title === 0) { 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("Gender Fundamentalist", 1); @@ -349,12 +349,12 @@ App.EndWeek.reputation = function() { repX(forceNeg(V.SF.ArmySize + App.Mods.SF.upgrades.total()), "specialForces"); } - if (V.arcologies[0].FSSupremacist !== "unset") { + if (FutureSocieties.isActive('FSSupremacist')) { if (V.PC.race === V.arcologies[0].FSSupremacistRace) { r.push(`Since you are a member of the ${V.PC.race} race, society <span class="green">strongly approves</span> of your ownership of the arcology.`); FutureSocieties.Change("Supremacist", 5); } - } else if (V.arcologies[0].FSSubjugationist !== "unset") { + } else if (FutureSocieties.isActive('FSSubjugationist')) { if (V.PC.race === V.arcologies[0].FSSubjugationistRace) { 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.`); @@ -365,7 +365,7 @@ App.EndWeek.reputation = function() { } } - if (V.arcologies[0].FSAssetExpansionist !== "unset") { + if (FutureSocieties.isActive('FSAssetExpansionist')) { if (V.PC.boobs >= 1400) { r.push(`Society loves enormous breasts and you are no exception; your`); if (V.PC.boobsImplant > 0) { @@ -390,7 +390,7 @@ App.EndWeek.reputation = function() { r.push(`Society loves big things and the bulge in your crotch is no exception; your swollen balls <span class="green">improve</span> your public image.`); repX((5 * V.PC.ballsImplant), "PCappearance"); } - } else if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + } else if (FutureSocieties.isActive('FSSlimnessEnthusiast')) { if (V.PC.boobs >= 1000) { r.push(`Society finds big breasts unsightly and you are no exception; your`); if (V.PC.boobsImplant > 0) { @@ -413,7 +413,7 @@ App.EndWeek.reputation = function() { } } - if (V.arcologies[0].FSTransformationFetishist !== "unset") { + if (FutureSocieties.isActive('FSTransformationFetishist')) { if (V.PC.boobsImplant > 0) { r.push(`Society loves fake breasts and yours are no exception; your breast implants <span class="green">improve</span> your public image.`); repX((V.PC.boobsImplant / 5), "PCappearance"); @@ -426,7 +426,7 @@ App.EndWeek.reputation = function() { r.push(`Society loves everything augmented and the bulge in your crotch is no exception; your swollen balls <span class="green">improve</span> your public image.`); repX((5 * (V.PC.ballsImplant)), "PCappearance"); } - if (V.arcologies[0].FSRepopulationFocus !== "unset") { + if (FutureSocieties.isActive('FSRepopulationFocus')) { if (V.PC.boobs >= 1000 && V.PC.boobsImplant === 0) { r.push(`Society approves of anything that helps the repopulation efforts. Your large breasts promise plentiful milk and <span class="green">improve</span> your public image.`); repX((V.PC.boobs / 50), "PCappearance"); @@ -436,7 +436,7 @@ App.EndWeek.reputation = function() { repX((15 * V.PC.balls), "PCappearance"); } } - } else if (V.arcologies[0].FSBodyPurist !== "unset") { + } else if (FutureSocieties.isActive('FSBodyPurist')) { if (V.PC.boobsImplant !== 0) { r.push(`Society finds fake breasts repulsive and yours are no exception; your balloon-like breasts <span class="red">harm</span> your public image.`); repX(forceNeg(V.PC.boobsImplant / 10), "PCappearance"); @@ -449,11 +449,11 @@ App.EndWeek.reputation = function() { r.push(`Society finds everything unnatural disgusting and the grotesque bulge in your crotch is no exception; your gel-filled balls <span class="red">harm</span> your public image.`); repX(forceNeg(10 * V.PC.ballsImplant), "PCappearance"); } - if (V.arcologies[0].FSRepopulationFocus !== "unset" && V.PC.boobs >= 1000 && V.PC.boobsImplant === 0) { + if (FutureSocieties.isActive('FSRepopulationFocus') && V.PC.boobs >= 1000 && V.PC.boobsImplant === 0) { r.push(`Society approves of anything that helps the repopulation efforts. Your large breasts promise plentiful milk and <span class="green">improve</span> your public image.`); repX((V.PC.boobs / 50), "PCappearance"); } - } else if (V.arcologies[0].FSRepopulationFocus !== "unset") { + } else if (FutureSocieties.isActive('FSRepopulationFocus')) { if (V.PC.boobs >= 1000 && V.PC.boobsImplant === 0) { r.push(`Society approves of anything that helps the repopulation efforts. Your large breasts promise plentiful milk and <span class="green">improve</span> your public image.`); repX((V.PC.boobs / 50), "PCappearance"); @@ -468,7 +468,7 @@ App.EndWeek.reputation = function() { (V.PC.belly >= 1500) || (V.PC.career === "escort" && V.PC.belly >= 500 && V.PC.preg > 0) // .belly? .clothing? ) { - if (V.arcologies[0].FSRestart !== "unset") { + if (FutureSocieties.isActive('FSRestart')) { if (V.arcologies[0].FSRestartDecoration === 100) { if (V.PC.pregSource !== -1 && V.PC.pregSource !== -6) { r.push(`Most prominent female owners avoid being penetrated on`); @@ -589,7 +589,7 @@ App.EndWeek.reputation = function() { } } - if (V.arcologies[0].FSRomanRevivalist !== "unset") { + if (FutureSocieties.isActive('FSRomanRevivalist')) { if (V.mercenaries > 0) { r.push(`Society <span class="green">approves</span> of how you are providing for the defense of the state, as should all citizens of the new Rome.`); FutureSocieties.Change("Roman Revivalist", V.mercenaries); @@ -609,7 +609,7 @@ App.EndWeek.reputation = function() { r.push(`Continuing to use ${V.language} as the lingua franca of ${V.arcologies[0].name} rather than the storied Latin <span class="red">disappoints</span> society and causes doubt about your revivalist project.`); FutureSocieties.Change("Roman Revivalist", -2); } - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSAztecRevivalist')) { if (V.PC.visualAge >= 35) { r.push(`Society <span class="green">approves</span> of your advancing age, which advances the ancient Aztec ideal of an experienced leader of the people.`); FutureSocieties.Change("Aztec Revivalist", 1); @@ -635,7 +635,7 @@ App.EndWeek.reputation = function() { r.push(`Continuing to use ${V.language} as the lingua franca of ${V.arcologies[0].name} rather than the revived Nahuatl <span class="red">disappoints</span> society and causes doubt about your revivalist project.`); FutureSocieties.Change("Aztec Revivalist", -3); } - } else if (V.arcologies[0].FSNeoImperialist !== "unset") { + } else if (FutureSocieties.isActive('FSNeoImperialist')) { if (V.mercenaries > 0) { r.push(`Society <span class="green">approves</span> of your strong militarism and elite mercenaries, as your tradition of Imperial conquest glorifies military success above all else.`); FutureSocieties.Change("Neo-Imperialist", V.mercenaries); @@ -665,7 +665,7 @@ App.EndWeek.reputation = function() { r.push(`Society <span class="green">approves</span> of having a leader who is a capable warrior. Your strength in battle is proof of your indisputable right to rule.`); FutureSocieties.Change("Neo-Imperialist", 2); } - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSEgyptianRevivalist')) { const racialVarieties = new Set(V.slaves.map((s) => s.race)); if (racialVarieties.size > 4) { r.push(`Society <span class="green">strongly approves</span> of how you own a cornucopia of different races, which advances the ancient Egyptian ideal of cosmopolitan sex slavery.`); @@ -675,7 +675,7 @@ App.EndWeek.reputation = function() { r.push(`Continuing to use ${V.language} as the lingua franca of ${V.arcologies[0].name} rather than revived Ancient Egyptian <span class="red">disappoints</span> society and causes doubt about your revivalist project.`); FutureSocieties.Change("Egyptian Revivalist", -2); } - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSEdoRevivalist')) { const threshold = Math.trunc(V.rep / 2000); if (V.slaves.filter(s => [Job.CLUB, Job.DJ, Job.PUBLIC].includes(s.assignment) || (s.assignment === Job.RECRUITER && V.recruiterTarget === "other arcologies" && V.arcologies[0].influenceTarget !== -1)).length <= threshold) { r.push(`Society <span class="red">disapproves</span> of your failure to provide for cultural development by offering public servants or club slaves in a number that befits your reputation.`); @@ -688,7 +688,7 @@ App.EndWeek.reputation = function() { r.push(`Continuing to use ${V.language} as the lingua franca of ${V.arcologies[0].name} rather than pure Japanese <span class="red">disappoints</span> society and causes doubt about your revivalist project.`); FutureSocieties.Change("Edo Revivalist", -2); } - } else if (V.arcologies[0].FSArabianRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSArabianRevivalist')) { if (fuckSlavesLength() < V.rep / 3500) { r.push(`Society <span class="red">disapproves</span> of the small size of your harem, feeling that you do not have enough fucktoys or slaves in your master suite for your reputation.`); FutureSocieties.Change("Arabian Revivalist", -2); @@ -700,7 +700,7 @@ App.EndWeek.reputation = function() { r.push(`Continuing to use ${V.language} as the lingua franca of ${V.arcologies[0].name} rather than the Arabic in which the word of God was passed to Muhammad <span class="red">disappoints</span> society and causes doubt about your revivalist project.`); FutureSocieties.Change("Arabian Revivalist", -2); } - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSChineseRevivalist')) { if (V.HeadGirlID === 0) { r.push(`Society <span class="red">disapproves</span> of your failure to rely on a Head Girl, as proper imperial administration requires,`); FutureSocieties.Change("Chinese Revivalist", -2); @@ -726,7 +726,7 @@ App.EndWeek.reputation = function() { r.push(`Continuing to use ${V.language} as the lingua franca of ${V.arcologies[0].name} rather than the Chinese of the Middle Kingdom <span class="red">disappoints</span> society and causes doubt about your revivalist project.`); FutureSocieties.Change("Chinese Revivalist", -2); } - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSAntebellumRevivalist')) { if (App.Entity.facilities.servantsQuarters.totalEmployeesCount < Math.round(V.rep / 2000)) { r.push(`Society <span class="red">disapproves</span> of your lack of maids and servants, ill-befitting of a supposed Southron aristocrat.`); FutureSocieties.Change("Antebellum Revivalist", -2); @@ -738,12 +738,12 @@ App.EndWeek.reputation = function() { r.push(`Continuing to use ${V.language} as the lingua franca of ${V.arcologies[0].name} rather than pure American English <span class="red">disappoints</span> society and causes doubt about your revivalist project.`); FutureSocieties.Change("Antebellum Revivalist", -2); } - if (V.arcologies[0].FSSubjugationist !== "unset") { + if (FutureSocieties.isActive('FSSubjugationist')) { r.push(`Society <span class="green">approves</span> of embracing both Antebellum Revivalism and Subjugationism.`); FutureSocieties.Change("Antebellum Revivalist", 1); FutureSocieties.Change("Subjugationist", 1); } - if (V.arcologies[0].FSSupremacist !== "unset") { + if (FutureSocieties.isActive('FSSupremacist')) { r.push(`Society <span class="green">approves</span> of embracing both Antebellum Revivalism and Supremacism.`); FutureSocieties.Change("Antebellum Revivalist", 1); FutureSocieties.Change("Supremacist", 1); @@ -752,10 +752,10 @@ App.EndWeek.reputation = function() { // 200 is probably a bit ridiculous side, but might as well give a fun little reward for it if (V.slaves.length >= 200) { r.push(`Society is in <span class="green">awe</span> with the sheer size of your stable of slaves.`); - FutureSocieties.Change("Antebellum Revivalist", 25); + FutureSocieties.Change("Antebellum Revivalist", 25); } else if (V.slaves.length >= 100) { r.push(`Society is <span class="green">impressed</span> with the number of slaves you own.`); - FutureSocieties.Change("Antebellum Revivalist", 10); + FutureSocieties.Change("Antebellum Revivalist", 10); } else if (V.slaves.length >= 50) { r.push(`Society holds <span class="green">great respect</span> for the number of slaves you own.`); FutureSocieties.Change("Antebellum Revivalist", 5); @@ -803,19 +803,19 @@ App.EndWeek.reputation = function() { let noEugenics; let yesEugenics; - if (V.arcologies[0].FSRepopulationFocus !== "unset") { + if (FutureSocieties.isActive('FSRepopulationFocus')) { if (policies.countEugenicsSMRs() > 0) { r.push(`Society <span class="red">disapproves</span> of your policies sterilizing potential mothers. Your insistence on eugenics hinders adoption of your new society.`); noEugenics = -1 * policies.countEugenicsSMRs(); FutureSocieties.Change("Repopulationist", noEugenics); } - } else if (V.arcologies[0].FSPaternalist !== "unset") { + } else if (FutureSocieties.isActive('FSPaternalist')) { if (policies.countEugenicsSMRs() > 0) { r.push(`Society <span class="red">disapproves</span> of your policies forcefully sterilizing slaves, especially when they snuff out the life growing within them.`); noEugenics = -1 * policies.countEugenicsSMRs(); FutureSocieties.Change("Paternalist", noEugenics); } - } else if ((V.arcologies[0].FSRestart !== "unset") && V.arcologies[0].FSPaternalist === "unset") { + } else if ((FutureSocieties.isActive('FSRestart')) && !FutureSocieties.isActive('FSPaternalist')) { if (policies.countEugenicsSMRs() > 0 && V.arcologies[0].FSRestartSMR !== 1) { r.push(`Society <span class="green"> approves</span> of your slave eugenics policies, easing them into more thorough eugenics.`); yesEugenics = policies.countEugenicsSMRs(); @@ -826,7 +826,7 @@ App.EndWeek.reputation = function() { } } - if (V.arcologies[0].FSRepopulationFocus !== "unset" && V.birthsTotal > 0) { + if (FutureSocieties.isActive('FSRepopulationFocus') && V.birthsTotal > 0) { r.push(`The number of children you've brought into the world <span class="green">pleases</span> your citizens.`); if (V.birthsTotal < 1000) { repX(V.birthsTotal, "PCactions"); @@ -836,30 +836,30 @@ App.EndWeek.reputation = function() { } if (V.shelterAbuse > 5) { - if (V.arcologies[0].FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist')) { r.push(`You are on the Slave Shelter's public list of abusive slaveowners. Society <span class="red">disapproves</span> of your falling foul of such a well regarded charity.`); FutureSocieties.Change("Paternalist", -2); - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (FutureSocieties.isActive('FSDegradationist')) { r.push(`You are on the Slave Shelter's public list of abusive slaveowners. Your citizens find this hilarious, and <span class="green">approve</span> of your taking advantage of a pack of idiots.`); FutureSocieties.Change("Degradationist", 2); } } if (V.TCR.schoolPresent === 1) { - if (V.arcologies[0].FSRestart !== "unset") { + if (FutureSocieties.isActive('FSRestart')) { r.push(`Your Eugenics focused society <span class="red">disagrees</span> with the local branch of The Cattle Ranch's views on slave breeding. Until society sees them as nothing more than mindless cattle and not human, they are in conflict with current reproduction standards.`); FutureSocieties.Change("Eugenics", -1); - } else if (V.arcologies[0].FSPaternalist !== "unset") { + } else if (FutureSocieties.isActive('FSPaternalist')) { r.push(`While they can't stop what happens to slaves outside of your arcology, they can <span class="red">disapprove and protest</span> you allowing a branch of the mentally and physically abusive Cattle Ranch to be established in your arcology.`); FutureSocieties.Change("Paternalist", -2); } } if (V.policies.cash4Babies === 1) { - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { r.push(`Society <span class="green">approves</span> of your poor treatment of slave infants.`); repX(5 * V.FSSingleSlaveRep * (V.arcologies[0].FSDegradationist / V.FSLockinLevel), "babyTransfer"); - } else if (V.arcologies[0].FSRestart !== "unset") { + } else if (FutureSocieties.isActive('FSRestart')) { if (V.eugenicsFullControl !== 1) { r.push(`The Societal Elite <span class="red">strongly disapproves</span> of your creating an economic incentive for the lower classes to breed and sell infants, holding back acceptance of your new society.`); V.failedElite += 5; @@ -868,10 +868,10 @@ App.EndWeek.reputation = function() { } V.arcologies[0].FSRestart -= V.FSSingleSlaveRep; repX(forceNeg((5 * V.FSSingleSlaveRep * (V.arcologies[0].FSRestart / V.FSLockinLevel)) + (V.rep / 40)), "babyTransfer"); - } else if (V.arcologies[0].FSPaternalist !== "unset") { + } else if (FutureSocieties.isActive('FSPaternalist')) { r.push(`Society <span class="red">greatly despises</span> your poor treatment of slave infants.`); repX(forceNeg((25 * V.FSSingleSlaveRep * (V.arcologies[0].FSPaternalist / V.FSLockinLevel)) + (V.rep / 20)), "babyTransfer"); - } else if (V.arcologies[0].FSRepopulationFocus !== "unset") { + } else if (FutureSocieties.isActive('FSRepopulationFocus')) { r.push(`Society <span class="red">disapproves</span> of your poor treatment of your future population, holding back acceptance of your new society.`); V.arcologies[0].FSRepopulationFocus -= V.FSSingleSlaveRep; repX(forceNeg((5 * V.FSSingleSlaveRep * (V.arcologies[0].FSRepopulationFocus / V.FSLockinLevel)) + (V.rep / 20)), "babyTransfer"); @@ -897,7 +897,7 @@ App.EndWeek.reputation = function() { let care; if (V.citizenOrphanageTotal > 0) { - if (V.arcologies[0].FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist')) { r.push(`The public <span class="green">approves</span> of the way you're providing for ${num(V.citizenOrphanageTotal)} of your slaves' children to be raised as citizens.`); FutureSocieties.Change("Paternalist", V.citizenOrphanageTotal); if (V.privateOrphanageTotal > 0) { @@ -905,7 +905,7 @@ App.EndWeek.reputation = function() { care = V.privateOrphanageTotal * 2; FutureSocieties.Change("Paternalist", care); } - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (FutureSocieties.isActive('FSDegradationist')) { r.push(`The public <span class="red">disapproves</span> of the way you're providing for ${num(V.citizenOrphanageTotal)} of your slaves' children to be raised as citizens.`); care = -V.citizenOrphanageTotal; FutureSocieties.Change("Degradationist", care); @@ -914,21 +914,21 @@ App.EndWeek.reputation = function() { } } } else if (V.privateOrphanageTotal > 0) { - if (V.arcologies[0].FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist')) { r.push(`Raising ${num(V.privateOrphanageTotal)} of your slaves' children privately is considered extremely <span class="green">impressive.</span>`); care = V.privateOrphanageTotal * 2; FutureSocieties.Change("Paternalist", care); - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (FutureSocieties.isActive('FSDegradationist')) { r.push(`Fortunately your raising slaves' children privately is not publicly known.`); } } - if (V.breederOrphanageTotal > 0 && V.arcologies[0].FSRepopulationFocus !== "unset") { + if (V.breederOrphanageTotal > 0 && FutureSocieties.isActive('FSRepopulationFocus')) { r.push(`The public <span class="green">approves</span> of the way you've dedicated ${num(V.breederOrphanageTotal)} of your slaves' children to be raised into future breeders.`); const futureBreeders = Math.round(((V.breederOrphanageTotal / 100) + 1)); FutureSocieties.Change("Repopulationist", futureBreeders); } - if (V.arcologies[0].FSNull !== "unset") { + if (FutureSocieties.isActive('FSNull')) { r.push(`Your cultural openness <span class="green">helps your reputation,</span> since few citizens have disputes with your permissive approach.`); repX(50 * V.FSSingleSlaveRep * (V.arcologies[0].FSNull / V.FSLockinLevel), "policies"); } @@ -1058,7 +1058,7 @@ App.EndWeek.reputation = function() { } else { r.push(`The Societal Elite can think what they want; they know better than to try and cross you again.`); } - } else if (V.arcologies[0].FSRestart !== "unset") { + } else if (FutureSocieties.isActive('FSRestart')) { if (V.eugenicsFullControl !== 1) { if (V.failedElite > 300) { r.push(`The Societal Elite <span class="red">have departed from your arcology in disgust.</span>`); diff --git a/src/endWeek/events/death.js b/src/endWeek/events/death.js index f55f2426f09cd86d3e049979d53e64d3b6d9f7b0..609e01d86bee791a78e2acd3de41f412117a2b59 100644 --- a/src/endWeek/events/death.js +++ b/src/endWeek/events/death.js @@ -216,13 +216,13 @@ App.Events.SEDeath = class SEDeath extends App.Events.BaseEvent { } else { r.push(`${he} lived a very long life that few get to see.`); } - if (V.arcologies[0].FSPaternalist !== "unset" && slave.actualAge < 75) { + if (FutureSocieties.isActive('FSPaternalist') && slave.actualAge < 75) { r.push(`Allowing a slave to perish under your care <span class="red">severely damages</span> your image as a caring slaveowner and <span class="red">calls into question</span> your paternalistic resolve. It's probably best that they don't find out that you finished in ${him} after the fact.`); FutureSocieties.Change("Paternalist", -10); } } else if (getPersonalAttention(slave.ID, "torture") && !onBedRest(V.PC, true)) { r.push(`As you begin to work <span class="pink bold">${slave.slaveName}</span> over, you find ${he} is quickly becomes unresponsive to your strikes, so you do the only logical thing; hit ${him} harder. When ${he} still ignores your efforts, you decide to give ${him} a cursory inspection. Turns out you managed to beat the life out of ${him}.`); - if (V.arcologies[0].FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist')) { r.push(`Literally bludgeoning a slave to death for your amusement <span class="red">completely ruins</span> your image as a caring slaveowner and <span class="red">calls into question</span> if you even have paternalistic values.`); FutureSocieties.Change("Paternalist", -40); } @@ -244,7 +244,7 @@ App.Events.SEDeath = class SEDeath extends App.Events.BaseEvent { } else { r.push(`${he} lived a very long life that few get to see.`); } - if (V.arcologies[0].FSPaternalist !== "unset" && slave.actualAge < 75) { + if (FutureSocieties.isActive('FSPaternalist') && slave.actualAge < 75) { r.push(`Allowing a slave to perish under your care <span class="red">severely damages</span> your image as a caring slaveowner and <span class="red">calls into question</span> your paternalistic resolve.`); FutureSocieties.Change("Paternalist", -10); } diff --git a/src/endWeek/events/expire.js b/src/endWeek/events/expire.js index 61721c9adcd6410286edb51ed5ee77fd6e4a0d74..56c1e67e2822d44a65c0676639452472dafc0f4f 100644 --- a/src/endWeek/events/expire.js +++ b/src/endWeek/events/expire.js @@ -178,7 +178,7 @@ App.Events.SEExpiration = class SEExpiration extends App.Events.BaseEvent { if (slave.origin === "$He put $himself up as collateral at a poker game, and lost.") { r.push(`A bet is a bet, but that was a lonnng year. There's still room for ${him} in your ${V.mercenariesTitle}, but many of them have come to see ${him} in a new, more... intimate way. As a free ${woman}, ${he}'ll have to decide if it's worth the risk and the sex to stay here and fight for you who ${he} loathes... or else take up arms elsewhere in an ever more uncertain world.`); if (slave.addict > 5) { - r.push(`They'll need to make money fast as they remain addicted to your aphrodisiacs.`); + r.push(`${He}'ll need to make money fast as ${he} remains addicted to your aphrodisiacs.`); } } else { r.push(`It seems very unlikely that ${he}'ll stay in the arcology; ${he}'ll probably take what remains of ${his} indenture payment, held in escrow for this day, and be off to wherever it is that ${he} came from in the first place.`); diff --git a/src/endWeek/events/retire.js b/src/endWeek/events/retire.js index 718ae9120b4ae78d49291520ab964a0a5bf77463..56770f9209da5586271cfa6f670d082e8f594a8c 100644 --- a/src/endWeek/events/retire.js +++ b/src/endWeek/events/retire.js @@ -306,7 +306,7 @@ App.Events.retire = function(originalSlave, artRenderer) { removeSlave(lover); App.Events.addParagraph(el, r); r = []; - if (V.arcologies[0].FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist')) { r.push(`Of course, your paternalistic arcology thinks this <span class="green">almost too romantic,</span> and there are jesting suggestions that outcomes this adorable ought to be illegal. The pair becomes celebrated citizens immediately.`); repX(10 * V.FSSingleSlaveRep * (V.arcologies[0].FSPaternalist / V.FSLockinLevel), "futureSocieties"); V.arcologies[0].FSPaternalist += 0.1 * V.FSSingleSlaveRep; diff --git a/src/endWeek/nextWeek/nextWeek.js b/src/endWeek/nextWeek/nextWeek.js index f2d70e09ad20c16b8046bf72a06a38a00f3e48b1..2b7588c2108622a604b6e601799b708beca42d1f 100644 --- a/src/endWeek/nextWeek/nextWeek.js +++ b/src/endWeek/nextWeek/nextWeek.js @@ -42,6 +42,9 @@ App.EndWeek.nextWeek = function() { if (V.PC.physicalAge <= 20 && V.loliGrow > 0) { App.EndWeek.Shared.physicalDevelopment(V.PC, true); } + if ((V.PC.ovaries > 0 || V.PC.mpreg > 0) && V.PC.ovaryAge < 0) { + V.PC.ovaryAge = -100; // once PC can have immortal ovaries, this is where it takes effect + } agePCEffects(); } } @@ -358,7 +361,7 @@ App.EndWeek.nextWeek = function() { if (V.pSurgery.cooldown > 0) { V.pSurgery.cooldown--; } - if (V.arcologies[0].FSRepopulationFocus !== "unset" || V.pSurgery.nursePreg !== 0) { + if (FutureSocieties.isActive('FSRepopulationFocus') || V.pSurgery.nursePreg !== 0) { V.pSurgery.nursePreg++; if (V.pSurgery.cooldown > 0 && V.pSurgery.nursePreg > 36) { V.pSurgery.nursePreg = 0; diff --git a/src/endWeek/player/prLongTermPhysicalEffects.js b/src/endWeek/player/prLongTermPhysicalEffects.js index cbc4163bd6bdd3d884900ff9a5e36c87c486dd27..b1e3ec86d394fccc7ebc59c5827ea024686c8af2 100644 --- a/src/endWeek/player/prLongTermPhysicalEffects.js +++ b/src/endWeek/player/prLongTermPhysicalEffects.js @@ -463,7 +463,9 @@ App.EndWeek.Player.longTermPhysicalEffects = function(PC = V.PC) { } PC.physicalAge++; PC.visualAge++; - PC.ovaryAge += 5; // Since we are using .physicalAge, we need to manipulate things to prevent the possibility of pregnancy. + if (PC.ovaryAge >= 0) { // immortal ovaries counteract progeria's effect on ovaryAge + PC.ovaryAge += 5; // Since we are using .physicalAge, we need to manipulate things to prevent the possibility of pregnancy. + } } } } @@ -822,7 +824,7 @@ App.EndWeek.Player.longTermPhysicalEffects = function(PC = V.PC) { const milk = milkAmount(PC); let milkSale; r.push(`Whenever you have a free moment and a chest swollen with milk, you spend your time attached to the nearest milker. As a result, you produce ${milk} liters of sellable milk over the week.`); - if (V.arcologies[0].FSPastoralist !== "unset") { + if (FutureSocieties.isActive('FSPastoralist')) { if (V.arcologies[0].FSPastoralistLaw === 1) { milkSale = Math.round(milk * ((28 * (V.rep/1000)) + Math.trunc(V.arcologies[0].FSPastoralist / 30))); r.push(`Since breast milk is ${V.arcologies[0].name}'s only legal dairy product, and yours is in a class all of its own, society can't get enough of it and you make <span class="yellowgreen">${cashFormat(milkSale)}.</span>`); diff --git a/src/endWeek/player/prPregnancy.js b/src/endWeek/player/prPregnancy.js index 7e8ac6f35a90f60c627e2be970a17d7729b6f332..7239f23cdd27d8662d4db3b52d1011722e995b27 100644 --- a/src/endWeek/player/prPregnancy.js +++ b/src/endWeek/player/prPregnancy.js @@ -495,8 +495,8 @@ App.EndWeek.Player.pregnancy = function(PC = V.PC) { [Job.STEWARD, 1], [Job.TEACHER, 1] ]); - const undesirableRace = (s) => (V.arcologies[0].FSSupremacist !== "unset" && (s.race !== V.arcologies[0].FSSupremacistRace)) || - (V.arcologies[0].FSSubjugationist !== "unset" && (s.race === V.arcologies[0].FSSubjugationistRace)); + const undesirableRace = (s) => (FutureSocieties.isActive('FSSupremacist') && (s.race !== V.arcologies[0].FSSupremacistRace)) || + (FutureSocieties.isActive('FSSubjugationist') && (s.race === V.arcologies[0].FSSubjugationistRace)); const raceIsAcceptable = (s) => !undesirableRace(s) || (s.relationship === -3) || [Job.CONCUBINE, Job.MASTERSUITE, Job.FUCKTOY].includes(s.assignment); diff --git a/src/endWeek/reports/brothelReport.js b/src/endWeek/reports/brothelReport.js index 20dbb1e76b45c3b5ff3e874be78bc6577a31a7a0..da41da21d66116bf993ff3e3623decfe88f26766 100644 --- a/src/endWeek/reports/brothelReport.js +++ b/src/endWeek/reports/brothelReport.js @@ -148,7 +148,7 @@ App.EndWeek.brothelReport = function() { } else if (slave.prestigeDesc === "$He is a famed Free Cities slut, and can please anyone.") { r.push(`${He} makes sure to promote ${slave.slaveName}, the famed entertainer, in order to capitalize on ${his2} popularity.`); } else if (slave.prestigeDesc === "$He is remembered for winning best in show as a dairy cow.") { - if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (FutureSocieties.isActive('FSPhysicalIdealist')) { if (slave.muscles > 60 && slave.weight < 30 && slave.lactation > 0 && (slave.boobs - slave.boobsImplant) > 6000) { r.push(`${He} shows off how even a cow like ${slave.slaveName} can achieve physical perfection.`); } else { @@ -183,7 +183,7 @@ App.EndWeek.brothelReport = function() { } } } else if (slave.prestigeDesc === "$He is remembered for winning best in show as a cockmilker.") { - if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + if (FutureSocieties.isActive('FSGenderFundamentalist')) { /* this needs review - doesn't fit right. An XY slave would be expected to be masculine. */ if (slave.balls === 0 && slave.dick === 0 && slave.vagina > -1) { r.push(`${He} uses ${slave.slaveName} as an example of how even a huge-balled freak like ${him2} can be restored to proper femininity.`); diff --git a/src/endWeek/reports/dairyReport.js b/src/endWeek/reports/dairyReport.js index 6ec311f45ba7e7c1a7a602696cb40c5fea6590fe..d2a0145f5988230e0afa3921c597b207e59b84ca 100644 --- a/src/endWeek/reports/dairyReport.js +++ b/src/endWeek/reports/dairyReport.js @@ -1020,7 +1020,7 @@ App.EndWeek.dairyReport = function() { cumWeek += seed; if (V.arcologies[0].FSPastoralistLaw === 1) { cashValue = seed * random(40, 50); - } else if (V.arcologies[0].FSPastoralist !== "unset") { + } else if (FutureSocieties.isActive('FSPastoralist')) { cashValue = seed * (random(25, 35) + Math.trunc(V.arcologies[0].FSPastoralist / 10)); } else { cashValue = seed * random(25, 35); @@ -1031,7 +1031,7 @@ App.EndWeek.dairyReport = function() { femCumWeek += seed; if (V.arcologies[0].FSPastoralistLaw === 1) { cashValue = seed * random(40, 50); - } else if (V.arcologies[0].FSPastoralist !== "unset") { + } else if (FutureSocieties.isActive('FSPastoralist')) { cashValue = seed * (random(25, 35) + Math.trunc(V.arcologies[0].FSPastoralist / 10)); } else { cashValue = seed * random(25, 35); @@ -1040,9 +1040,9 @@ App.EndWeek.dairyReport = function() { seed = (BF.XX.milk * V.bioreactorsXX) + (BF.barren.milk * V.bioreactorsBarren) + (BF.XY.milk * V.bioreactorsXY) + (BF.herm.milk * V.bioreactorsHerm); milkWeek += seed; - if (V.arcologies[0].FSPastoralist !== "unset" && V.arcologies[0].FSPastoralistLaw === 1) { + if (FutureSocieties.isActive('FSPastoralist') && V.arcologies[0].FSPastoralistLaw === 1) { cashValue = seed * (13 + Math.trunc(V.arcologies[0].FSPastoralist / 30)); - } else if (V.arcologies[0].FSPastoralist !== "unset") { + } else if (FutureSocieties.isActive('FSPastoralist')) { cashValue = seed * (8 + Math.trunc(V.arcologies[0].FSPastoralist / 30)); } else { cashValue = seed * 9; @@ -1203,7 +1203,7 @@ App.EndWeek.dairyReport = function() { r.push(`The machines also managed to reclaim ${commaNum(femCumWeek)} liters of salable vaginal secretions.`); } - if (V.arcologies[0].FSRestart !== "unset" && V.eugenicsFullControl !== 1) { + if (FutureSocieties.isActive('FSRestart') && V.eugenicsFullControl !== 1) { if (V.dairyPregSetting > 0) { r.push(`The Societal Elite know what you are doing with your cows. <span class="red">They do not approve.</span>`); V.failedElite += 5; diff --git a/src/endWeek/reports/incubatorReport.js b/src/endWeek/reports/incubatorReport.js index fce43f22a9fd40130bfe5c3699f19fbae3a8d8a4..b14eb45347b3952def21ca28b532f8812aa62ee6 100644 --- a/src/endWeek/reports/incubatorReport.js +++ b/src/endWeek/reports/incubatorReport.js @@ -254,12 +254,14 @@ App.EndWeek.incubatorReport = function() { r = []; if (V.incubator.upgrade.reproduction === 1) { const rearQuirk = tank.geneticQuirks.rearLipedema === 2 ? 2 : 1; + const rearLimit = 20; // current maximum ass size, used to avoid reporting failed growth if (tank.incubatorSettings.reproduction === 2) { r.push(`${His} developing body is being flooded with hormones.`); if (tank.incubatorSettings.weight === 1) { r.push(`Combined with the abundant food provided to ${him}, ${his} body grows rapidly.`); if (tank.ovaries === 1) { tank.pubertyXX = 1; + tank.pubertyAgeXX = tank.physicalAge - 1; if (tank.hormoneBalance < 500) { tank.hormoneBalance += 100; } @@ -276,7 +278,7 @@ App.EndWeek.incubatorReport = function() { r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} hips to widen for childbirth.</span>`); tank.hips = Math.clamp(tank.hips + 2, -2, 2); } - if (tank.butt < 12*rearQuirk && random(1, 100) > 30/rearQuirk) { + if (tank.butt < rearLimit && 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; } @@ -289,7 +291,7 @@ App.EndWeek.incubatorReport = function() { 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) { + if (tank.butt < rearLimit && 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; } @@ -302,7 +304,7 @@ App.EndWeek.incubatorReport = function() { 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) { + if (tank.butt < rearLimit && 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; } @@ -315,7 +317,7 @@ App.EndWeek.incubatorReport = function() { 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) { + if (tank.butt < rearLimit && 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++; } @@ -328,13 +330,14 @@ App.EndWeek.incubatorReport = function() { 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) { + if (tank.butt < rearLimit && 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; + tank.pubertyAgeXY = tank.physicalAge - 1; if (tank.hormoneBalance > -500) { tank.hormoneBalance -= 100; } @@ -392,6 +395,7 @@ App.EndWeek.incubatorReport = function() { r.push(`Combined with the healthy food provided to ${him}, ${his} body grows readily.`); if (tank.ovaries === 1) { tank.pubertyXX = 1; + tank.pubertyAgeXX = tank.physicalAge - 1; if (tank.hormoneBalance < 500) { tank.hormoneBalance += 100; } @@ -467,6 +471,7 @@ App.EndWeek.incubatorReport = function() { } } else if (tank.balls > 0) { tank.pubertyXY = 1; + tank.pubertyAgeXY = tank.physicalAge - 1; if (tank.hormoneBalance > -500) { tank.hormoneBalance -= 100; } @@ -524,6 +529,7 @@ App.EndWeek.incubatorReport = function() { r.push(`Since ${his} body has little to work with, ${his} growth is fairly minor.`); if (tank.ovaries === 1) { tank.pubertyXX = 1; + tank.pubertyAgeXX = tank.physicalAge - 1; if (tank.hormoneBalance < 500) { tank.hormoneBalance += 100; } @@ -599,6 +605,7 @@ App.EndWeek.incubatorReport = function() { } } else if (tank.balls > 0) { tank.pubertyXY = 1; + tank.pubertyAgeXY = tank.physicalAge - 1; if (tank.hormoneBalance > -500) { tank.hormoneBalance -= 100; } @@ -657,15 +664,16 @@ App.EndWeek.incubatorReport = function() { r.push(`${His} hormone levels are being carefully managed, <span class="green">encouraging early puberty.</span>`); if (tank.ovaries === 1) { tank.pubertyXX = 1; + tank.pubertyAgeXX = tank.physicalAge - 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 { // Inside the tank we cannot reach ridiculous sizes + const origBoobs = tank.boobs; const boobsTarget = Math.min(tank.natural.boobs, 1200); if (tank.boobs < boobsTarget * 0.95) { - r.push(`The added estrogen <span class="green">causes ${his} breasts to swell.</span>`); tank.boobs += random( Math.floor(boobsTarget * 0.1), Math.floor(boobsTarget * 0.2) @@ -677,9 +685,11 @@ App.EndWeek.incubatorReport = function() { } } 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.boobs > origBoobs) { + r.push(`The added estrogen <span class="green">causes ${his} breasts to swell.</span>`); + } if (tank.hips < 2 && random(1, 100) > 90) { r.push(`The added estrogen <span class="green">causes ${his} hips to widen.</span>`); tank.hips++; @@ -691,6 +701,7 @@ App.EndWeek.incubatorReport = function() { } } else if (tank.balls > 0) { tank.pubertyXY = 1; + tank.pubertyAgeXY = tank.physicalAge - 1; tank.hormoneBalance = -250; if (tank.geneMods.NCS === 1) { /* NCS blocks hormonal growth of all secondary sexual characteristics */ diff --git a/src/endWeek/reports/masterSuiteReport.js b/src/endWeek/reports/masterSuiteReport.js index c7b03dd2dd475692c7f1e3d306399d2bc0722a02..ae10331015f251f88ca91973706ad6a2e1b49269 100644 --- a/src/endWeek/reports/masterSuiteReport.js +++ b/src/endWeek/reports/masterSuiteReport.js @@ -445,7 +445,7 @@ App.EndWeek.masterSuiteReport = function() { App.SlaveAssignment.appendSlaveArt(artSpan, slave); } - if (pregnantSlaves > 0 && V.arcologies[0].FSRestart !== "unset" && V.propOutcome !== 1 && V.eugenicsFullControl !== 1) { + if (pregnantSlaves > 0 && FutureSocieties.isActive('FSRestart') && V.propOutcome !== 1 && V.eugenicsFullControl !== 1) { App.Events.addNode(frag, [`The Societal Elite know what you are doing with your bedslaves. <span class="red">They do not approve.</span>`], "p", ["indent"]); V.failedElite += (5 * pregnantSlaves); } diff --git a/src/endWeek/reports/penthouseReport.js b/src/endWeek/reports/penthouseReport.js index 9e4b59617591df140a30c79cc7ce50e14e534454..d4940fe6364ae898d9c7cd24d458c59bdda95ce3 100644 --- a/src/endWeek/reports/penthouseReport.js +++ b/src/endWeek/reports/penthouseReport.js @@ -511,7 +511,7 @@ App.EndWeek.penthouseReport = function() { } 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)) { + if (slave.devotion >= -20 && slave.genes === "XY" && slave.attrXY <= 35 && !FutureSocieties.isActive('FSBodyPurist') && (!FutureSocieties.isActive('FSPaternalist') || SlaveStatsChecker.modScore(slave).total < 13)) { piercingCheck(); } } @@ -535,7 +535,7 @@ App.EndWeek.penthouseReport = function() { function piercingCheck() { let piercingForbidden = 0; if (slave.piercing.ear.weight === 0 && slave.earShape !== "none") { - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { slave.piercing.ear.weight = 2; } else { slave.piercing.ear.weight = 1; @@ -544,7 +544,7 @@ App.EndWeek.penthouseReport = function() { piercingForbidden = 1; slave.piercing.ear.weight = 0; } else { - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { 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.`); @@ -554,7 +554,7 @@ App.EndWeek.penthouseReport = function() { } } if (slave.piercing.nose.weight === 0) { - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { slave.piercing.nose.weight = 2; } else { slave.piercing.nose.weight = 1; @@ -563,7 +563,7 @@ App.EndWeek.penthouseReport = function() { piercingForbidden = 1; slave.piercing.nose.weight = 0; } else { - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { 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.`); @@ -573,7 +573,7 @@ App.EndWeek.penthouseReport = function() { } } if (slave.piercing.eyebrow.weight === 0) { - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { slave.piercing.eyebrow.weight = 2; } else { slave.piercing.eyebrow.weight = 1; @@ -582,7 +582,7 @@ App.EndWeek.penthouseReport = function() { piercingForbidden = 1; slave.piercing.eyebrow.weight = 0; } else { - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { 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.`); @@ -592,7 +592,7 @@ App.EndWeek.penthouseReport = function() { } } if (slave.piercing.lips.weight === 0) { - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { slave.piercing.lips.weight = 2; } else { slave.piercing.lips.weight = 1; @@ -601,7 +601,7 @@ App.EndWeek.penthouseReport = function() { piercingForbidden = 1; slave.piercing.lips.weight = 0; } else { - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { 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.`); @@ -611,7 +611,7 @@ App.EndWeek.penthouseReport = function() { } } if (slave.piercing.navel.weight === 0) { - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { slave.piercing.navel.weight = 2; } else { slave.piercing.navel.weight = 1; @@ -620,7 +620,7 @@ App.EndWeek.penthouseReport = function() { piercingForbidden = 1; slave.piercing.navel.weight = 0; } else { - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { 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.`); @@ -630,7 +630,7 @@ App.EndWeek.penthouseReport = function() { } } if (piercingForbidden) { - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { 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.`); diff --git a/src/endWeek/reports/personalAttention.js b/src/endWeek/reports/personalAttention.js index 8a7ef79cee7a6424eddbeb0702ba31ae4a976277..7ce23232d61540487a2e63c357926992a90aa80f 100644 --- a/src/endWeek/reports/personalAttention.js +++ b/src/endWeek/reports/personalAttention.js @@ -2109,7 +2109,7 @@ App.PersonalAttention.slaveReport = function(slave) { r.push(`You took care to not harm ${his} pregnancy, but ${he} doesn't need to know that. If you really wanted to abort it in such a manner, you'd make more a show of it to ${him}.`); } if (FSApproves) { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { r.push(`Indulging in ${his} fetish until ${he} becomes obsessed with it advances hedonism and <span class="reputation inc">bolsters your reputation.</span>`); FutureSocieties.Change("Hedonistic", 2); } diff --git a/src/endWeek/reports/servantsQuartersReport.js b/src/endWeek/reports/servantsQuartersReport.js index ab81126f41577a82535d80bbbe0212a5c5624817..cfc47698c47b11d1a83058070ba4ff206c080185 100644 --- a/src/endWeek/reports/servantsQuartersReport.js +++ b/src/endWeek/reports/servantsQuartersReport.js @@ -218,7 +218,7 @@ App.EndWeek.servantsQuartersReport = function() { } cashX(stewardessBonus * slaves.length, "servantsQuarters", S.Stewardess); } - if (V.arcologies[0].FSRestart !== "unset" && stewardessImpregnated > 0 && V.eugenicsFullControl !== 1) { + if (FutureSocieties.isActive('FSRestart') && 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; } diff --git a/src/endWeek/reports/spaReport.js b/src/endWeek/reports/spaReport.js index ed3ef08da25f5097aeca559938b58a89ee28879d..501faac31a289da4a04fbcd8631ce3a7ef4c7cff 100644 --- a/src/endWeek/reports/spaReport.js +++ b/src/endWeek/reports/spaReport.js @@ -125,7 +125,7 @@ App.EndWeek.spaReport = function() { if (gp.intelligence >= -95) { slave.intelligence = gp.intelligence - 30; } - if (V.arcologies[0].FSPaternalist !== "unset" && V.arcologies[0].FSPaternalist > 0) { + if (FutureSocieties.isActive('FSPaternalist') && 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); diff --git a/src/endWeek/saAgent.js b/src/endWeek/saAgent.js index 01e9659abe2672f2ccca10d7df29fef18a45c1f5..cf8d07a6cbaf3c93ae9dbf56625da52f3b20a40e 100644 --- a/src/endWeek/saAgent.js +++ b/src/endWeek/saAgent.js @@ -612,7 +612,9 @@ App.SlaveAssignment.agent = function(slave) { if (((slave.birthWeek - 2) % 5) === 0) { slave.physicalAge++; slave.visualAge++; - slave.ovaryAge += 5; + if (slave.ovaryAge >= 0) { // immortal ovaries counteract progeria's effect on ovaryAge + slave.ovaryAge += 5; + } } } diff --git a/src/endWeek/saChoosesOwnClothes.js b/src/endWeek/saChoosesOwnClothes.js index 6107a7d7e63d1f592c07e0a7dffddd3b7bcdae28..09ed5b49e7e064d5918e9d2ef66151912df9305e 100644 --- a/src/endWeek/saChoosesOwnClothes.js +++ b/src/endWeek/saChoosesOwnClothes.js @@ -46,7 +46,7 @@ App.SlaveAssignment.choosesOwnClothes = function saChoosesOwnClothes(slave) { r += `${He} <span class="devotion inc">loves</span> being able to dress ${himself}, ${neckChoice.text} ${corsetChoice.text} ${clothingChoice.text} `; slave.devotion += 1; - if (V.arcologies[0].FSRestart !== "unset" && slave.choosesOwnChastity === 1) { + if (FutureSocieties.isActive('FSRestart') && slave.choosesOwnChastity === 1) { if (slave.vagina > -1 && slave.breedingMark === 1 && slave.chastityVagina === 1) { r += `${He} unfastens ${his} chastity belt knowing full well ${his} role in life is to carry ${his} ${getWrittenTitle(slave)}'s children. `; slave.chastityVagina = 0; diff --git a/src/endWeek/saClothes.js b/src/endWeek/saClothes.js index dd3f6677b956d0327e228368269276630a0f8be2..2c38176a7ea2b18f83ef635497addcbb107a966c 100644 --- a/src/endWeek/saClothes.js +++ b/src/endWeek/saClothes.js @@ -381,7 +381,7 @@ App.SlaveAssignment.clothes = function saClothes(slave) { } // Chattel Religionist effects - if (arcology.FSChattelReligionist !== "unset") { + if (FutureSocieties.isActive('FSChattelReligionist', arcology)) { if (slave.behavioralQuirk === "sinful") { if (slave.clothes === "a fallen nuns habit" || slave.clothes === "a chattel habit" || slave.clothes === "a succubus outfit") { r.push(`${He}'s <span class="hotpink">gratified</span> by the sacrilegious clothing ${he}'s wearing, glad to be an obvious anathema to old world faiths.`); @@ -789,7 +789,7 @@ App.SlaveAssignment.clothes = function saClothes(slave) { } else if (slave.fetish === Fetish.PREGNANCY && slave.pregKnown === 0 && (slave.ovaries === 1 || slave.mpreg === 1)) { r.push(`The fake belly ${he} wears <span class="mediumorchid">reminds ${him}</span> that ${he} isn't pregnant with a child.`); slave.devotion -= 1; - } else if (slave.vagina === 0 && isFertile(slave) && arcology.FSRepopulationFocus === "unset" && slave.devotion <= 20) { + } else if (slave.vagina === 0 && isFertile(slave) && !FutureSocieties.isActive('FSRepopulationFocus', arcology) && slave.devotion <= 20) { r.push(`The fake belly ${he} wears <span class="gold">worries</span> ${him} that you will soon put a real baby in ${him}.`); slave.trust -= 1; } diff --git a/src/endWeek/saDevotion.js b/src/endWeek/saDevotion.js index a0102b6a5fc86dab5922930e195e08061331837b..2f6974c57adf7d51830bc22278acbfe0af7fc18f 100644 --- a/src/endWeek/saDevotion.js +++ b/src/endWeek/saDevotion.js @@ -266,7 +266,7 @@ App.SlaveAssignment.devotion = function saDevotion(slave) { r.push(`Your arcology's omnipresent religion encourages ${him} to <span class="trust inc">trust you.</span>`); slave.trust += 1; } - if (V.arcologies[0].FSRestart !== "unset") { + if (FutureSocieties.isActive('FSRestart')) { if (slave.bellyPreg >= 1500 && slave.devotion <= 20) { if (slave.breedingMark === 1) { r.push(`The mark prominently displayed across ${his} pregnant swell fills ${him} with an <span class="trust inc">undue sense of pride.</span>`); @@ -316,7 +316,7 @@ App.SlaveAssignment.devotion = function saDevotion(slave) { r.push(`${He} knows that it's less than a year until ${his} retirement from sexual slavery into citizenship.`); if (slave.devotion > 95) { r.push(`Since ${he} loves you, ${he} has mixed feelings about the prospect, but ${he} prefers to think of it as your way of looking after ${him}. It's ${his} favorite subject, and ${his} strong feelings about it`); - if (V.arcologies[0].FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist')) { r.push(`advances paternalistic ideals and <span class="reputation inc">improves your reputation.</span>`); FutureSocieties.Change("Paternalist", 2); } else { @@ -340,7 +340,7 @@ App.SlaveAssignment.devotion = function saDevotion(slave) { r.push(`${His} retirement from sexual slavery into citizenship is on the horizon.`); if (slave.devotion > 95) { r.push(`Since ${he} loves you, ${he} has mixed feelings about the prospect, but ${he} prefers to think of it as your way of looking after ${him}. This`); - if (V.arcologies[0].FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist')) { r.push(`advances paternalistic ideals and <span class="reputation inc">improves your reputation.</span>`); FutureSocieties.Change("Paternalist", 2); } else { diff --git a/src/endWeek/saDrugs.js b/src/endWeek/saDrugs.js index 686986bebd88949745bac2e82d2f982feb6449d5..981ce073e59b52adea75e92b708f6572ba358010 100644 --- a/src/endWeek/saDrugs.js +++ b/src/endWeek/saDrugs.js @@ -1179,13 +1179,13 @@ App.SlaveAssignment.drugs = function saDrugs(slave) { r += ` The skin creams <span class="lime">soothe ${his} aging skin</span> leaving ${him} looking younger, though the effects are only skin deep.`; slave.visualAge -= 1; } - if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + if (FutureSocieties.isActive('FSYouthPreferentialist')) { if (slave.visualAge > 30) { r += ` ${He} <span class="mediumaquamarine">trusts you more</span> for allowing ${him} to fit in better with society and not be singled out for ${his} looks.`; slave.trust += 2; } } - if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + if (FutureSocieties.isActive('FSMaturityPreferentialist')) { if (slave.visualAge > 30) { r += ` ${He} is <span class="gold">terrified</span> that ${his} fading age will single ${him} out for abuse in your society.`; slave.trust -= 2; diff --git a/src/endWeek/saGetMilked.js b/src/endWeek/saGetMilked.js index a0da182fbcdcfcda387d0bcef829197a20bd2ccd..aede7f99d065b2a08ac533212813853e8ca8f0d2 100644 --- a/src/endWeek/saGetMilked.js +++ b/src/endWeek/saGetMilked.js @@ -306,7 +306,7 @@ r.text += ` As a result, ${he} produces ${numberWithPluralOne(r.milk, "liter")} of milk over the week.`; // make sure milkSale is set here - if (arcology.FSPastoralist !== "unset") { + if (FutureSocieties.isActive('FSPastoralist', arcology)) { if (arcology.FSPastoralistLaw === 1) { r.milkSale = (r.milk * (8 + Math.trunc(arcology.FSPastoralist / 30))); r.text += ` Since breast milk is ${arcology.name}'s only legal dairy product, ${he} can scarcely be milked fast enough, and ${he} makes <span class="cash inc">${cashFormat(r.milkSale)}.</span>`; @@ -314,7 +314,7 @@ r.milkSale = (r.milk * (6 + Math.trunc(arcology.FSPastoralist / 30))); r.text += ` Since milk is fast becoming a major part of ${arcology.name}'s dietary culture, ${his} milk is in demand, and ${he} makes <span class="cash inc">${cashFormat(r.milkSale)}.</span>`; } - } else if (arcology.FSRepopulationFocus !== "unset" && arcology.FSRepopulationFocusLaw === 1) { + } else if (FutureSocieties.isActive('FSRepopulationFocus', arcology) && arcology.FSRepopulationFocusLaw === 1) { r.milkSale = (r.milk * (6 + Math.trunc(arcology.FSRepopulationFocus / 50))); r.text += ` Since the number of hungry babies outweighs the supply of available breasts in ${arcology.name}, ${his} milk is in demand, and ${he} makes <span class="cash inc">${cashFormat(r.milkSale)}.</span>`; } else { @@ -574,9 +574,9 @@ r.cum = Math.max(Math.trunc(r.cum), 1); r.text += ` ${He} produces ${numberWithPluralOne(r.cum, "deciliter")} of cum over the week;`; - if (arcology.FSPastoralist === "unset") { - r.cumSale = Math.max(Math.trunc((r.cum * jsRandom(15, 25) * qualityMultiplier)), 1); - r.text += ` the fresh ejaculate is sold for <span class="cash inc">${cashFormat(r.cumSale)}.</span>`; + if (!FutureSocieties.isActive('FSPastoralist', arcology)) { + r.cumSale = Math.max(Math.trunc((r.cum * jsRandom(15) * qualityMultiplier)), 1); + r.text += ` the fresh ejaculate is sold for <span clh inc">${cashFormat(r.cumSale)}.</span>`; } else if (arcology.FSPastoralistLaw === 1) { r.cumSale = Math.max(Math.trunc((r.cum * (jsRandom(20, 40)) * qualityMultiplier)), 1); r.text += ` the fresh ejaculate, which is in extremely high demand as one of ${arcology.name}'s few legal sources of animal protein, is sold for <span class="cash inc">${cashFormat(r.cumSale)}.</span>`; @@ -664,8 +664,8 @@ r.fluidSale = (r.fluid * jsRandom(40, 50)); r.text += ` ${capFirstChar(numberWithPluralOne(r.fluid, "deciliter"))} of uncommon ejaculate is gathered during ${his} milkings.`; - if (arcology.FSPastoralist !== "unset" && arcology.FSPastoralist > 30) { - r.fluidSale = (Math.trunc(r.fluidSale * (1 + (arcology.FSPastoralist - 30) / 140))); /* fully accepted pastoralism gives +50% on the price*/ + if (arcology.FSPastoralist > 30) { + r.fluidSale = (Math.trunc(r.fluidSale * (1 + (arcology.FSPastoralist - 30) / 140))); /* fully accepted pastoralism gives +50% on the price */ r.text += ` Because of your arcology's cultural preferences, it comes with extra value.`; } r.text += ` It is sold for <span class="cash inc">${cashFormat(r.fluidSale)}.</span>`; diff --git a/src/endWeek/saLiveWithHG.js b/src/endWeek/saLiveWithHG.js index ac9f17a5be5bd47e98cb37f035c7d8c926f3bfef..ae5919e64417b47942316ac6335b73a523a2fd87 100644 --- a/src/endWeek/saLiveWithHG.js +++ b/src/endWeek/saLiveWithHG.js @@ -15,6 +15,7 @@ App.SlaveAssignment.liveWithHG = function saliveWithHG(slave) { } = getPronouns(S.HeadGirl).appendSuffix("2"); const arcology = V.arcologies[0]; + const arcologyInfo = new App.Utils.Arcology(arcology); let oralUse = 0; let analUse = 0; @@ -59,17 +60,17 @@ App.SlaveAssignment.liveWithHG = function saliveWithHG(slave) { return el; function getHGTastes() { - if (arcology.FSSlimnessEnthusiast !== "unset") { + if (arcologyInfo.fsActive('FSSlimnessEnthusiast')) { return 1; - } else if (arcology.FSRepopulationFocus !== "unset") { + } else if (arcologyInfo.fsActive('FSRepopulationFocus')) { return 4; - } else if (arcology.FSBodyPurist !== "unset") { + } else if (arcologyInfo.fsActive('FSBodyPurist')) { return 1; - } else if (arcology.FSDegradationist !== "unset") { + } else if (arcologyInfo.fsActive('FSDegradationist')) { return 3; - } else if (arcology.FSAssetExpansionist !== "unset") { + } else if (arcologyInfo.fsActive('FSAssetExpansionist')) { return 3; - } else if (arcology.FSTransformationFetishist !== "unset") { + } else if (arcologyInfo.fsActive('FSTransformationFetishist')) { return 3; } return 2; @@ -82,7 +83,7 @@ App.SlaveAssignment.liveWithHG = function saliveWithHG(slave) { */ function HGSetsDiet(slave, HG) { const t = []; - if ((arcology.FSRepopulationFocusPregPolicy === 1 || (arcology.FSRestart === "unset" && HG.fetish === "pregnancy")) && canImpreg(slave, HG) && V.dietFertility === 1) { + if ((arcology.FSRepopulationFocusPregPolicy === 1 || (!arcologyInfo.fsActive('FSRestart') && HG.fetish === "pregnancy")) && canImpreg(slave, HG) && V.dietFertility === 1) { t.push(`${HG.slaveName} thinks ${slave.slaveName} could do with a bigger bump`); if (arcology.FSRepopulationFocusPregPolicy) { t.push(`since pregnant ${girl}s are all the rage in your arcology`); @@ -104,7 +105,7 @@ App.SlaveAssignment.liveWithHG = function saliveWithHG(slave) { } else { t.push(`and keeps ${him} on ${his} fattening diet.`); } - } else if (slave.weight > 30 && arcology.FSHedonisticDecadence === "unset") { + } else if (slave.weight > 30 && !arcologyInfo.fsActive('FSHedonisticDecadence')) { t.push(`${HG.slaveName} thinks ${slave.slaveName} is a little too porky`); if (slave.diet !== "restricted") { t.push(`and puts ${him} on a diet.`); @@ -112,13 +113,13 @@ App.SlaveAssignment.liveWithHG = function saliveWithHG(slave) { } else { t.push(`and keeps ${him} on ${his} diet.`); } - } else if (((slave.muscles <= 95 && ((arcology.FSPhysicalIdealist > 0 && arcology.FSPhysicalIdealistLaw === 0) || (HG.fetish === Fetish.SUBMISSIVE || HG.fetish === "masochist"))) || (slave.muscles <= 45 && (arcology.FSPhysicalIdealist !== "unset" && arcology.FSPhysicalIdealistLaw === 1)) || slave.muscles <= 5) && !isAmputee(slave)) { + } else if (((slave.muscles <= 95 && ((arcology.FSPhysicalIdealist > 0 && arcology.FSPhysicalIdealistLaw === 0) || (HG.fetish === Fetish.SUBMISSIVE || HG.fetish === "masochist"))) || (slave.muscles <= 45 && (!arcologyInfo.fsActive('FSPhysicalIdealist') && arcology.FSPhysicalIdealistLaw === 1)) || slave.muscles <= 5) && !isAmputee(slave)) { t.push(`${HG.slaveName} thinks ${slave.slaveName}`); if (HG.fetish === Fetish.SUBMISSIVE && HG.fetishKnown === 1) { t.push(`could use bigger muscles to better dominate ${him2} with in bed`); } else if (HG.fetish === "masochist" && HG.fetishKnown === 1) { t.push(`could use bigger muscles to better spank ${him2}`); - } else if (arcology.FSPhysicalIdealist !== "unset") { + } else if (arcologyInfo.fsActive('FSPhysicalIdealist')) { t.push(`could use bigger muscles to support your societal goals`); } else { t.push(`could use a bit of muscle`); @@ -234,7 +235,7 @@ App.SlaveAssignment.liveWithHG = function saliveWithHG(slave) { } else { t.push(`eager to see just how much boob ${slave.slaveName} can handle.`); } - } else if (canImpreg(slave, HG) && arcology.FSRestart === "unset" && (getHGTastes() === 4 || HG.fetish === "pregnancy")) { + } else if (canImpreg(slave, HG) && !arcologyInfo.fsActive('FSRestart') && (getHGTastes() === 4 || HG.fetish === "pregnancy")) { t.push(`${HG.slaveName} gives ${slave.slaveName} fertility enhancers, since ${he2} wants to see ${slave.slaveName} heavy with child.`); slave.drugs = "fertility drugs"; } else if (arcology.FSRepopulationFocusPregPolicy === 1 && canImpreg(slave, HG)) { @@ -599,7 +600,7 @@ App.SlaveAssignment.liveWithHG = function saliveWithHG(slave) { */ function HGManagesPregnancy(slave, HG) { if (HG.fetish === "pregnancy" && canImpreg(slave, HG) && slave.pregKnown === 0) { - if (arcology.FSRestart === "unset") { + if (!FutureSocieties.isActive('FSRestart', arcology)) { r.push(`${HG.slaveName} promptly <span class="pregnant">impregnates</span>`); if (HG.fetishKnown === 1) { r.push(`${slave.slaveName}, to your Head Girl's considerable <span class="devotion inc">satisfaction.</span> ${slave.slaveName} spent the week regularly getting held down and ejaculated into anytime ${his} superior had cum to spare.`); @@ -617,7 +618,7 @@ App.SlaveAssignment.liveWithHG = function saliveWithHG(slave) { r.push(`${HG.slaveName} knows better than to even consider knocking up ${slave.slaveName}.`); } } else if (HG.fetish === "pregnancy" && canImpreg(HG, slave) && HG.pregKnown === 0) { - if (arcology.FSRestart === "unset" && HG.fetishStrength > 70) { + if (!FutureSocieties.isActive('FSRestart', arcology) && HG.fetishStrength > 70) { r.push(`${HG.slaveName} promptly <span class="pregnant">knocks ${himself2} up</span> with ${slave.slaveName}'s`); if (HG.fetishKnown === 1) { r.push(`seed, to your Head Girl's considerable <span class="devotion inc">satisfaction.</span>`); @@ -641,7 +642,7 @@ App.SlaveAssignment.liveWithHG = function saliveWithHG(slave) { r.push(`Since ${slave.slaveName} is bearing your child${slave.pregType > 1 ? "ren" : ""}, ${HG.slaveName} feels ${he2} has been tasked with keeping ${his} pregnancy safe.`); } else if (HG.fetish === "pregnancy") { r.push(`${HG.slaveName}`); - if (slave.geneticQuirks.superfetation === 2 && V.geneticMappingUpgrade !== 0 && (slave.pregSource === V.HeadGirlID || arcology.FSRepopulationFocus !== "unset")) { + if (slave.geneticQuirks.superfetation === 2 && V.geneticMappingUpgrade !== 0 && (slave.pregSource === V.HeadGirlID || FutureSocieties.isActive('FSRepopulationFocus'))) { r.push(`takes advantage of ${slave.slaveName}'s unusual fertility to`); if (HG.fetishKnown === 1) { r.push(`<span class="pregnant">add another baby</span> to ${his} growing collection.`); @@ -665,7 +666,7 @@ App.SlaveAssignment.liveWithHG = function saliveWithHG(slave) { r.push(`pays an unusual amount of attention to ${slave.slaveName}'s pregnancy.`); } } - } else if (arcology.FSRepopulationFocusPregPolicy === 0 && arcology.FSRepopulationFocus === "unset" && V.HGSuiteDrugs === 1) { + } else if (arcology.FSRepopulationFocusPregPolicy === 0 && !FutureSocieties.isActive('FSRepopulationFocus', arcology) && V.HGSuiteDrugs === 1) { if (slave.preg > slave.pregData.normalBirth - 2 && slave.preg > slave.pregData.minLiveBirth && slave.broodmother === 0 && !isInLabor(slave)) { r.push(`${HG.slaveName} has no interest in a slut stuffed full of unwanted spawn, so ${he2} promptly doses ${slave.slaveName} with labor inducing agents to get ${him} back in fucking shape.`); induce(slave); @@ -1369,7 +1370,7 @@ App.SlaveAssignment.liveWithHG = function saliveWithHG(slave) { * @param {App.Entity.SlaveState} HG */ function HGArrangesSurgery(slave, HG) { - if (arcology.FSBodyPurist === "unset") { + if (!FutureSocieties.isActive('FSBodyPurist', arcology)) { r.push(`${HG.slaveName} sends ${V.assistant.name} notes on what surgical modifications ${he2} wants for ${slave.slaveName}.`); r.push(rulesAutosurgery(slave, getHGSurgeryTargets())); } diff --git a/src/endWeek/saLongTermEffects.js b/src/endWeek/saLongTermEffects.js index 448bc0e06447553578b56f511ce3a365139c93d3..433090704517838f9dddd7b14a268abeb0db9fc0 100644 --- a/src/endWeek/saLongTermEffects.js +++ b/src/endWeek/saLongTermEffects.js @@ -76,7 +76,7 @@ App.SlaveAssignment.longTermEffects = function saLongTermEffects(slave) { } pornEffects(slave); age(slave); - if (V.arcologies[0].FSRestart !== "unset") { + if (FutureSocieties.isActive('FSRestart')) { pregnancyCheck(slave); } if (slave.preg > slave.pregData.normalBirth / 8) { @@ -1648,9 +1648,9 @@ App.SlaveAssignment.longTermEffects = function saLongTermEffects(slave) { * */ function solidSlaveFoodEffects(slave) { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { if (V.arcologies[0].FSHedonisticDecadenceResearch === 1) { - if (V.arcologies[0].FSDegradationist === "unset") { + if (!FutureSocieties.isActive('FSDegradationist')) { if (slave.onDiet !== 1) { if (!canTaste(slave)) { r.push(`${His} lack of a sense of taste makes ${him} essentially immune to the addictive slave treats, as ${he} can't be enticed by their delicious taste.`); @@ -1762,7 +1762,7 @@ App.SlaveAssignment.longTermEffects = function saLongTermEffects(slave) { } } } else if (V.arcologies[0].FSHedonisticDecadenceResearch === 1) { - if (V.arcologies[0].FSDegradationist === "unset") { + if (!FutureSocieties.isActive('FSDegradationist')) { if (slave.onDiet !== 1) { if (!canTaste(slave)) { r.push(`${His} lack of a sense of taste makes ${him} essentially immune to the addictive slave treats, as ${he} can't be enticed by their delicious taste.`); diff --git a/src/endWeek/saLongTermMentalEffects.js b/src/endWeek/saLongTermMentalEffects.js index be5240c9f35474198b3137141c85010bebafbd8c..3d3c0342257fcf546c075f367826fabc40d74cfd 100644 --- a/src/endWeek/saLongTermMentalEffects.js +++ b/src/endWeek/saLongTermMentalEffects.js @@ -900,7 +900,7 @@ App.SlaveAssignment.longTermMentalEffects = function saLongTermMentalEffects(sla * */ function behavioralFlawEffects(slave) { - if (slave.behavioralFlaw === "devout" && V.arcologies[0].FSChattelReligionist !== "unset") { + if (slave.behavioralFlaw === "devout" && FutureSocieties.isActive('FSChattelReligionist')) { if (slave.devotion <= 20) { if (slave.trust < -20) { r.push(`${He} is inwardly <span class="trust dec">terrified</span> by living in what ${he} sees as a powerful theocratic society inimical to ${his} old world faith.`); @@ -1374,10 +1374,10 @@ App.SlaveAssignment.longTermMentalEffects = function saLongTermMentalEffects(sla slave.devotion -= 3; } } - if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + if (FutureSocieties.isActive('FSSlimnessEnthusiast')) { r.push(`Living in a society that openly rejects ${his} paraphilia <span class="devotion dec">mentally and emotionally cripples</span> ${him}.`); slave.devotion -= 10; - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (FutureSocieties.isActive('FSAssetExpansionist')) { r.push(`Living in a society that glorifies ${his} paraphilia <span class="devotion inc">leaves ${him} in perpetual ecstasy.</span>`); slave.devotion += 5; } @@ -1565,7 +1565,7 @@ App.SlaveAssignment.longTermMentalEffects = function saLongTermMentalEffects(sla slave.devotion -= 3; } } - if (V.arcologies[0].FSRestart !== "unset") { + if (FutureSocieties.isActive('FSRestart')) { r.push(`Living in a society that rejects ${his} paraphilia`); if (slave.breedingMark === 1 && V.propOutcome === 1) { r.push(`would have mentally and emotionally crippled ${him}; but as a designated breeder, ${he} can't help but <span class="devotion inc">love ${his} role</span> in society.`); @@ -1574,7 +1574,7 @@ App.SlaveAssignment.longTermMentalEffects = function saLongTermMentalEffects(sla r.push(`<span class="devotion dec">mentally and emotionally cripples</span> ${him}.`); slave.devotion -= 10; } - } else if (V.arcologies[0].FSRepopulationFocus !== "unset") { + } else if (FutureSocieties.isActive('FSRepopulationFocus')) { r.push(`Living in a society that glorifies ${his} paraphilia <span class="devotion inc">leaves ${him} in perpetual ecstasy.</span>`); slave.devotion += 5; } @@ -1704,7 +1704,7 @@ App.SlaveAssignment.longTermMentalEffects = function saLongTermMentalEffects(sla } break; case "a breeder": - if (slave.pregKnown === 1 && V.arcologies[0].FSRepopulationFocus !== "unset") { + if (slave.pregKnown === 1 && FutureSocieties.isActive('FSRepopulationFocus')) { r.push(`${His} life used to revolve around being pregnant all the time and nothing has changed. However, being surrounded with happy, heavily pregnant women leaves ${him} <span class="devotion inc">slightly more accepting</span> of ${his} fate and <span class="trust inc">hopeful</span> that ${his} trained body will be useful to you.`); slave.trust += 1; slave.devotion += 1; @@ -2206,7 +2206,7 @@ App.SlaveAssignment.longTermMentalEffects = function saLongTermMentalEffects(sla } } if (FSApproves) { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { r.push(`Allowing ${him} to indulge in ${his} fetish to the point of obsession advances hedonism and <span class="reputation inc">bolsters your reputation.</span>`); FutureSocieties.Change("Hedonistic", 2); } diff --git a/src/endWeek/saLongTermPhysicalEffects.js b/src/endWeek/saLongTermPhysicalEffects.js index 308634a804589883abd0b35d566bf1d03555f397..3f353614e7c1621363c42b8f59dbf60d302a70b2 100644 --- a/src/endWeek/saLongTermPhysicalEffects.js +++ b/src/endWeek/saLongTermPhysicalEffects.js @@ -698,7 +698,9 @@ App.SlaveAssignment.longTermPhysicalEffects = function saLongTermPhysicalEffects } slave.physicalAge++; slave.visualAge++; - slave.ovaryAge += 5; // Since we are using .physicalAge, we need to manipulate things to prevent the possibility of pregnancy. + if (slave.ovaryAge >= 0) { // immortal ovaries counteract progeria's effect on ovaryAge + slave.ovaryAge += 5; // Since we are using .physicalAge, we need to manipulate things to prevent the possibility of pregnancy. + } } } } @@ -1783,7 +1785,6 @@ App.SlaveAssignment.longTermPhysicalEffects = function saLongTermPhysicalEffects /** * @param {App.Entity.SlaveState} slave - * */ function hugeBreasts(slave) { if (slave.physicalAge >= 18) { @@ -1802,7 +1803,7 @@ App.SlaveAssignment.longTermPhysicalEffects = function saLongTermPhysicalEffects if (canWalk(slave)) { if (slave.sexualFlaw === "breast growth") { r.push(`${His} giant tits are debilitatingly big and a constant reminder of ${his} progress. No amount of discomfort or pain could dissuade ${him} from going bigger.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset" && (slave.behavioralFlaw === "arrogant" || slave.behavioralQuirk === "confident")) { + } else if (FutureSocieties.isActive('FSAssetExpansionist') && (slave.behavioralFlaw === "arrogant" || slave.behavioralQuirk === "confident")) { if (slave.behavioralFlaw === "arrogant") { r.push(`${His} debilitatingly giant tits may be <span class="health dec">agony on ${his} back,</span> but ${he} is well aware of <span class="trust inc">just how valuable</span> they make ${him} in your arcology.`); healthDamage(slave, 5); @@ -1823,7 +1824,7 @@ App.SlaveAssignment.longTermPhysicalEffects = function saLongTermPhysicalEffects if (canWalk(slave)) { if (slave.sexualFlaw === "breast growth") { r.push(`${His} huge breasts are becoming troublesome for ${his} slight form, but that only drives ${his} desire to go even bigger.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset" && (slave.behavioralFlaw === "arrogant" || slave.behavioralQuirk === "confident")) { + } else if (FutureSocieties.isActive('FSAssetExpansionist') && (slave.behavioralFlaw === "arrogant" || slave.behavioralQuirk === "confident")) { if (slave.behavioralFlaw === "arrogant") { r.push(`${His} huge tits may leave ${him} with a <span class="health dec">sore back,</span> but ${he} is well aware of <span class="trust inc">just how valuable</span> they make ${him} in your arcology.`); healthDamage(slave, 2); @@ -1845,7 +1846,7 @@ App.SlaveAssignment.longTermPhysicalEffects = function saLongTermPhysicalEffects if (canWalk(slave)) { if (slave.sexualFlaw === "breast growth") { r.push(`The weight of ${his} big boobs serves as a reminder that ${he} needs to get even bigger.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset" && (slave.behavioralFlaw === "arrogant" || slave.behavioralQuirk === "confident")) { + } else if (FutureSocieties.isActive('FSAssetExpansionist') && (slave.behavioralFlaw === "arrogant" || slave.behavioralQuirk === "confident")) { if (slave.behavioralFlaw === "arrogant") { r.push(`${His} big tits may be a little heavy for ${his} slight form, but ${he} is well aware of <span class="trust inc">just how sexy</span> they make ${him} in your arcology.`); slave.trust += 1; @@ -1888,7 +1889,7 @@ App.SlaveAssignment.longTermPhysicalEffects = function saLongTermPhysicalEffects if (canWalk(slave)) { if (slave.sexualFlaw === "breast growth") { r.push(`${His} giant tits are debilitatingly big and a constant reminder of ${his} progress. No amount of discomfort or pain could dissuade ${him} from going bigger.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset" && (slave.behavioralFlaw === "arrogant" || slave.behavioralQuirk === "confident")) { + } else if (FutureSocieties.isActive('FSAssetExpansionist') && (slave.behavioralFlaw === "arrogant" || slave.behavioralQuirk === "confident")) { if (slave.behavioralFlaw === "arrogant") { r.push(`${His} debilitatingly giant tits may be <span class="health dec">agony on ${his} back,</span> but ${he} is well aware of <span class="trust inc">just how valuable</span> they make ${him} in your arcology.`); healthDamage(slave, 4); @@ -1919,7 +1920,7 @@ App.SlaveAssignment.longTermPhysicalEffects = function saLongTermPhysicalEffects if (canWalk(slave)) { if (slave.sexualFlaw === "breast growth") { r.push(`${His} huge breasts are troublesome for ${his} childish form, but that only drives ${his} desire to go even bigger.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset" && (slave.behavioralFlaw === "arrogant" || slave.behavioralQuirk === "confident")) { + } else if (FutureSocieties.isActive('FSAssetExpansionist') && (slave.behavioralFlaw === "arrogant" || slave.behavioralQuirk === "confident")) { if (slave.behavioralFlaw === "arrogant") { r.push(`${His} huge tits may be annoying, but ${he} is well aware of <span class="trust inc">just how valuable</span> they make ${him} in your arcology.`); slave.trust += 1; @@ -1939,7 +1940,7 @@ App.SlaveAssignment.longTermPhysicalEffects = function saLongTermPhysicalEffects if (canWalk(slave)) { if (slave.sexualFlaw === "breast growth") { r.push(`The weight of ${his} big boobs serves as a reminder that ${he} needs to get even bigger.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset" && (slave.behavioralFlaw === "arrogant" || slave.behavioralQuirk === "confident")) { + } else if (FutureSocieties.isActive('FSAssetExpansionist') && (slave.behavioralFlaw === "arrogant" || slave.behavioralQuirk === "confident")) { if (slave.behavioralFlaw === "arrogant") { r.push(`${His} big tits may be uncomfortable, but ${he} is well aware of <span class="trust inc">just how sexy</span> they make ${him} in your arcology.`); slave.trust += 1; @@ -1975,7 +1976,7 @@ App.SlaveAssignment.longTermPhysicalEffects = function saLongTermPhysicalEffects r.push(`${His} giant tits are debilitatingly big.`); if (slave.sexualFlaw === "breast growth") { r.push(`No amount of discomfort or pain could dissuade ${him} from going bigger.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset" && (slave.behavioralFlaw === "arrogant" || slave.behavioralQuirk === "confident")) { + } else if (FutureSocieties.isActive('FSAssetExpansionist') && (slave.behavioralFlaw === "arrogant" || slave.behavioralQuirk === "confident")) { if (slave.behavioralFlaw === "arrogant") { r.push(`They are <span class="health dec">painful</span> to lug around for ${his} childish form, but ${he} is well aware of <span class="trust inc">just how much of an effect</span> they have on your citizens.`); healthDamage(slave, 5); @@ -2008,7 +2009,7 @@ App.SlaveAssignment.longTermPhysicalEffects = function saLongTermPhysicalEffects if (canWalk(slave)) { if (slave.sexualFlaw === "breast growth") { r.push(`${His} huge breasts are troublesome for ${his} childish form, but that only drives ${his} desire to go even bigger.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset" && (slave.behavioralFlaw === "arrogant" || slave.behavioralQuirk === "confident")) { + } else if (FutureSocieties.isActive('FSAssetExpansionist') && (slave.behavioralFlaw === "arrogant" || slave.behavioralQuirk === "confident")) { if (slave.behavioralFlaw === "arrogant") { r.push(`${His} huge tits may be annoying and <span class="health dec">painful</span> for ${his} childish form, but ${he} is well aware of <span class="trust inc">just how valuable</span> they make ${him} in your arcology.`); healthDamage(slave, 4); @@ -2030,7 +2031,7 @@ App.SlaveAssignment.longTermPhysicalEffects = function saLongTermPhysicalEffects if (canWalk(slave)) { if (slave.sexualFlaw === "breast growth") { r.push(`The weight of ${his} big boobs serves as a reminder that ${he} needs to get even bigger.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset" && (slave.behavioralFlaw === "arrogant" || slave.behavioralQuirk === "confident")) { + } else if (FutureSocieties.isActive('FSAssetExpansionist') && (slave.behavioralFlaw === "arrogant" || slave.behavioralQuirk === "confident")) { if (slave.behavioralFlaw === "arrogant") { r.push(`${His} big tits may be heavy, but ${he} is well aware of <span class="trust inc">just how sexy</span> they make ${him} in your arcology.`); slave.trust += 1; @@ -2079,7 +2080,7 @@ App.SlaveAssignment.longTermPhysicalEffects = function saLongTermPhysicalEffects if (canWalk(slave)) { if (slave.sexualFlaw === "breast growth") { r.push(`${His} huge breasts are troublesome for ${his} slight form, but that only drives ${his} desire to go even bigger.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset" && (slave.behavioralFlaw === "arrogant" || slave.behavioralQuirk === "confident")) { + } else if (FutureSocieties.isActive('FSAssetExpansionist') && (slave.behavioralFlaw === "arrogant" || slave.behavioralQuirk === "confident")) { if (slave.behavioralFlaw === "arrogant") { r.push(`${His} huge tits may be annoying and <span class="health dec">painful</span> for ${his} slight form, but ${he} is well aware of <span class="trust inc">just how valuable</span> they make ${him} in your arcology.`); healthDamage(slave, 3); @@ -2101,7 +2102,7 @@ App.SlaveAssignment.longTermPhysicalEffects = function saLongTermPhysicalEffects if (canWalk(slave)) { if (slave.sexualFlaw === "breast growth") { r.push(`The weight of ${his} big boobs serves as a reminder that ${he} needs to get even bigger.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset" && (slave.behavioralFlaw === "arrogant" || slave.behavioralQuirk === "confident")) { + } else if (FutureSocieties.isActive('FSAssetExpansionist') && (slave.behavioralFlaw === "arrogant" || slave.behavioralQuirk === "confident")) { if (slave.behavioralFlaw === "arrogant") { r.push(`${His} big tits may be heavy, but ${he} is well aware of <span class="trust inc">just how sexy</span> they make ${him} in your arcology.`); slave.trust += 1; @@ -2861,7 +2862,7 @@ App.SlaveAssignment.longTermPhysicalEffects = function saLongTermPhysicalEffects if (canWalk(slave)) { if (slave.butt > 15) { r.push(`${His} butt is a massive burden to ${him}. ${He} dreads walking down narrow hallways and getting dressed in the morning.`); - if (V.arcologies[0].FSAssetExpansionist !== "unset" && (slave.behavioralFlaw === "arrogant" || slave.behavioralQuirk === "confident")) { + if (FutureSocieties.isActive('FSAssetExpansionist') && (slave.behavioralFlaw === "arrogant" || slave.behavioralQuirk === "confident")) { if (slave.behavioralFlaw === "arrogant") { r.push(`However, your arcology can't help but worship an ass as expansive as ${hers}, <span class="trust inc">giving ${him} an ego</span> that rivals ${his} rear.`); slave.trust += 3; @@ -2876,7 +2877,7 @@ App.SlaveAssignment.longTermPhysicalEffects = function saLongTermPhysicalEffects } } else if (slave.butt > 10) { r.push(`${His} butt has gotten absolutely enormous.`); - if (V.arcologies[0].FSAssetExpansionist !== "unset" && (slave.behavioralFlaw === "arrogant" || slave.behavioralQuirk === "confident")) { + if (FutureSocieties.isActive('FSAssetExpansionist') && (slave.behavioralFlaw === "arrogant" || slave.behavioralQuirk === "confident")) { if (slave.behavioralFlaw === "arrogant") { r.push(`Your arcology glorifies asses as large as ${hers}, <span class="trust inc">inflating ${his} ego</span> almost as large as ${his} rear.`); slave.trust += 2; @@ -2926,7 +2927,6 @@ App.SlaveAssignment.longTermPhysicalEffects = function saLongTermPhysicalEffects /** * @param {App.Entity.SlaveState} slave - * */ function healthBlips(slave) { if (V.curativeSideEffects !== 0) { diff --git a/src/endWeek/saPleaseYou.js b/src/endWeek/saPleaseYou.js index 416c1a05411e5c40d82797ea34699ff60f55f2b0..c069c68209c2fdd626bb523af58a23d4373e4fdb 100644 --- a/src/endWeek/saPleaseYou.js +++ b/src/endWeek/saPleaseYou.js @@ -1731,7 +1731,7 @@ App.SlaveAssignment.pleaseYou = function saPleaseYou(slave) { if (areRelated(V.PC, slave)) { r.push(`Keeping your own ${relativeTerm(V.PC, slave)} as a personal ${canFuck ? `fucktoy` : `bedwarmer`} leaves quite a public impression.`); multiplier += 0.01; // 1% base - if (V.arcologies[0].FSEgyptianRevivalist !== "unset" || V.arcologies[0].FSEgyptianRevivalistIncestPolicy === 1) { + if (FutureSocieties.isActive('FSEgyptianRevivalist') || V.arcologies[0].FSEgyptianRevivalistIncestPolicy === 1) { multiplier += 0.04; // 5% if such behavior aligns with your societal goals } } diff --git a/src/endWeek/saPregnancy.js b/src/endWeek/saPregnancy.js index decd71f77610b297dd46fa9d6529c062fee1e66b..4f7ac6dc5b743be0e107c9e88c79119ddb307185 100644 --- a/src/endWeek/saPregnancy.js +++ b/src/endWeek/saPregnancy.js @@ -303,7 +303,7 @@ App.SlaveAssignment.pregnancy = function saPregnancy(slave) { slave.devotion += 1; } // @ts-ignore - if (slave.devotion > 20 && V.arcologies[0].FSRepopulationFocus !== "unset" && slave.sexualQuirk === "motherly") { + if (slave.devotion > 20 && FutureSocieties.isActive('FSRepopulationFocus') && slave.sexualQuirk === "motherly") { r.push(`${His} pregnancy fills ${him} with <span class="devotion inc">joyful pride,</span> since ${he} is surrounded by those that share ${his} values on having children.`); slave.devotion += 1; } diff --git a/src/endWeek/saRecruitGirls.js b/src/endWeek/saRecruitGirls.js index efcafe681facf361e197abb8ad6e355cfe91325b..0712f97b62092d692240b6dc09f2b054f226aae8 100644 --- a/src/endWeek/saRecruitGirls.js +++ b/src/endWeek/saRecruitGirls.js @@ -8,6 +8,10 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { const arcology = V.arcologies[0]; const targetArcology = V.arcologies.find((s) => s.direction === arcology.influenceTarget); + + const arcologyInfo = new App.Utils.Arcology(arcology); + const targetArcologyInfo = targetArcology ? new App.Utils.Arcology(targetArcology) : null; + const totalInt = slave.intelligence + slave.intelligenceImplant; const { @@ -64,7 +68,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { * @param {FC.ReportSlave} slave */ function physicalAdjustments(slave) { - if (slave.lactation && arcology.FSPastoralist !== "unset") { + if (slave.lactation && arcologyInfo.fsActive('FSPastoralist')) { slave.lactationDuration = 2; slave.boobs -= slave.boobsMilk; slave.boobsMilk = 0; @@ -106,8 +110,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { const influence = Math.clamp(netRecruiterEntertainmentIncome * 0.01, 1, 3 + V.recruiterIOUs); V.recruiterIOUs = 0; - if (arcology.FSSubjugationist !== "unset") { - if (targetArcology.FSSubjugationist !== "unset") { + if (arcologyInfo.fsActive('FSSubjugationist')) { + if (targetArcologyInfo.fsActive('FSSubjugationist')) { if (arcology.FSSubjugationistRace === targetArcology.FSSubjugationistRace) { r.push(`${He} advances its racially aligned`); if (slave.race === targetArcology.FSSubjugationistRace) { @@ -127,7 +131,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } targetArcology.FSSubjugationist -= influence; } - } else if (targetArcology.FSSupremacist !== "unset" && arcology.FSSubjugationistRace === targetArcology.FSSupremacistRace) { + } else if (targetArcologyInfo.fsActive('FSSupremacist') && arcology.FSSubjugationistRace === targetArcology.FSSupremacistRace) { r.push(`${He} challenges its opposing`); if (slave.race === targetArcology.FSSubjugationistRace) { r.push(`Supremacism, which ${he}'s very appropriate for, since ${he}'s ${addA(slave.race)} slave ${himself}.`); @@ -138,8 +142,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { targetArcology.FSSupremacist -= influence; } } - if (arcology.FSSupremacist !== "unset") { - if (targetArcology.FSSupremacist !== "unset") { + if (arcologyInfo.fsActive('FSSupremacist')) { + if (targetArcologyInfo.fsActive('FSSupremacist')) { if (arcology.FSSupremacistRace === targetArcology.FSSupremacistRace) { r.push(`${He} advances its racially aligned`); if (slave.race !== targetArcology.FSSupremacistRace) { @@ -159,7 +163,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } targetArcology.FSSupremacist -= influence; } - } else if (targetArcology.FSSubjugationist !== "unset" && arcology.FSSupremacistRace === targetArcology.FSSubjugationistRace) { + } else if (targetArcologyInfo.fsActive('FSSubjugationist') && arcology.FSSupremacistRace === targetArcology.FSSubjugationistRace) { r.push(`${He} challenges its opposing`); if (slave.race !== targetArcology.FSSupremacistRace) { r.push(`Subjugationism, which ${he}'s very appropriate for, since ${he}'s ${addA(slave.race)} slave ${himself}.`); @@ -170,8 +174,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { targetArcology.FSSubjugationist -= influence; } } - if (arcology.FSGenderRadicalist !== "unset") { - if (targetArcology.FSGenderRadicalist !== "unset") { + if (arcologyInfo.fsActive('FSGenderRadicalist')) { + if (targetArcologyInfo.fsActive('FSGenderRadicalist')) { r.push(`${He} advances Gender Radicalism there by fucking and getting fucked by anyone who's`); if (canDoAnal(slave) && canPenetrate(slave)) { r.push(`willing, which ${he}'s perfect for, since ${he}'s quite capable of cumming from`); @@ -186,7 +190,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { r.push(`willing.`); } targetArcology.FSGenderRadicalist += influence; - } else if (targetArcology.FSGenderFundamentalist !== "unset") { + } else if (targetArcologyInfo.fsActive('FSGenderFundamentalist')) { r.push(`${He} challenges Gender Fundamentalism there by fucking and getting fucked by anyone who's`); if (canDoAnal(slave) && canPenetrate(slave)) { r.push(`willing, which ${he}'s perfect for, since ${he}'s quite capable of cumming from`); @@ -202,8 +206,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } targetArcology.FSGenderFundamentalist -= influence; } - } else if (arcology.FSGenderFundamentalist !== "unset") { - if (targetArcology.FSGenderFundamentalist !== "unset") { + } else if (arcologyInfo.fsActive('FSGenderFundamentalist')) { + if (targetArcologyInfo.fsActive('FSGenderFundamentalist')) { r.push(`${He} advances Gender Fundamentalism there by being a wholesome, romantic`); if (slave.genes === "XX" && slave.vagina > -1 && !slave.dick && !slave.scrotum) { r.push(`${girl}, which ${he}'s perfect for, since ${he}'s a proper ${woman} with a body meant for missionary.`); @@ -212,7 +216,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { r.push(`${girl}.`); } targetArcology.FSGenderFundamentalist += influence; - } else if (targetArcology.FSGenderRadicalist !== "unset") { + } else if (targetArcologyInfo.fsActive('FSGenderRadicalist')) { r.push(`${He} challenges Gender Radicalism there by being a wholesome, romantic`); if (slave.genes === "XX" && slave.vagina > -1 && !slave.dick && !slave.scrotum) { r.push(`${girl}, which ${he}'s perfect for, since ${he}'s a proper ${woman} with a body meant for missionary.`); @@ -223,8 +227,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { targetArcology.FSGenderRadicalist -= influence; } } - if (arcology.FSPaternalist !== "unset") { - if (targetArcology.FSPaternalist !== "unset") { + if (arcologyInfo.fsActive('FSPaternalist')) { + if (targetArcologyInfo.fsActive('FSPaternalist')) { r.push(`${He} advances Paternalism there by ${his} enthusiasm for sexual`); if (slave.energy > 95 && slave.trust > 50) { r.push(`slavery, which ${he}'s perfect for, since ${he}'s a trusting nymphomaniac who couldn't possibly find happiness as anything other than a sex slave.`); @@ -233,7 +237,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { r.push(`slavery.`); } targetArcology.FSPaternalist += influence; - } else if (targetArcology.FSDegradationist !== "unset") { + } else if (targetArcologyInfo.fsActive('FSDegradationist')) { r.push(`${He} challenges Degradationism there by ${his} enthusiasm for sexual`); if (slave.energy > 95 && slave.trust > 50) { r.push(`slavery, which ${he}'s perfect for, since ${he}'s a trusting nymphomaniac who couldn't possibly find happiness as anything other than a sex slave.`); @@ -243,8 +247,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } targetArcology.FSDegradationist -= influence; } - } else if (arcology.FSDegradationist !== "unset") { - if (targetArcology.FSDegradationist !== "unset") { + } else if (arcologyInfo.fsActive('FSDegradationist')) { + if (targetArcologyInfo.fsActive('FSDegradationist')) { r.push(`${He} advances Degradationism there by submitting to public use in the most degrading`); if (slave.energy > 95 && slave.trust < -50) { r.push(`ways, which ${he}'s perfect for, since ${he}'s a frightened nymphomaniac for whom fear is an essential ingredient in the sexual release ${he} craves.`); @@ -253,7 +257,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { r.push(`ways.`); } targetArcology.FSDegradationist += influence; - } else if (targetArcology.FSPaternalist !== "unset") { + } else if (targetArcologyInfo.fsActive('FSPaternalist')) { r.push(`${He} challenges Paternalism there by submitting to public use in the most degrading`); if (slave.energy > 95 && slave.trust < -50) { r.push(`ways, which ${he}'s perfect for, since ${he}'s a frightened nymphomaniac for whom fear is an essential ingredient in the sexual release ${he} craves.`); @@ -264,8 +268,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { targetArcology.FSPaternalist -= influence; } } - if (arcology.FSIntellectualDependency !== "unset") { - if (targetArcology.FSIntellectualDependency !== "unset") { + if (arcologyInfo.fsActive('FSIntellectualDependency')) { + if (targetArcologyInfo.fsActive('FSIntellectualDependency')) { r.push(`${He} advances Intellectual Dependency there by being an insatiable`); if (slave.energy > 95 && slave.attrXX > 95 && slave.attrXY > 95) { r.push(`party ${girl}, which ${he}'s perfect for, since there's little ${he} won't make out with.`); @@ -274,7 +278,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { r.push(`party ${girl}.`); } targetArcology.FSIntellectualDependency += influence; - } else if (targetArcology.FSSlaveProfessionalism !== "unset") { + } else if (targetArcologyInfo.fsActive('FSSlaveProfessionalism')) { r.push(`${He} challenges Slave Professionalism there by being an insatiable`); if (slave.energy > 95 && slave.attrXX > 95 && slave.attrXY > 95) { r.push(`party ${girl}, which ${he}'s perfect for, since there's little ${he} won't make out with.`); @@ -284,8 +288,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } targetArcology.FSSlaveProfessionalism -= influence; } - } else if (arcology.FSSlaveProfessionalism !== "unset") { - if (targetArcology.FSSlaveProfessionalism !== "unset") { + } else if (arcologyInfo.fsActive('FSSlaveProfessionalism')) { + if (targetArcologyInfo.fsActive('FSSlaveProfessionalism')) { r.push(`${He} advances Slave Professionalism there by demonstrating new techniques for the local slaves to`); if (totalInt > 95) { r.push(`learn, which ${he}'s perfect for, since ${he}'s brilliant enough to pass ${his} knowledge to anyone willing to listen.`); @@ -294,7 +298,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { r.push(`learn.`); } targetArcology.FSSlaveProfessionalism += influence; - } else if (targetArcology.FSIntellectualDependency !== "unset") { + } else if (targetArcologyInfo.fsActive('FSIntellectualDependency')) { r.push(`${He} challenges Intellectual Dependency there by demonstrating new techniques for the local slaves to`); if (totalInt > 95) { r.push(`learn, which ${he}'s perfect for, since ${he}'s brilliant enough to pass ${his} knowledge to anyone willing to listen.`); @@ -305,8 +309,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { targetArcology.FSIntellectualDependency -= influence; } } - if (arcology.FSBodyPurist !== "unset") { - if (targetArcology.FSBodyPurist !== "unset") { + if (arcologyInfo.fsActive('FSBodyPurist')) { + if (targetArcologyInfo.fsActive('FSBodyPurist')) { r.push(`${He} advances Body Purism there with a lot of unadorned public`); if (isPure(slave)) { r.push(`nudity, which ${he}'s perfect for, since ${he}'s an all-natural beauty.`); @@ -315,7 +319,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { r.push(`nudity.`); } targetArcology.FSBodyPurist += influence; - } else if (targetArcology.FSTransformationFetishist !== "unset") { + } else if (targetArcologyInfo.fsActive('FSTransformationFetishist')) { r.push(`${He} challenges Transformation Fetishism there with a lot of unadorned public`); if (isPure(slave)) { r.push(`nudity, which ${he}'s perfect for, since ${he}'s an all-natural beauty.`); @@ -325,8 +329,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } targetArcology.FSTransformationFetishist -= influence; } - } else if (arcology.FSTransformationFetishist !== "unset") { - if (targetArcology.FSTransformationFetishist !== "unset") { + } else if (arcologyInfo.fsActive('FSTransformationFetishist')) { + if (targetArcologyInfo.fsActive('FSTransformationFetishist')) { r.push(`${He} advances Transformation Fetishism there with a lot of slutty public`); if (isSurgicallyImproved(slave)) { r.push(`nudity, which ${he}'s perfect for, since ${he}'s a whorish sex doll full of plastic.`); @@ -335,7 +339,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { r.push(`nudity.`); } targetArcology.FSTransformationFetishist += influence; - } else if (targetArcology.FSBodyPurist !== "unset") { + } else if (targetArcologyInfo.fsActive('FSBodyPurist')) { r.push(`${He} challenges Body Purism there with a lot of slutty public`); if (isSurgicallyImproved(slave)) { r.push(`nudity, which ${he}'s perfect for, since ${he}'s a whorish sex doll full of plastic.`); @@ -346,8 +350,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { targetArcology.FSBodyPurist -= influence; } } - if (arcology.FSYouthPreferentialist !== "unset") { - if (targetArcology.FSYouthPreferentialist !== "unset") { + if (arcologyInfo.fsActive('FSYouthPreferentialist')) { + if (targetArcologyInfo.fsActive('FSYouthPreferentialist')) { r.push(`${He} advances Youth Preferentialism there by showing favoritism to younger`); if (slave.visualAge < 25) { r.push(`suitors, and by being nice and young ${himself}, appropriately enough.`); @@ -356,7 +360,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { r.push(`suitors.`); } targetArcology.FSYouthPreferentialist += influence; - } else if (targetArcology.FSMaturityPreferentialist !== "unset") { + } else if (targetArcologyInfo.fsActive('FSMaturityPreferentialist')) { r.push(`${He} challenges Maturity Preferentialism there by showing favoritism to younger`); if (slave.visualAge < 25) { r.push(`suitors, and by being nice and young ${himself}, appropriately enough.`); @@ -366,8 +370,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } targetArcology.FSMaturityPreferentialist -= influence; } - } else if (arcology.FSMaturityPreferentialist !== "unset") { - if (targetArcology.FSMaturityPreferentialist !== "unset") { + } else if (arcologyInfo.fsActive('FSMaturityPreferentialist')) { + if (targetArcologyInfo.fsActive('FSMaturityPreferentialist')) { r.push(`${He} advances Maturity Preferentialism there by showing favoritism to more mature`); if (slave.visualAge > 35) { r.push(`suitors, and by being a MILF ${himself}, appropriately enough.`); @@ -376,7 +380,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { r.push(`suitors.`); } targetArcology.FSMaturityPreferentialist += influence; - } else if (targetArcology.FSYouthPreferentialist !== "unset") { + } else if (targetArcologyInfo.fsActive('FSYouthPreferentialist')) { r.push(`${He} challenges Youth Preferentialism there by showing favoritism to more mature`); if (slave.visualAge > 35) { r.push(`suitors, and by being a MILF ${himself}, appropriately enough.`); @@ -387,8 +391,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { targetArcology.FSYouthPreferentialist -= influence; } } - if (arcology.FSPetiteAdmiration !== "unset") { - if (targetArcology.FSPetiteAdmiration !== "unset") { + if (arcologyInfo.fsActive('FSPetiteAdmiration')) { + if (targetArcologyInfo.fsActive('FSPetiteAdmiration')) { r.push(`${He} advances Petite Admiration there by showing favoritism to much taller`); if (heightPass(slave)) { r.push(`suitors, and by being adorably short ${himself}, appropriately enough.`); @@ -397,7 +401,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { r.push(`suitors.`); } targetArcology.FSPetiteAdmiration += influence; - } else if (targetArcology.FSStatuesqueGlorification !== "unset") { + } else if (targetArcologyInfo.fsActive('FSStatuesqueGlorification')) { r.push(`${He} challenges Statuesque Glorification there by showing favoritism to much taller`); if (slave.visualAge < 25) { r.push(`suitors, and by being short ${himself}, further pushing the size gap.`); @@ -407,8 +411,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } targetArcology.FSStatuesqueGlorification -= influence; } - } else if (arcology.FSStatuesqueGlorification !== "unset") { - if (targetArcology.FSStatuesqueGlorification !== "unset") { + } else if (arcologyInfo.fsActive('FSStatuesqueGlorification')) { + if (targetArcologyInfo.fsActive('FSStatuesqueGlorification')) { r.push(`${He} advances Statuesque Glorification there by showing favoritism to tall`); if (heightPass(slave)) { r.push(`suitors, and by being tall ${himself}, appropriately enough.`); @@ -417,7 +421,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { r.push(`suitors.`); } targetArcology.FSStatuesqueGlorification += influence; - } else if (targetArcology.FSPetiteAdmiration !== "unset") { + } else if (targetArcologyInfo.fsActive('FSPetiteAdmiration')) { r.push(`${He} challenges Petite Admiration there by showing favoritism to tall`); if (heightPass(slave)) { r.push(`suitors, and by being tall ${himself}, appropriately enough.`); @@ -428,8 +432,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { targetArcology.FSPetiteAdmiration -= influence; } } - if (arcology.FSSlimnessEnthusiast !== "unset") { - if (targetArcology.FSSlimnessEnthusiast !== "unset") { + if (arcologyInfo.fsActive('FSSlimnessEnthusiast')) { + if (targetArcologyInfo.fsActive('FSSlimnessEnthusiast')) { r.push(`${He} advances Slimness Enthusiasm there by showing ${his} appreciation for lithe, graceful`); if (slave.boobs < 500 && slave.butt < 3) { r.push(`partners, and by being a lissome waif ${himself}.`); @@ -438,7 +442,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { r.push(`partners.`); } targetArcology.FSSlimnessEnthusiast += influence; - } else if (targetArcology.FSAssetExpansionist !== "unset") { + } else if (targetArcologyInfo.fsActive('FSAssetExpansionist')) { r.push(`${He} challenges Asset Expansionism there by showing ${his} appreciation for lithe, graceful`); if (slave.boobs < 500 && slave.butt < 3) { r.push(`partners, and by being a lissome waif ${himself}.`); @@ -448,8 +452,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } targetArcology.FSAssetExpansionist -= influence; } - } else if (arcology.FSAssetExpansionist !== "unset") { - if (targetArcology.FSAssetExpansionist !== "unset") { + } else if (arcologyInfo.fsActive('FSAssetExpansionist')) { + if (targetArcologyInfo.fsActive('FSAssetExpansionist')) { r.push(`${He} advances Asset Expansionism there by showing ${his} appreciation for partners with healthy helpings of tits and`); if (slave.butt > 4 && slave.boobs > 800) { r.push(`ass, and by being deliciously stacked ${himself}.`); @@ -458,7 +462,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { r.push(`ass.`); } targetArcology.FSAssetExpansionist += influence; - } else if (targetArcology.FSSlimnessEnthusiast !== "unset") { + } else if (targetArcologyInfo.fsActive('FSSlimnessEnthusiast')) { r.push(`${He} challenges Slimness Enthusiasm there by showing ${his} appreciation for partners with healthy helpings of tits and`); if (slave.butt > 4 && slave.boobs > 800) { r.push(`ass, and by being deliciously stacked ${himself}.`); @@ -469,8 +473,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { targetArcology.FSSlimnessEnthusiast -= influence; } } - if (arcology.FSPastoralist !== "unset") { - if (targetArcology.FSPastoralist !== "unset") { + if (arcologyInfo.fsActive('FSPastoralist')) { + if (targetArcologyInfo.fsActive('FSPastoralist')) { r.push(`${He} advances Pastoralism there by drinking a lot of milk, as lasciviously as`); if (slave.lactation) { r.push(`possible, and by not milking ${himself} at all, thereby causing ${his} tits to jet cream during intercourse, while ${he} moves, or for no reason at all.`); @@ -479,7 +483,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { r.push(`possible.`); } targetArcology.FSPastoralist += influence; - } else if (targetArcology.FSCummunism !== "unset") { + } else if (targetArcologyInfo.fsActive('FSCummunism')) { r.push(`${He} challenges Cummunism there by drinking a lot of milk, as lasciviously as`); if (slave.lactation) { r.push(`possible, and by not milking ${himself} at all, thereby causing ${his} tits to jet cream during intercourse, while ${he} moves, or for no reason at all.`); @@ -490,8 +494,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { targetArcology.FSCummunism -= influence; } } - if (arcology.FSPhysicalIdealist !== "unset") { - if (targetArcology.FSPhysicalIdealist !== "unset") { + if (arcologyInfo.fsActive('FSPhysicalIdealist')) { + if (targetArcologyInfo.fsActive('FSPhysicalIdealist')) { r.push(`${He} advances Physical Idealism there by working out in`); if (slave.muscles >= 50 && arcology.FSPhysicalIdealistLaw === 0) { r.push(`public, having physically challenging sex in public, and improving ${his} already impressive musculature in a publicly documented journey of self-improvement.`); @@ -509,7 +513,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { r.push(`sex in public.`); } targetArcology.FSPhysicalIdealist += influence; - } else if (targetArcology.FSHedonisticDecadence !== "unset") { + } else if (targetArcologyInfo.fsActive('FSHedonisticDecadence')) { r.push(`${He} challenges Hedonistic Decadence there by working out in`); if (slave.muscles >= 50 && arcology.FSPhysicalIdealistLaw === 0) { r.push(`public, having physically challenging sex in public, and improving ${his} already impressive musculature in a publicly documented journey of self-improvement.`); @@ -528,15 +532,15 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } targetArcology.FSHedonisticDecadence -= influence; } - } else if (arcology.FSHedonisticDecadence !== "unset") { - if (targetArcology.FSHedonisticDecadence !== "unset") { + } else if (arcologyInfo.fsActive('FSHedonisticDecadence')) { + if (targetArcologyInfo.fsActive('FSHedonisticDecadence')) { 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 (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") { + } else if (targetArcologyInfo.fsActive('FSPhysicalIdealist')) { 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 (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.`); @@ -545,8 +549,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { targetArcology.FSPhysicalIdealist -= influence; } } - if (arcology.FSRepopulationFocus !== "unset") { - if (targetArcology.FSRepopulationFocus !== "unset") { + if (arcologyInfo.fsActive('FSRepopulationFocus')) { + if (targetArcologyInfo.fsActive('FSRepopulationFocus')) { r.push(`${He} advances Repopulationism there by showing ${his} appreciation for partners with fecund`); if (slave.belly >= 10000) { r.push(`figures, and by`); @@ -560,7 +564,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { r.push(`figures.`); } targetArcology.FSRepopulationFocus += influence; - } else if (targetArcology.FSRestart !== "unset") { + } else if (targetArcologyInfo.fsActive('FSRestart')) { r.push(`${He} challenges Eugenics there by showing ${his} appreciation for partners with fecund figures, specifically those lacking the approval of`); if (slave.belly >= 10000) { r.push(`society, and by`); @@ -575,8 +579,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } targetArcology.FSRestart -= influence; } - } else if (arcology.FSRestart !== "unset") { - if (targetArcology.FSRestart !== "unset") { + } else if (arcologyInfo.fsActive('FSRestart')) { + if (targetArcologyInfo.fsActive('FSRestart')) { r.push(`${He} advances Eugenics there by congratulating high class couples while completely ignoring everyone`); if (slave.belly < 1500 && !canGetPregnant(slave)) { r.push(`else, and by showing off ${his} baby-free`); @@ -590,7 +594,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { r.push(`else.`); } targetArcology.FSRestart += influence; - } else if (targetArcology.FSRepopulationFocus !== "unset") { + } else if (targetArcologyInfo.fsActive('FSRepopulationFocus')) { r.push(`${He} challenges Repopulationism there by harshly judging every gravid girl ${he} sees while showering praise on the high`); if (slave.belly < 1500 && !canGetPregnant(slave)) { r.push(`class, and by showing off ${his} baby-free`); @@ -606,8 +610,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { targetArcology.FSRepopulationFocus -= influence; } } - if (arcology.FSChattelReligionist !== "unset") { - if (targetArcology.FSChattelReligionist !== "unset") { + if (arcologyInfo.fsActive('FSChattelReligionist')) { + if (targetArcologyInfo.fsActive('FSChattelReligionist')) { r.push(`${He} advances Chattel Religionism there by constant public worship, both sexual and`); if (slave.devotion > 95 && totalInt > 95) { r.push(`traditional, and by composing ${his} own series of devotionals to your sexual prowess and attractiveness.`); @@ -618,8 +622,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { targetArcology.FSChattelReligionist += influence; } } - if (arcology.FSRomanRevivalist !== "unset") { - if (targetArcology.FSRomanRevivalist !== "unset") { + if (arcologyInfo.fsActive('FSRomanRevivalist')) { + if (targetArcologyInfo.fsActive('FSRomanRevivalist')) { r.push(`${He} advances Roman Revivalism there by taking an active part in the daily round of public Roman`); if (canTalk(slave) && totalInt > 95) { r.push(`life, which ${he}'s perfect for, since ${he} has the intelligence to hold ${his} own in discourse with citizens.`); @@ -629,8 +633,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } targetArcology.FSRomanRevivalist += influence; } - } else if (arcology.FSNeoImperialist !== "unset") { - if (targetArcology.FSNeoImperialist !== "unset") { + } else if (arcologyInfo.fsActive('FSNeoImperialist')) { + if (targetArcologyInfo.fsActive('FSNeoImperialist')) { r.push(`${He} advances Neo-Imperialism there by measuring out grace and allure with the arcology's`); if (canTalk(slave) && totalInt > 95) { r.push(`elites, elegantly convincing them with ${his} cutting wit on the favorite topic of any wealthy patrician - their own societal importance.`); @@ -640,8 +644,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } targetArcology.FSNeoImperialist += influence; } - } else if (arcology.FSAztecRevivalist !== "unset") { - if (targetArcology.FSAztecRevivalist !== "unset") { + } else if (arcologyInfo.fsActive('FSAztecRevivalist')) { + if (targetArcologyInfo.fsActive('FSAztecRevivalist')) { r.push(`${He} advances Aztec Revivalism there by taking an active part in the bloodier`); if (slave.skill.combat > 60) { r.push(`spectacles, which ${he}'s perfect for, since ${he} has enough experience with blood to make it look good.`); @@ -651,8 +655,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } targetArcology.FSAztecRevivalist += influence; } - } else if (arcology.FSEgyptianRevivalist !== "unset") { - if (targetArcology.FSEgyptianRevivalist !== "unset") { + } else if (arcologyInfo.fsActive('FSEgyptianRevivalist')) { + if (targetArcologyInfo.fsActive('FSEgyptianRevivalist')) { r.push(`${He} advances Egyptian Revivalism there by playing ${his} part in the endless round of voluptuous`); if (App.Utils.hasFamilySex(slave)) { r.push(`entertainments, which ${he}'s perfect for, since everyone knows that at the end of the day ${he}'ll go home and make love to a blood relative.`); @@ -662,8 +666,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } targetArcology.FSEgyptianRevivalist += influence; } - } else if (arcology.FSEdoRevivalist !== "unset") { - if (targetArcology.FSEdoRevivalist !== "unset") { + } else if (arcologyInfo.fsActive('FSEdoRevivalist')) { + if (targetArcologyInfo.fsActive('FSEdoRevivalist')) { r.push(`${He} advances Edo Revivalism there by artfully mixing sexual allure and elegant`); if (slave.skill.entertainment > 95) { r.push(`propriety, which ${he}'s perfect for, since no slave can claim to better entertain a gentleman caller than ${him}.`); @@ -673,8 +677,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } targetArcology.FSEdoRevivalist += influence; } - } else if (arcology.FSArabianRevivalist !== "unset") { - if (targetArcology.FSArabianRevivalist !== "unset") { + } else if (arcologyInfo.fsActive('FSArabianRevivalist')) { + if (targetArcologyInfo.fsActive('FSArabianRevivalist')) { r.push(`${He} advances Arabian Revivalism there by helping citizens improve their slaves' sex`); if (slave.fetishKnown && (slave.fetish === "sadist" || slave.fetish === "dom")) { r.push(`skills, which ${he}'s perfect for, since ${he}'s naturally dominant and likes nothing better than fucking ${his} inferiors.`); @@ -684,8 +688,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } targetArcology.FSArabianRevivalist += influence; } - } else if (arcology.FSChineseRevivalist !== "unset") { - if (targetArcology.FSChineseRevivalist !== "unset") { + } else if (arcologyInfo.fsActive('FSChineseRevivalist')) { + if (targetArcologyInfo.fsActive('FSChineseRevivalist')) { r.push(`${He} advances Chinese Revivalism there by helping citizens improve the feng shui of their slave`); if (totalInt > 110) { r.push(`arrangements, which ${he}'s perfect for, since ${he} has the intelligence and education to make real contributions.`); @@ -695,8 +699,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } targetArcology.FSChineseRevivalist += influence; } - } else if (arcology.FSAntebellumRevivalist !== "unset") { - if (targetArcology.FSAntebellumRevivalist !== "unset") { + } else if (arcologyInfo.fsActive('FSAntebellumRevivalist')) { + if (targetArcologyInfo.fsActive('FSAntebellumRevivalist')) { r.push(`${He} advances Antebellum Revivalism there by helping citizens make their slaves more convivial and entertaining,`); if (slave.skill.entertainment > 95) { r.push(`which ${he}'s perfect for, since ${he} is quite the entertainer ${himself}.`); @@ -984,7 +988,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { V.recruiterIOUs = 0; } - if (arcology.FSSupremacist !== "unset") { + if (arcologyInfo.fsActive('FSSupremacist')) { if (totalInt > 50) { seed += 2; FSdefend++; @@ -1001,7 +1005,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { pushFS(`${He} flubs ${his} lines so badly that no one would ever believe ${arcology.FSSupremacistRace} people make better leaders.`); } } - if (arcology.FSSubjugationist !== "unset") { + if (arcologyInfo.fsActive('FSSubjugationist')) { if (totalInt > 50) { seed += 2; FSdefend++; @@ -1016,7 +1020,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { pushFS(`${He} flubs ${his} lines so badly that no one would ever believe ${arcology.FSSupremacistRace} people make better leaders.`); } } - if (arcology.FSGenderRadicalist !== "unset") { + if (arcologyInfo.fsActive('FSGenderRadicalist')) { if (slave.dick > 0 && (slave.balls < 1 || slave.boobs > 400)) { if (slave.anus > 0 && canDoAnal(slave)) { pushFS(`${His} public demonstrations of just how hard feminized sissies can orgasm with buttsex — at a different interior balcony each day — draw plenty of attention.`); @@ -1041,9 +1045,9 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } else { pushFS(`${He} just doesn't have the right combination of body parts to personally demonstrate your utopia of eager, girly-dicked buttsluts.`); } - } else if (arcology.FSGenderFundamentalist !== "unset") { + } else if (arcologyInfo.fsActive('FSGenderFundamentalist')) { if (slave.balls < 1 && slave.dick < 1 && slave.vagina >= 0) { - if (arcology.FSRestart !== "unset") { + if (arcologyInfo.fsActive('FSRestart')) { pushFS(`${He} posts plenty of seductive photos emphasizing ${his} feminine curves, including lewds showing off ${his} natural vagina, bringing more attention to your campaign for natural females.`); seed += 1; } else if (slave.bellyPreg >= 1500 || App.Data.misc.fakeBellies.includes(slave.bellyAccessory)) { @@ -1065,7 +1069,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { pushFS(`On the topic of natural female deference to their owners around the house, your recruiter would be more convincing if ${he} didn't keep readjusting ${his} junk.`); } } - if (arcology.FSPaternalist !== "unset") { + if (arcologyInfo.fsActive('FSPaternalist')) { if (slave.devotion + slave.trust > 150 || slave.relationship === -3) { if (slave.intelligenceImplant >= 15) { pushFS(`All week ${he} shares original poetry in which ${his} love for you shines `); @@ -1091,7 +1095,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } else { pushFS(`${His} praise of your good works lacks the special touch of personal affection, so it doesn't impress much.`); } - } else if (arcology.FSDegradationist !== "unset") { + } else if (arcologyInfo.fsActive('FSDegradationist')) { if (totalInt > 50) { pushFS(`Ordinarily you would punish a slave who displays independent thinking, but when ${slave.slaveName}`); if (modScore.total > 15 || (modScore.piercing > 8 && modScore.tat > 5)) { @@ -1116,7 +1120,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } } } - if (arcology.FSIntellectualDependency !== "unset") { + if (arcologyInfo.fsActive('FSIntellectualDependency')) { if (arcology.FSIntellectualDependencyLawBeauty === 1 && bimboScore(slave) >= 6) { if (slave.energy > 95) { if (totalInt < -50) { @@ -1145,7 +1149,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } else { pushFS(`${He} just lacks the energy to party all night long.`); } - } else if (arcology.FSSlaveProfessionalism !== "unset") { + } else if (arcologyInfo.fsActive('FSSlaveProfessionalism')) { if (slave.accent <= 1) { if (totalInt > 50) { if (totalInt > 95) { @@ -1174,7 +1178,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { pushFS(`${His} inability to speak ${V.language} properly makes ${him} a relatively poor spokes${woman} for trained slaves.`); } } - if (arcology.FSBodyPurist !== "unset") { + if (arcologyInfo.fsActive('FSBodyPurist')) { if (slave.piercing.corset.weight === 0 && modScore.piercing < 3 && modScore.tat < 2) { if (slave.boobsImplant === 0 && slave.buttImplant === 0 && slave.waist >= -95) { pushFS(`${He} exhibits pure sexuality in a lovely, artistic gallery of erotic photos posted this week that displays every natural ${V.showInches === 2 ? `inch` : `centimeter`} of ${his} body.`); @@ -1200,7 +1204,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } else { pushFS(`${He} is burdened by the knowledge that ${his} heavy alterations don't fit your ideal of purity, and fails to show at a scheduled photo shoot.`); } - } else if (arcology.FSTransformationFetishist !== "unset") { + } else if (arcologyInfo.fsActive('FSTransformationFetishist')) { if (slave.boobsImplant > 0 && slave.buttImplant > 0 && slave.lipsImplant > 0) { if (slave.waist < -95 || slave.teeth === "pointy" || slave.teeth === "fangs" || !hasAllNaturalLimbs(slave) || (slave.vagina > -1 && slave.dick > 6)) { pushFS(`A series of cleverly staged publicity events at various businesses in the arcology subtly focuses on ${his} better-than-natural physiology in each one.`); @@ -1224,7 +1228,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { pushFS(`"Boobs, butts, and blowjobs": it's the plastic surgeon's mantra, and viewing this week's publicity footage reminds you that you've neglected your recruiter's augmentations.`); } } - if (arcology.FSYouthPreferentialist !== "unset") { + if (arcologyInfo.fsActive('FSYouthPreferentialist')) { if (slave.physicalAge < 30) { pushFS(`${His} nightly cam chats sparkle with the energy of youth.`); seed += 4; @@ -1233,7 +1237,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } else { pushFS(`As an older slave, ${he} doesn't have enough energy to cam chat late into the night.`); } - } else if (arcology.FSMaturityPreferentialist !== "unset") { + } else if (arcologyInfo.fsActive('FSMaturityPreferentialist')) { if (slave.actualAge >= 30) { pushFS(`${He} video blogs regularly about the financial, medical, and even emotional security of slave life for older ${women}.`); seed += 4; @@ -1243,7 +1247,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { pushFS(`${He} uses too much youthful slang and jumps from topic to topic in ${his} video blogs, making them difficult for ${his} audience to follow.`); } } - if (arcology.FSPetiteAdmiration !== "unset") { + if (arcologyInfo.fsActive('FSPetiteAdmiration')) { if (heightPass(slave)) { pushFS(`${He} takes advantage of ${his} short stature to shock and amaze ${his} followers by having sex in unusual places.`); seed += 4; @@ -1256,7 +1260,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } pushFS(`as most citizens.`); } - } else if (arcology.FSStatuesqueGlorification !== "unset") { + } else if (arcologyInfo.fsActive('FSStatuesqueGlorification')) { if (heightPass(slave)) { pushFS(`${His} photoshoots all use a panoramic camera to better capture ${his} height while giving them a unique flare.`); seed += 4; @@ -1266,7 +1270,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { pushFS(`${He}'s just too short for the public to pay any mind to.`); } } - if (arcology.FSRepopulationFocus !== "unset") { + if (arcologyInfo.fsActive('FSRepopulationFocus')) { if (slave.preg > slave.pregData.normalBirth / 1.33) { pushFS(`${He} makes a habit of allowing the public to fondle and enjoy the movements within ${his} baby-filled belly.`); if (slave.pregType >= 30) { @@ -1308,7 +1312,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } else { pushFS(`Being both unintelligent and inexperienced, ${his} attempts to emphasize the joys of pregnancy only come off as someone who likes big bellies, no matter their cause.`); } - } else if (arcology.FSRestart !== "unset") { + } else if (arcologyInfo.fsActive('FSRestart')) { if (slave.bellyPreg >= 1500 && slave.breedingMark === 1 && V.propOutcome === 1) { pushFS(`${He} prominently displays ${his} pregnancy and the mark branded upon it signifying the superior child growing within ${him}. ${His} audience is enamored by ${his} distinct status.`); seed += 4; @@ -1340,7 +1344,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { pushFS(`No-one cares what bloated trash has to say.`); } } - if (arcology.FSSlimnessEnthusiast !== "unset") { + if (arcologyInfo.fsActive('FSSlimnessEnthusiast')) { if (slave.boobs < 500 && slave.butt < 3 && slave.weight <= 10 && slave.muscles <= 30) { pushFS(`${His} trim body gives ${him} a cute, ${girl}-next-door sex appeal in every selfie, even the ones taken in your penthouse far above everyone else's doors.`); seed += 4; @@ -1349,7 +1353,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } else { pushFS(`${He} shares a lot of selfies of ${his} activities in your penthouse, but ${his} bulging figure tends to hide what's going on.`); } - } else if (arcology.FSAssetExpansionist !== "unset") { + } else if (arcologyInfo.fsActive('FSAssetExpansionist')) { if (slave.boobs > 2000 || slave.butt > 7 || slave.balls > 4 || slave.dick > 8) { pushFS(`As the saying goes, "shake it if you got it," and no one can doubt ${slave.slaveName} has it after a "citizen" posts an "unauthorized" wristcam video of ${his} humongous anatomy swinging around a stripper pole.`); seed += 4; @@ -1359,7 +1363,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { pushFS(`Although ${he} tries hard, none of ${his} assets interest the true size fetishist.`); } } - if (arcology.FSPastoralist !== "unset") { + if (arcologyInfo.fsActive('FSPastoralist')) { if (V.dairy) { if (App.Entity.facilities.dairy.employeesIDs().size > 0 && FSIntMod > ((V.dairyRestraintsSetting + 1) * 30) && V.dairyRestraintsSetting < 2) { if (slave.lactation > 0) { @@ -1385,7 +1389,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { pushFS(`${He} can't really promote Pastoralist ideals when ${his} owner hasn't even committed to building a Dairy.`); } } - if (arcology.FSPhysicalIdealist !== "unset") { + if (arcologyInfo.fsActive('FSPhysicalIdealist')) { let pass = false; if (slave.muscles >= 50 && arcology.FSPhysicalIdealistLaw === 0) { pushFS(`${He} asks another slave to photo-document ${his} time in the gym this week: naked, of course, to show off ${his} impressive muscle definition, and in certain poses ${he} nearly seems to be making love to the equipment.`); @@ -1404,8 +1408,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { FSmatch++; arcology.FSPhysicalIdealist += 0.01 * V.FSSingleSlaveRep; } - } else if (arcology.FSHedonisticDecadence !== "unset") { - if (arcology.FSHedonisticDecadenceResearch === 1 && arcology.FSDegradationist === "unset") { + } else if (arcologyInfo.fsActive('FSHedonisticDecadence')) { + if (arcology.FSHedonisticDecadenceResearch === 1 && !arcologyInfo.fsActive('FSDegradationist')) { pushFS(`Whenever ${he} meets a prospect, ${he} makes sure to take some of your specialized slave food with ${him} to show them they won't miss much from their prior lives. It rarely fails to make an impact.`); seed += 2; FSmatch++; @@ -1428,19 +1432,19 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } } const clothes = App.Data.clothes.get(slave.clothes); - if (arcology.FSChattelReligionist !== "unset") { + if (arcologyInfo.fsActive('FSChattelReligionist')) { if (totalInt > 15 && (slave.devotion > 95 || slave.trust > 95)) { if (arcology.FSChattelReligionistLaw2 !== 1) { if (ChattelReligionistClothingPass(slave.clothes)) { pushFS(`Clad in ${his} holy garb, ${slave.slaveName} preaches to the atrium with a powerful appeal to the new morality, in which ${his} absolute faith in your revelations is unmistakable.`); seed += 2; - } else if (arcology.FSNeoImperialist !== "unset" && slave.clothes === "a tight Imperial bodysuit") { + } else if (arcologyInfo.fsActive('FSNeoImperialist') && slave.clothes === "a tight Imperial bodysuit") { pushFS(`${He} lectures eloquently on the importance of hierarchy and noble lineage in a pseudo-religious fashion, dressed out in ${his} form-fitting bodysuit; most of the listeners' eyes fall on ${his} tightly-outlined chest and how ${his} nipples protrude obviously underneath the cybersuit, your crest emblazoned over the rock-hard nubs doing more of the arguing.`); seed += 1; - } else if (arcology.FSNeoImperialist !== "unset" && slave.clothes === "Imperial Plate") { + } else if (arcologyInfo.fsActive('FSNeoImperialist') && slave.clothes === "Imperial Plate") { pushFS(`${He} gives a lengthy speech about the importance of hierarchy and noble lineage in a pseudo-religious fashion, speaking on the divine right of the nobility to rule while dominating the floor in ${his} ultra-heavy Imperial plate.`); seed += 1; - } else if (arcology.FSRomanRevivalist !== "unset" && slave.clothes === "a toga") { + } else if (arcologyInfo.fsActive('FSRomanRevivalist') && slave.clothes === "a toga") { pushFS(`${He} preaches in the atrium, delivering a powerful and faith-filled appeal in support of the new state religion and its Prophet-Emperor, descendant of the gods.`); seed += 1; } else { @@ -1468,7 +1472,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } else { pushFS(`${He} is hapless as a proselytizer for the new religious order because ${his} personal understanding and adherence remains inadequate.`); } - } else if (arcology.FSNull !== "unset") { + } else if (arcologyInfo.fsActive('FSNull')) { pushFS(`${His} contribution is one voice among many in the open freedom of ${arcology.name}'s media,`); if (slave.skill.entertainment > 10) { pushFS(`but everything that relates to its leadership is usually well-received.`); @@ -1477,7 +1481,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } seed += ((slave.skill.entertainment / 30) * arcology.FSNull / 10); } - if (arcology.FSRomanRevivalist !== "unset") { + if (arcologyInfo.fsActive('FSRomanRevivalist')) { if (clothes.fs && clothes.fs.loves && clothes.fs.loves.has("FSRomanRevivalist")) { if (slave.face > 10 && slave.counter.pitKills > 0) { pushFS(`${He} thrills audiences by recounting tales of ${his} exploits as a beautiful and deadly gladiatrix-<span style="italic">slash</span>-love-slave for the First Citizen of the Eternal City reborn.`); @@ -1496,7 +1500,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } else { pushFS(`Dressed as ${he} is in the garments of a barbarian, the citizens of the New Rome ignore ${him}.`); } - } else if (arcology.FSNeoImperialist !== "unset") { + } else if (arcologyInfo.fsActive('FSNeoImperialist')) { if (slave.clothes === "a tight Imperial bodysuit") { if (slave.face > 10 && slave.skill.entertainment >= 60) { pushFS(`${He} thrills the watching audience with ${his} immense beauty and charm, performing just as a proper Imperial slave ought - obedient, gorgeous, and strikingly attentive.`); @@ -1524,7 +1528,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } else { pushFS(`Without clear markings to identify ${him} as an Imperial slave, ${his} attempts have little effect on the promotion of Imperial society.`); } - } else if (arcology.FSEgyptianRevivalist !== "unset") { + } else if (arcologyInfo.fsActive('FSEgyptianRevivalist')) { if (totalRelatives(slave) > 0) { const recruiterRelation = randomRelatedAvailableSlave(slave); if (recruiterRelation) { @@ -1561,7 +1565,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } else { pushFS(`One of the most prominent features of your Egyptian Revival is an open, even expectant, attitude toward slave incest, but ${he} doesn't have any close family living in your household.`); } - } else if (arcology.FSEdoRevivalist !== "unset") { + } else if (arcologyInfo.fsActive('FSEdoRevivalist')) { if (V.clubDecoration !== "standard" && App.Entity.facilities.club.employeesIDs().size > 1) { if (getClubAdsBonus() >= 3) { pushFS(`The candid, POV-style videos of ${slave.slaveName} dancing, making out, and giving blowjobs alongside your regular sluts in ${V.clubName}'s ${V.clubDecoration} atmosphere earn a lot of thumbs up.`); @@ -1578,7 +1582,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } else { pushFS(`${He} gets some hot POV-style footage when ${he} films in your nightclub, but there's nothing special about its atmosphere to distinguish it from any other bar in any other arcology.`); } - } else if (arcology.FSArabianRevivalist !== "unset") { + } else if (arcologyInfo.fsActive('FSArabianRevivalist')) { if (V.masterSuiteDecoration === "Arabian Revivalist" && V.masterSuiteUpgradeLuxury > 0 && App.Utils.masterSuiteAverages().energy > 60) { if (App.Entity.facilities.masterSuite.employeesIDs().size >= 3) { pushFS(`An exposé that "pulls back the curtain" on your elaborate master bedroom goes viral after several harem slaves drag ${him} into`); @@ -1602,7 +1606,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } else { pushFS(`${He} makes a short video essay about your elaborate master suite, but there's no sex going on while ${he} films.`); } - } else if (arcology.FSChineseRevivalist !== "unset") { + } else if (arcologyInfo.fsActive('FSChineseRevivalist')) { if (totalInt > 15 && V.HeadGirlID !== 0 && V.BodyguardID !== 0 && V.HGSuite > 0) { if ((S.HeadGirl.skill.entertainment / 30) + (S.HeadGirl.intelligenceImplant / 10) + S.HeadGirl.prestige >= 4) { if (S.Bodyguard.prestige >= 1) { @@ -1626,8 +1630,8 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } else { pushFS(`${He} never considers promoting your household's Revivalist protocols, since you don't value your Head Girl enough to accord ${him} a separate apartment inside your walls.`); } - } else if (arcology.FSAztecRevivalist !== "unset") { - if (arcology.FSPaternalist !== "unset") { + } else if (arcologyInfo.fsActive('FSAztecRevivalist')) { + if (arcologyInfo.fsActive('FSPaternalist')) { if (slave.health.condition >= 80 && slave.bellyPreg < 1500 && slave.trust + slave.devotion >= 175) { pushFS(`${He} allows willing members of the public to <span class="health dec">spill ${his} blood</span> in tribute to the gods.`); healthDamage(slave, 2); @@ -1661,7 +1665,7 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } else { pushFS(`${His} poor attempts to espouse the benefits of true faith leave the crowd wondering if ${he} is next in line for sacrifice.`); } - } else if (arcology.FSAntebellumRevivalist !== "unset") { + } else if (arcologyInfo.fsActive('FSAntebellumRevivalist')) { if (slave.skill.entertainer > 95 && App.Entity.facilities.servantsQuarters.employeesIDs().size > 5 && (slave.behavioralQuirk === "funny" || totalInt > 50)) { pushFS(`${He} puts together a charming little video touring your spotless estate, showing particular care to the well-staffed ${V.servantsQuartersName}.`); if (V.servantsQuartersDecoration === "Antebellum Revivalist") { @@ -1697,13 +1701,13 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { } if (FSdefend > 0) { r.push(`${He} is able to smartly`); - if (arcology.FSPaternalist !== "unset") { + if (arcologyInfo.fsActive('FSPaternalist')) { r.push(`answer`); } else { r.push(`deflect`); } r.push(`abolitionist trolls about your arcology's treatment of`); - if (arcology.FSPaternalist !== "unset") { + if (arcologyInfo.fsActive('FSPaternalist')) { r.push(`contracted sex workers,`); } else { r.push(`chattel,`); diff --git a/src/endWeek/saRelationships.js b/src/endWeek/saRelationships.js index 917da31c4d01f679e5565d633687896cd2884535..7b868bd5430b537294aff4f333e9fd8efdead76e 100644 --- a/src/endWeek/saRelationships.js +++ b/src/endWeek/saRelationships.js @@ -770,7 +770,7 @@ App.SlaveAssignment.relationships = function saRelationships(slave) { break; case 5: // married r.push(`has a slave ${wife2}, ${friend.slaveName}.`); - if (V.arcologies[0].FSChattelReligionist !== "unset") { + if (FutureSocieties.isActive('FSChattelReligionist')) { r.push(`Society <span class="reputation inc">approves</span> of their marriage, which advances the slave sacrament.`); V.arcologies[0].FSChattelReligionist += 0.05 * V.FSSingleSlaveRep; repX(V.FSSingleSlaveRep * (V.arcologies[0].FSChattelReligionist / V.FSLockinLevel), "SlaveRelationships", slave); @@ -840,7 +840,7 @@ App.SlaveAssignment.relationships = function saRelationships(slave) { } } else if (slave.devotion > 95 && slave.relationship > 4) { r.push(`${He} feels`); - if (V.arcologies[0].FSChattelReligionist !== "unset") { + if (FutureSocieties.isActive('FSChattelReligionist')) { r.push(`blessed with`); } else { r.push(`${he} has`); @@ -931,7 +931,7 @@ App.SlaveAssignment.relationships = function saRelationships(slave) { } } } - if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + if (FutureSocieties.isActive('FSEgyptianRevivalist')) { r.push(`Society <span class="reputation inc">strongly approves</span> of ${whose} incestuous relationship, which advances the Egyptian revivalist ideal of slave incest.`); repX((2 * V.FSSingleSlaveRep * (V.arcologies[0].FSEgyptianRevivalist / V.FSLockinLevel)), repType, slave); V.arcologies[0].FSEgyptianRevivalist += (0.1 * V.FSSingleSlaveRep); diff --git a/src/endWeek/saRules.js b/src/endWeek/saRules.js index 6ca5199564379990cf03d9062a9df536d8860292..e9ff0e6bc8eb88930397876efe2c6b9e9b3f16d0 100644 --- a/src/endWeek/saRules.js +++ b/src/endWeek/saRules.js @@ -1496,7 +1496,7 @@ App.SlaveAssignment.rules = function(slave) { if (canDoVaginal(slave)) { if (slave.vagina !== 0) { seX(S.Schoolteacher, "penetrative", slave, "vaginal", 7); - if (canImpreg(slave, S.Schoolteacher) && (slave.breedingMark === 0 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) { + if (canImpreg(slave, S.Schoolteacher) && (slave.breedingMark === 0 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || !FutureSocieties.isActive('FSRestart'))) { knockMeUp(slave, 5, 0, S.Schoolteacher.ID); } } @@ -1505,7 +1505,7 @@ App.SlaveAssignment.rules = function(slave) { if (canDoAnal(slave)) { if (slave.anus !== 0) { seX(S.Schoolteacher, "penetrative", slave, "anal", 7); - if (canImpreg(slave, S.Schoolteacher) && (slave.breedingMark === 0 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) { + if (canImpreg(slave, S.Schoolteacher) && (slave.breedingMark === 0 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || !FutureSocieties.isActive('FSRestart'))) { knockMeUp(slave, 5, 1, S.Schoolteacher.ID); } } @@ -1517,7 +1517,7 @@ App.SlaveAssignment.rules = function(slave) { } else if (S.Schoolteacher.anus !== 0) { seX(S.Schoolteacher, "anal", slave, "penetrative", 7); } - if (canImpreg(S.Schoolteacher, slave) && (S.Schoolteacher.breedingMark === 0 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) { + if (canImpreg(S.Schoolteacher, slave) && (S.Schoolteacher.breedingMark === 0 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || !FutureSocieties.isActive('FSRestart'))) { if (S.Schoolteacher.vagina !== 0 && S.Schoolteacher.ovaries === 1) { knockMeUp(S.Schoolteacher, 5, 0, slave.ID); } else if (S.Schoolteacher.anus !== 0 && S.Schoolteacher.mpreg === 1) { diff --git a/src/endWeek/saServeThePublic.js b/src/endWeek/saServeThePublic.js index 56215d47e1eceb86a9b832669f11d61ae68460df..c8083d0a77103c78883adff55a2395fe0b2798dc 100644 --- a/src/endWeek/saServeThePublic.js +++ b/src/endWeek/saServeThePublic.js @@ -7,6 +7,7 @@ App.SlaveAssignment.serveThePublic = function saServeThePublic(slave) { he, him, his, hers, himself, girl, He, His, loli } = getPronouns(slave); const arcology = V.arcologies[0]; + const arcologyInfo = new App.Utils.Arcology(arcology); let r = ` `; let cervixPump = 0; @@ -227,7 +228,7 @@ App.SlaveAssignment.serveThePublic = function saServeThePublic(slave) { * */ function comingOfAge(slave) { - if (slave.physicalAge === V.minimumSlaveAge && slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcology.FSRepopulationFocus !== "unset" || arcology.FSGenderFundamentalist !== "unset") && arcology.FSRestart === "unset") { + if (slave.physicalAge === V.minimumSlaveAge && slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcologyInfo.fsActive('FSRepopulationFocus') || arcologyInfo.fsActive('FSGenderFundamentalist')) && !arcologyInfo.fsActive('FSRestart')) { if (slave.birthWeek === 0) { r += ` ${He} just turned ${V.minimumSlaveAge} this week, giving ${him} an immense boost to both popularity and appeal. ${He} is also expected to become fertile soon, giving ${him} an additional boost as citizens clamor to claim ${his} fresh womb.`; } else if (slave.birthWeek < 4) { @@ -239,7 +240,7 @@ App.SlaveAssignment.serveThePublic = function saServeThePublic(slave) { } else if (slave.birthWeek < 4) { r += ` This is still the first month in which it's legal to pay to fuck ${him}, giving ${him} a boost to both popularity and appeal.`; } - } else if (slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcology.FSRepopulationFocus !== "unset" || arcology.FSGenderFundamentalist !== "unset")) { + } else if (slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcologyInfo.fsActive('FSRepopulationFocus') || arcologyInfo.fsActive('FSGenderFundamentalist'))) { if (slave.birthWeek === 0) { r += ` ${He} is expected to become fertile soon, giving ${him} an immense boost to both popularity and appeal as citizens clamor to claim ${his} fresh womb.`; } else if (slave.birthWeek < 4) { @@ -615,7 +616,7 @@ App.SlaveAssignment.serveThePublic = function saServeThePublic(slave) { } if (canTalk(slave)) { - if (arcology.FSSlaveProfessionalism !== "unset" && slave.accent > 1) { + if (arcologyInfo.fsActive('FSSlaveProfessionalism') && slave.accent > 1) { r += ` ${His} butchery of the local tongue drives away curious citizens.`; } else if (slave.voice > 2) { if (slave.voiceImplant > 0) { @@ -670,7 +671,7 @@ App.SlaveAssignment.serveThePublic = function saServeThePublic(slave) { } if (isStacked(slave)) { - if (arcology.FSAssetExpansionist !== "unset") { + if (arcologyInfo.fsActive('FSAssetExpansionist')) { r += ` ${His} huge, fashionable assets are immensely popular.`; if (canTalk(slave)) { if (slave.voice > 2) { @@ -682,20 +683,20 @@ App.SlaveAssignment.serveThePublic = function saServeThePublic(slave) { } else { r += ` The public enjoys ${his} huge assets.`; } - if (arcology.FSGenderRadicalist !== "unset") { + if (arcologyInfo.fsActive('FSGenderRadicalist')) { if (slave.dick > 0) { r += ` The new appetite for stacked sluts with dicks makes ${him} especially successful.`; } } } - if (arcology.FSPetiteAdmiration !== "unset") { + if (arcologyInfo.fsActive('FSPetiteAdmiration')) { if (heightPass(slave)) { r += ` ${His} adorably petite stature catches and holds the public's eye.`; } else if (slave.height >= 170) { r += ` ${His} tall stature turns off most citizens.`; } - } else if (arcology.FSStatuesqueGlorification !== "unset") { + } else if (arcologyInfo.fsActive('FSStatuesqueGlorification')) { if (heightPass(slave)) { r += ` ${His} gloriously tall stature catches and holds the public's eye.`; } else { @@ -704,15 +705,15 @@ App.SlaveAssignment.serveThePublic = function saServeThePublic(slave) { } if (slave.visualAge >= 30) { - if (arcology.FSMaturityPreferentialist !== "unset") { + if (arcologyInfo.fsActive('FSMaturityPreferentialist')) { r += ` ${His} mature body is very fashionable.`; - } else if (arcology.FSYouthPreferentialist !== "unset") { + } else if (arcologyInfo.fsActive('FSYouthPreferentialist')) { r += ` ${His} old body is badly out of fashion.`; } } else { - if (arcology.FSYouthPreferentialist !== "unset") { + if (arcologyInfo.fsActive('FSYouthPreferentialist')) { r += ` ${His} youthful body is very fashionable.`; - } else if (arcology.FSMaturityPreferentialist !== "unset") { + } else if (arcologyInfo.fsActive('FSMaturityPreferentialist')) { r += ` ${His} young body is out of fashion.`; } } @@ -724,7 +725,7 @@ App.SlaveAssignment.serveThePublic = function saServeThePublic(slave) { if (arcology.FSGenderFundamentalistLawBeauty + arcology.FSGenderRadicalistLawBeauty > 0) { if (genderLawPass(slave) === 1) { - if (arcology.FSAssetExpansionist !== "unset") { + if (arcologyInfo.fsActive('FSAssetExpansionist')) { r += ` The public enjoys ${his} fashionably feminine body.`; } else { r += ` The public enjoys ${his} sleek, girlish figure.`; @@ -749,7 +750,7 @@ App.SlaveAssignment.serveThePublic = function saServeThePublic(slave) { } } else { if (slave.boobs < 500 && slave.butt < 3) { - if (slave.muscles <= 30 && arcology.FSPhysicalIdealist === "unset" && slave.weight <= 10 && arcology.FSHedonisticDecadence === "unset") { + if (slave.muscles <= 30 && !arcologyInfo.fsActive('FSPhysicalIdealist') && slave.weight <= 10 && !arcologyInfo.fsActive('FSHedonisticDecadence')) { if (arcology.FSSlimnessEnthusiast > 20) { r += ` The public enjoys ${his} fashionably sleek little body.`; } else { @@ -758,7 +759,7 @@ App.SlaveAssignment.serveThePublic = function saServeThePublic(slave) { if (canTalk(slave) && slave.voice > 2) { r += ` ${His} high voice contributes to ${his} girlish image, so ${he} does even better.`; } - } else if (arcology.FSPhysicalIdealist !== "unset") { // no muscle malus for muscle loving societies + } else if (arcologyInfo.fsActive('FSPhysicalIdealist')) { // no muscle malus for muscle loving societies if ((arcology.FSPhysicalIdealistStrongFat === 1 && slave.weight <= 30) || slave.weight <= 10) { // reduced weight malus for fat loving societies if (arcology.FSSlimnessEnthusiast > 20) { r += ` The public enjoys ${his} fashionably sleek little body.`; @@ -769,7 +770,7 @@ App.SlaveAssignment.serveThePublic = function saServeThePublic(slave) { r += ` ${His} high voice contributes to ${his} girlish image, so ${he} does even better.`; } } - } else if (arcology.FSHedonisticDecadence !== "unset" && slave.weight <= 30) { // reduced weight malus for fat loving societies + } else if (arcologyInfo.fsActive('FSHedonisticDecadence') && slave.weight <= 30) { // reduced weight malus for fat loving societies if (arcology.FSHedonisticDecadenceStrongFat === 1 || slave.muscles <= 30) { // no muscle malus for muscle loving societies if (arcology.FSSlimnessEnthusiast > 20) { r += ` The public enjoys ${his} fashionably sleek little body.`; @@ -791,7 +792,7 @@ App.SlaveAssignment.serveThePublic = function saServeThePublic(slave) { } if (slave.boobsImplant === 0 && slave.buttImplant === 0 && slave.waist >= -95 && slave.bellyImplant === -1 && slave.lipsImplant === 0 && slave.faceImplant < 30) { - if (arcology.FSBodyPurist !== "unset") { + if (arcologyInfo.fsActive('FSBodyPurist')) { r += ` With ${his} all-natural, implant free appearance, ${he}'s very popular.`; } else if (arcology.FSTransformationFetishist >= 20) { r += ` The public is disappointed by ${his} all-natural, implant free appearance.`; @@ -799,13 +800,13 @@ App.SlaveAssignment.serveThePublic = function saServeThePublic(slave) { r += ` Some discerning people appreciate ${his} all-natural, implant free appearance.`; } } else { - if (arcology.FSTransformationFetishist !== "unset") { + if (arcologyInfo.fsActive('FSTransformationFetishist')) { r += ` The public appreciates ${his} augmented body.`; } } if (slave.nipples === "fuckable") { - if (arcology.FSTransformationFetishist !== "unset") { + if (arcologyInfo.fsActive('FSTransformationFetishist')) { r += ` ${His} fuckable nipples give ${him} an edge over those without such body modifications.`; } else { r += ` ${His} fuckable nipples entice some of the more curious citizens.`; @@ -837,7 +838,7 @@ App.SlaveAssignment.serveThePublic = function saServeThePublic(slave) { } if (slave.dick !== 0) { - if (arcology.FSGenderRadicalist === "unset") { + if (!arcologyInfo.fsActive('FSGenderRadicalist')) { r += ` ${He}'s less popular because many citizens prefer sluts without cocks.`; } else if (arcology.FSGenderRadicalist < 50) { r += ` ${His} cock entices some citizens and disappoints others; it has little effect on ${his} popularity.`; @@ -847,7 +848,7 @@ App.SlaveAssignment.serveThePublic = function saServeThePublic(slave) { } if (slave.muscles > 95) { - if (arcology.FSPhysicalIdealist !== "unset") { + if (arcologyInfo.fsActive('FSPhysicalIdealist')) { r += ` In the new culture of ${arcology.name} ${his} muscles are cause for great admiration.`; } else { r += ` ${His} muscles scare off many, but some will do anything to enjoy a muscular slave.`; @@ -866,7 +867,7 @@ App.SlaveAssignment.serveThePublic = function saServeThePublic(slave) { } if (slave.bellyPreg >= 1500 || App.Data.misc.fakeBellies.includes(slave.bellyAccessory) || slave.bellyImplant >= 1500) { - if (arcology.FSRepopulationFocus !== "unset") { + if (arcologyInfo.fsActive('FSRepopulationFocus')) { r += ` In the new culture of ${arcology.name}, ${his}`; if (App.Data.misc.fakeBellies.includes(slave.bellyAccessory) || slave.bellyImplant >= 1500) { r += ` apparent`; @@ -874,13 +875,13 @@ App.SlaveAssignment.serveThePublic = function saServeThePublic(slave) { r += ` pregnancy gets ${him} lots of attention.`; } else if (arcology.FSRepopulationFocusPregPolicy === 1 && slave.bellyPreg >= 1500) { r += ` It's currently trendy to be ripe with child, so ${his} pregnancy gets ${him} lots of attention.`; - } else if (arcology.FSRestart !== "unset") { + } else if (arcologyInfo.fsActive('FSRestart')) { r += ` In the new culture of ${arcology.name}, ${his}`; if (App.Data.misc.fakeBellies.includes(slave.bellyAccessory) || slave.bellyImplant >= 1500) { r += ` apparent`; } r += ` pregnancy is a massive turn off to citizens.`; - } else if (arcology.FSGenderFundamentalist !== "unset") { + } else if (arcologyInfo.fsActive('FSGenderFundamentalist')) { r += ` The new respect for slave fertility ensures that ${he} gets just as much love as slaves without pregnant bellies`; if (App.Data.misc.fakeBellies.includes(slave.bellyAccessory) || slave.bellyImplant >= 1500) { r += `, even if ${his} bump isn't real`; @@ -900,33 +901,33 @@ App.SlaveAssignment.serveThePublic = function saServeThePublic(slave) { r += ` The public tastes favor white ${girl}s like ${slave.slaveName}.`; } } - if (arcology.FSSupremacist !== "unset") { + if (arcologyInfo.fsActive('FSSupremacist')) { if (slave.race !== arcology.FSSupremacistRace) { r += ` Some citizens fetishize ${girl}s of the servile races.`; } } - if (arcology.FSSubjugationist !== "unset") { + if (arcologyInfo.fsActive('FSSubjugationist')) { if (slave.race === arcology.FSSubjugationistRace) { r += ` Many prefer to use and abuse sluts of the proper slave race.`; } } - if (arcology.FSEdoRevivalist !== "unset") { + if (arcologyInfo.fsActive('FSEdoRevivalist')) { if (slave.nationality === "Japanese" || slave.nationality === "Edo Revivalist") { r += ` As a proper Japanese ${girl}, ${he} is considered extremely desirable.`; } - } else if (arcology.FSChineseRevivalist !== "unset") { + } else if (arcologyInfo.fsActive('FSChineseRevivalist')) { if (slave.nationality === "Chinese" || slave.nationality === "Ancient Chinese Revivalist") { r += ` As a proper Chinese ${girl}, ${he} is considered extremely desirable.`; } } - if (arcology.FSSlaveProfessionalism !== "unset") { + if (arcologyInfo.fsActive('FSSlaveProfessionalism')) { if (slave.intelligence + slave.intelligenceImplant > 50) { r += ` ${His} intelligence satisfies citizens looking for something more than just a hole.`; } else if (slave.intelligence + slave.intelligenceImplant < -10) { r += ` ${His} stupidity aggravates citizens looking for something more than just a cum dump.`; } - } else if (arcology.FSIntellectualDependency !== "unset") { + } else if (arcologyInfo.fsActive('FSIntellectualDependency')) { if (slave.intelligence + slave.intelligenceImplant > 10) { r += ` ${His} intellectual baggage is more than most citizens wish to deal with.`; } else if (slave.intelligence + slave.intelligenceImplant < -50) { diff --git a/src/endWeek/saSocialEffects.js b/src/endWeek/saSocialEffects.js index c5d861ade74f906a204f56411de28b2e48bd8564..e63336419e8854dcb4b375c4f65cc8dd4072e708 100644 --- a/src/endWeek/saSocialEffects.js +++ b/src/endWeek/saSocialEffects.js @@ -20,13 +20,13 @@ App.SlaveAssignment.saSocialEffects = function(slave) { this.creditFacility = creditFacility; } - /** @returns {SocialEffect[]} */ + /** @returns {FC.SlaveSocialEffect[]} */ function makeSocialEffects() { let t = []; const modScore = SlaveStatsChecker.modScore(slave); - if (V.arcologies[0].FSSupremacist !== "unset") { + if (FutureSocieties.isActive('FSSupremacist')) { if (slave.race === V.arcologies[0].FSSupremacistRace) { if ([Job.ARCADE, Job.PUBLIC, Job.CLUB, Job.WHORE, Job.GLORYHOLE, Job.BROTHEL].includes(slave.assignment)) { t.push(new SocialEffect("Supremacist", -1, "Degrading job for race", @@ -91,7 +91,7 @@ App.SlaveAssignment.saSocialEffects = function(slave) { } } - if (V.arcologies[0].FSSubjugationist !== "unset") { + if (FutureSocieties.isActive('FSSubjugationist')) { if (slave.race === V.arcologies[0].FSSubjugationistRace) { t.push(new SocialEffect("Subjugationist", 1, "Inferior race slave", `Society <span class="green">approves</span> of your keeping a slave of the subject ${V.arcologies[0].FSSubjugationistRace} race; this also advances ${V.arcologies[0].FSSubjugationistRace} inferiority.`)); @@ -130,7 +130,7 @@ App.SlaveAssignment.saSocialEffects = function(slave) { } } - if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + if (FutureSocieties.isActive('FSYouthPreferentialist')) { if (slave.geneMods.NCS > 0 && slave.visualAge <= 18) { t.push(new SocialEffect("Youth Preferentialist", 2, "NCS Youthening", `Society <span class="green">strongly approves</span> of you keeping ${slave.slaveName} forever young and youthening; this furthers the fashion for young slaves.`)); @@ -139,7 +139,7 @@ App.SlaveAssignment.saSocialEffects = function(slave) { t.push(new SocialEffect("Youth Preferentialist", youthRepChange, "Young-looking slave", `Society <span class="green">approves</span> of ${slave.slaveName}'s youthful body; ${he} furthers the fashion for young slaves.`)); } - } else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + } else if (FutureSocieties.isActive('FSMaturityPreferentialist')) { if (slave.visualAge >= 30) { const matureRepChange = ((slave.visualAge - 25) / 5); t.push(new SocialEffect("Maturity Preferentialist", matureRepChange, "Mature-looking slave", @@ -147,7 +147,7 @@ App.SlaveAssignment.saSocialEffects = function(slave) { } } - if (V.arcologies[0].FSPetiteAdmiration !== "unset") { + if (FutureSocieties.isActive('FSPetiteAdmiration')) { if (heightPass(slave)) { t.push(new SocialEffect("Petite Admiration", 1, "Short slave", `Society <span class="green">approves</span> of keeping a slave as short as ${slave.slaveName} is; ${he} furthers the fashion for shorter slaves.`)); @@ -155,7 +155,7 @@ App.SlaveAssignment.saSocialEffects = function(slave) { t.push(new SocialEffect("Petite Admiration", -1, "Tall slave", `Society <span class="red">frowns</span> at keeping a slave as tall as ${slave.slaveName}; ${he} hinders the fashion for shorter slaves.`)); } - } else if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { + } else if (FutureSocieties.isActive('FSStatuesqueGlorification')) { if (heightPass(slave)) { t.push(new SocialEffect("Statuesque Glorification", 1, "Tall slave", `Society <span class="green">approves</span> of keeping a slave as tall as ${slave.slaveName} is; ${he} furthers the fashion for taller slaves.`)); @@ -165,7 +165,7 @@ App.SlaveAssignment.saSocialEffects = function(slave) { } } - if (V.arcologies[0].FSGenderRadicalist !== "unset") { + if (FutureSocieties.isActive('FSGenderRadicalist')) { if (slave.balls > 0 && slave.pubertyXY === 0 && slave.physicalAge >= V.potencyAge) { t.push(new SocialEffect("Gender Radicalist", 2, "Avoiding male puberty", `Society <span class="green">approves</span> of you keeping ${slave.slaveName} from going through puberty; this advances public interest in ${girl}s with soft little dicks.`)); @@ -179,8 +179,8 @@ App.SlaveAssignment.saSocialEffects = function(slave) { t.push(new SocialEffect("Gender Radicalist", 1, "Contented dickgirl bottom", `Society <span class="green">approves</span> of your keeping a contented dickgirl bottom; this advances public interest in ${girl}s who get hard when assfucked.`)); } - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset") { - if (V.arcologies[0].FSRestart === "unset") { + } else if (FutureSocieties.isActive('FSGenderFundamentalist')) { + if (!FutureSocieties.isActive('FSRestart')) { if (slave.bellyPreg >= 1500) { t.push(new SocialEffect("Gender Fundamentalist", 1, "Pregnant", `Society <span class="green">${V.arcologies[0].FSGenderFundamentalist >= V.FSLockinLevel * 0.5 ? "strongly " : ""}approves</span> of your keeping a pregnant slave; this also supports the idea that slave women should bear babies.`)); @@ -205,16 +205,16 @@ App.SlaveAssignment.saSocialEffects = function(slave) { } function repopRacialPregnancy() { - if (V.arcologies[0].FSSubjugationist !== "unset" && (slave.race === V.arcologies[0].FSSubjugationistRace)) { + if (FutureSocieties.isActive('FSSubjugationist') && (slave.race === V.arcologies[0].FSSubjugationistRace)) { t.push(new SocialEffect("Repopulationist", 0, "Undesirable race (Subjugationist)", `They just wish ${he} wasn't ${V.arcologies[0].FSSubjugationistRace}, of course.`)); - } else if (V.arcologies[0].FSSupremacist !== "unset" && (slave.race === V.arcologies[0].FSSupremacistRace)) { + } else if (FutureSocieties.isActive('FSSupremacist') && (slave.race === V.arcologies[0].FSSupremacistRace)) { t.push(new SocialEffect("Repopulationist", 0, "Desirable race (Supremacist)", `The fact that ${he} is ${V.arcologies[0].FSSupremacistRace} only makes it better.`)); } } - if (V.arcologies[0].FSRepopulationFocus !== "unset") { + if (FutureSocieties.isActive('FSRepopulationFocus')) { if (slave.preg > slave.pregData.normalBirth / 1.33) { if (slave.pregType >= 20) { t.push(new SocialEffect("Repopulationist", 5, "Broodmother", @@ -247,7 +247,7 @@ App.SlaveAssignment.saSocialEffects = function(slave) { t.push(new SocialEffect("Repopulationist", 1, "Obviously pregnant", `Society is <span class="green">pleased</span> by ${slave.slaveName}'s pregnancy.`)); repopRacialPregnancy(); - } else if (V.arcologies[0].FSSubjugationist !== "unset" && (slave.race === V.arcologies[0].FSSubjugationistRace) && slave.bellyImplant >= 1500) { + } else if (FutureSocieties.isActive('FSSubjugationist') && (slave.race === V.arcologies[0].FSSubjugationistRace) && slave.bellyImplant >= 1500) { t.push(new SocialEffect("", 0.1, "Belly implant for inferior race (Repopulation Focus)", `Society <span class="green">is satisfied</span> with ${slave.slaveName}'s implant-filled belly since ${his} kind really shouldn't be breeding.`)); } else if (slave.bellyImplant >= 1500 && ((slave.ovaries === 0 && slave.mpreg === 0) || slave.preg < -1)) { @@ -263,7 +263,7 @@ App.SlaveAssignment.saSocialEffects = function(slave) { } else if (App.Data.misc.fakeBellies.includes(slave.bellyAccessory)) { t.push(new SocialEffect("", 0.01, "Fake belly (Repopulation Focus)", `Society is <span class="green">placated</span> by ${slave.slaveName}'s fake belly.`)); - } else if (V.arcologies[0].FSSubjugationist !== "unset" && (slave.race === V.arcologies[0].FSSubjugationistRace)) { + } else if (FutureSocieties.isActive('FSSubjugationist') && (slave.race === V.arcologies[0].FSSubjugationistRace)) { t.push(new SocialEffect("Repopulationist", 0, "Not pregnant but inferior race (Subjugationist)", `Society is perfectly fine with ${slave.slaveName} not reproducing. ${His} belly is still unattractively small, however.`)); } else if ((slave.ovaries === 0 && slave.mpreg === 0) || (slave.preg < -1) || (slave.pubertyXX === 0)) { @@ -292,7 +292,7 @@ App.SlaveAssignment.saSocialEffects = function(slave) { t.push(new SocialEffect("", 0.5, "Big pregnant belly (Repopulation Policy)", `Society <span class="green">enjoys</span> ${slave.slaveName}'s pregnancy. Being heavy with child is in right now.`)); } - } else if (V.arcologies[0].FSRestart !== "unset") { + } else if (FutureSocieties.isActive('FSRestart')) { if (slave.chastityVagina) { t.push(new SocialEffect("Eugenics", 1, "Vaginal chastity", `Society is <span class="green">mildly pleased</span> at you keeping ${his} vagina in check.`)); @@ -373,7 +373,7 @@ App.SlaveAssignment.saSocialEffects = function(slave) { `Society <span class="green">loves</span> MILFs and as a mother, ${slave.slaveName} fits right in.`)); } - if (V.arcologies[0].FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist')) { if (slave.geneMods.NCS > 0 && slave.visualAge <= V.potencyAge && slave.physicalAge >= V.potencyAge) { t.push(new SocialEffect("Paternalist", 1, "NCS Youthening", `Society <span class="green">approves</span> of you keeping ${slave.slaveName} perpetually young and innocent looking so you can keep taking care of ${him}; this advances paternalistic ideals.`)); @@ -385,7 +385,7 @@ App.SlaveAssignment.saSocialEffects = function(slave) { if (slave.intelligenceImplant <= -15) { t.push(new SocialEffect("Paternalist", -2, "Miseducated", `Society <span class="red">is appalled</span> by ${slave.slaveName}'s twisted education; it goes against paternalistic values.`)); - } else if (V.arcologies[0].FSGenderFundamentalistLawBimbo !== 1 && V.arcologies[0].FSIntellectualDependency === "unset" && slave.intelligenceImplant < 15) { + } else if (V.arcologies[0].FSGenderFundamentalistLawBimbo !== 1 && !FutureSocieties.isActive('FSIntellectualDependency') && slave.intelligenceImplant < 15) { if (slave.assignment !== Job.SCHOOL && slave.assignment !== Job.CLASSES) { if (slave.assignment !== Job.REST && slave.assignment !== Job.CLINIC && slave.assignment !== Job.SPA) { t.push(new SocialEffect("Paternalist", -1, "Uneducated", @@ -453,7 +453,7 @@ App.SlaveAssignment.saSocialEffects = function(slave) { t.push(new SocialEffect("Paternalist", -1, `Lack of mobility`, `Society <span class="red">disapproves</span> that you are forcing ${him} to crawl instead of aiding ${his} mobility.`)); } - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (FutureSocieties.isActive('FSDegradationist')) { if (slave.fetish === Fetish.MINDBROKEN) { t.push(new SocialEffect("Degradationist", 1, `Mindbroken`, `Society <span class="green">approves</span> of ${his} broken spirit; ${he} serves as an example of a soulless fuckpuppet.`)); @@ -493,9 +493,9 @@ App.SlaveAssignment.saSocialEffects = function(slave) { t.push(new SocialEffect("Degradationist", 1, `Heavily modified`, `Society <span class="green">approves</span> of ${his} many body modifications, which advances the public taste for such degradation of slave bodies.`)); } - if (slave.abortionTat > 0 && V.arcologies[0].FSRepopulationFocus === "unset") { - t.push(new SocialEffect("Degradationist", V.arcologies[0].FSRestart !== "unset" ? 2 : 1, `Abortion tattoos`, - `Society <span class="green">${V.arcologies[0].FSRestart !== "unset" ? "greatly " : ""}approves</span> of ${his} tally of aborted children.`)); + if (slave.abortionTat > 0 && !FutureSocieties.isActive('FSRepopulationFocus')) { + t.push(new SocialEffect("Degradationist", FutureSocieties.isActive('FSRestart') ? 2 : 1, `Abortion tattoos`, + `Society <span class="green">${FutureSocieties.isActive('FSRestart') ? "greatly " : ""}approves</span> of ${his} tally of aborted children.`)); } if (slave.voice !== 0) { if (slave.lips > 95) { @@ -523,10 +523,10 @@ App.SlaveAssignment.saSocialEffects = function(slave) { for (const scarType in scars[scarPlace]) { // exotic scars don't count if (scarType !== "exotic") { - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { t.push(new SocialEffect("Degradationist", 1, `Scarred`, `Society <span class="green">mildly approves</span> of your slave's scarring; this encourages the further abuse of slaves.`)); - } else if (V.arcologies[0].FSPaternalist !== "unset") { + } else if (FutureSocieties.isActive('FSPaternalist')) { t.push(new SocialEffect("Paternalist", -1, `Scarred`, `Society <span class="red">mildly disapproves</span> of your scarred slaves, viewing them as a sign of mistreatment.`)); } @@ -540,7 +540,7 @@ App.SlaveAssignment.saSocialEffects = function(slave) { } } - if (V.arcologies[0].FSIntellectualDependency !== "unset") { + if (FutureSocieties.isActive('FSIntellectualDependency')) { if (V.arcologies[0].FSIntellectualDependencyLawBeauty === 1) { if (bimboScore(slave) >= 6) { t.push(new SocialEffect("Intellectual Dependency", 1, `Perfect bimbo`, @@ -570,7 +570,7 @@ App.SlaveAssignment.saSocialEffects = function(slave) { t.push(new SocialEffect("Intellectual Dependency", -1, `Low libido`, `Society <span class="red">disapproves</span> of ${slave.slaveName}'s restrained libido; to the public, this gives ${him} too much freedom to focus on things other than sex.`)); } - } else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + } else if (FutureSocieties.isActive('FSSlaveProfessionalism')) { if (slave.intelligence + slave.intelligenceImplant > 95) { t.push(new SocialEffect("Slave Professionalism", 1, `Brilliant`, `Society <span class="green">strongly approves</span> of ${slave.slaveName}'s brilliance; ${his} sharp wit is the foundation of slave perfectionism.`)); @@ -598,7 +598,7 @@ App.SlaveAssignment.saSocialEffects = function(slave) { } } - if (V.arcologies[0].FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist')) { if (slave.boobsImplant === 0 && slave.buttImplant === 0 && slave.lipsImplant === 0 && slave.bellyImplant === -1) { t.push(new SocialEffect("Body Purist", 1, `No implants`, `Society <span class="green">approves</span> of ${slave.slaveName}'s natural body; this supports the fashion for surgically untouched slaves.`)); @@ -654,7 +654,7 @@ App.SlaveAssignment.saSocialEffects = function(slave) { t.push(new SocialEffect("Body Purist", 1, `Heavy makeup`, `Society <span class="red">disapproves</span> of ${his} heavy makeup, which covers up ${his} natural features.`)); } - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (FutureSocieties.isActive('FSTransformationFetishist')) { let transformed = 0; if (slave.boobsImplant > 0 && slave.buttImplant > 0 && slave.lipsImplant > 0) { t.push(new SocialEffect("Transformation Fetishist", 1, `Implants`, @@ -739,16 +739,16 @@ App.SlaveAssignment.saSocialEffects = function(slave) { } } - if (V.arcologies[0].FSEgyptianRevivalist !== "unset" && V.seeCats === 1) { + if (FutureSocieties.isActive('FSEgyptianRevivalist') && V.seeCats === 1) { if (slave.race === "catgirl") { t.push(new SocialEffect("Egyptian Revivalist", 2, `Catgirl`, `Society <span class="green">adores</span> ${slave.slaveName} due to ${his} feline nature, which reminds many of the ancient Egyptian Goddesses.`)); } } - if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + if (FutureSocieties.isActive('FSAntebellumRevivalist')) { if (slave.assignment === Job.QUARTER) { - if (V.arcologies[0].FSSubjugationist !== "unset" && slave.race === V.arcologies[0].FSSubjugationistRace) { + if (FutureSocieties.isActive('FSSubjugationist') && slave.race === V.arcologies[0].FSSubjugationistRace) { t.push(new SocialEffect("Antebellum Revivalist", 2, `Servants`, `Society <span class="green">strongly approves</span> of ${slave.slaveName}, a slave of the inferior race, working as a servant.`)); } else { @@ -763,7 +763,7 @@ App.SlaveAssignment.saSocialEffects = function(slave) { } } - if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + if (FutureSocieties.isActive('FSSlimnessEnthusiast')) { if (isSlim(slave)) { t.push(new SocialEffect("Slimness Enthusiast", 1, `Slim`, `Society <span class="green">approves</span> of ${slave.slaveName}'s graceful, girlish form; ${he} furthers the fashion for slaves like ${him}.`)); @@ -779,7 +779,7 @@ App.SlaveAssignment.saSocialEffects = function(slave) { t.push(new SocialEffect("Slimness Enthusiast", -1, `Big tits/ass`, `Society <span class="red">disapproves</span> of ${slave.slaveName}'s boorishly large ${toSentence(unslim)}; ${he} damages the fashion for slender slaves.`)); } - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (FutureSocieties.isActive('FSAssetExpansionist')) { let assets = 0; if (slave.geneMods.NCS > 0 && (slave.boobs <= 2000 || slave.butt <= 7)) { t.push(new SocialEffect("Asset Expansionist", -2, `NCS Youthening`, @@ -823,7 +823,7 @@ App.SlaveAssignment.saSocialEffects = function(slave) { } } - if (V.arcologies[0].FSPastoralist !== "unset") { + if (FutureSocieties.isActive('FSPastoralist')) { if (slave.lactation > 0) { t.push(new SocialEffect("Pastoralist", 1, `Lactating`, `Society <span class="green">approves</span> of ${slave.slaveName}'s milky udders; the sight of ${his} creamy milk encourages the public taste for dairy straight from the nipple.`)); @@ -834,7 +834,7 @@ App.SlaveAssignment.saSocialEffects = function(slave) { } } - if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (FutureSocieties.isActive('FSPhysicalIdealist')) { if (V.arcologies[0].FSPhysicalIdealistLaw === 1) { if (slave.muscles > 50) { t.push(new SocialEffect("Physical Idealist", 1, `Overmuscled (Fit Feminine)`, @@ -870,7 +870,7 @@ App.SlaveAssignment.saSocialEffects = function(slave) { t.push(new SocialEffect("Physical Idealist", 1, `Healthy`, `Society <span class="green">approves</span> of ${his} health; the expectation that slaves should be kept perfectly healthy grows.`)); } - } else if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + } else if (FutureSocieties.isActive('FSHedonisticDecadence')) { if (slave.weight > 160) { t.push(new SocialEffect("Hedonistic", 3, `Obese`, `Society <span class="green">strongly approves</span> of ${slave.slaveName}'s glorious rolls; everyone wants to own a pillowy slave like ${him}.`)); @@ -902,7 +902,7 @@ App.SlaveAssignment.saSocialEffects = function(slave) { } } - if (V.arcologies[0].FSChattelReligionist !== "unset") { + if (FutureSocieties.isActive('FSChattelReligionist')) { const collar = App.Data.slaveWear.collar.get(slave.collar); if (collar && collar.fs && collar.fs.loves && collar.fs.loves.has("FSChattelReligionist")) { t.push(new SocialEffect("Chattel Religionist", 1, `Punishing collar`, @@ -970,10 +970,10 @@ App.SlaveAssignment.saSocialEffects = function(slave) { if (isShelterSlave(slave)) { if ([Job.CLUB, Job.PUBLIC, Job.WHORE, Job.BROTHEL].includes(slave.assignment)) { if (slave.trust > 20 && slave.health.condition > 40) { - if (V.arcologies[0].FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist')) { t.push(new SocialEffect("Paternalist", 2, "Happy shelter girl", `Society <span class="green">strongly approves</span> of how you've brought a shelter ${girl} health and happiness.`, true)); - } else if (V.arcologies[0].FSDegradationist === "unset") { + } else if (!FutureSocieties.isActive('FSDegradationist')) { t.push(new SocialEffect(null, 1, "Happy shelter girl", `The public knows ${he}'s a shelter ${girl} you took in, and is <span class="green">touched</span> that ${he} now seems happy and healthy.`, true)); } @@ -1113,7 +1113,7 @@ App.SlaveAssignment.saSocialEffects = function(slave) { */ function newForFS(proposedFS) { // make sure the FS is not currently enacted - if (V.arcologies[0][proposedFS] !== "unset") { + if (V.arcologies[0][proposedFS] !== null) { throw new Error(`Cannot test new FS social effects for existing FS ${proposedFS}`); } // temporarily enact the FS at full strength @@ -1121,15 +1121,20 @@ App.SlaveAssignment.saSocialEffects = function(slave) { // see what the slave's social effects would be under the proposed FS const newSocialEffects = [...makeSocialEffects(), ...makeShelterGirlEffects()]; // undo the temporary FS enactment - V.arcologies[0][proposedFS] = "unset"; + V.arcologies[0][proposedFS] = null; // return the differences between the current and new states return _.differenceBy(newSocialEffects, socialEffects, s => s.shortDesc); } + function effects() { + return socialEffects; + } + const socialEffects = [...makeSocialEffects(), ...makeShelterGirlEffects()]; return { report, - newForFS + newForFS, + effects }; }; diff --git a/src/endWeek/saWhore.js b/src/endWeek/saWhore.js index 89bc93980aab1e3160c9025647f91c71a5806d27..a0b417a382e745d26e8a667c65b4a1cf448d45d8 100644 --- a/src/endWeek/saWhore.js +++ b/src/endWeek/saWhore.js @@ -22,6 +22,7 @@ App.SlaveAssignment.whore = function(slave) { let penetrativeUse; const arcology = V.arcologies[0]; + const arcologyInfo = new App.Utils.Arcology(arcology); const incomeStats = gatherStatistics(slave); @@ -270,7 +271,7 @@ App.SlaveAssignment.whore = function(slave) { * @param {App.Entity.SlaveState} slave */ function comingOfAge(slave) { - if (slave.physicalAge === V.minimumSlaveAge && slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcology.FSRepopulationFocus !== "unset" || arcology.FSGenderFundamentalist !== "unset") && arcology.FSRestart === "unset") { + if (slave.physicalAge === V.minimumSlaveAge && slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcologyInfo.fsActive('FSRepopulationFocus') || arcologyInfo.fsActive('FSGenderFundamentalist')) && !arcologyInfo.fsActive('FSRestart')) { if (slave.birthWeek === 0) { r += ` ${He} just turned ${V.minimumSlaveAge} this week, giving ${him} an immense boost to both popularity and price. ${He} is also expected to become fertile soon, giving ${him} an additional boost as customers clamor to claim ${his} fresh womb.`; } else if (slave.birthWeek < 4) { @@ -282,7 +283,7 @@ App.SlaveAssignment.whore = function(slave) { } else if (slave.birthWeek < 4) { r += ` This is still the first month in which it's legal to pay to fuck ${him}, giving ${him} a boost to both popularity and price.`; } - } else if (slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcology.FSRepopulationFocus !== "unset" || arcology.FSGenderFundamentalist !== "unset")) { + } else if (slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcologyInfo.fsActive('FSRepopulationFocus') || arcologyInfo.fsActive('FSGenderFundamentalist'))) { if (slave.birthWeek === 0) { r += ` ${He} is expected to become fertile soon, giving ${him} an immense boost to both popularity and price as citizens clamor to claim ${his} fresh womb.`; } else if (slave.birthWeek < 4) { @@ -699,7 +700,7 @@ App.SlaveAssignment.whore = function(slave) { } if (canTalk(slave)) { - if (arcology.FSSlaveProfessionalism !== "unset" && slave.accent > 1) { + if (arcologyInfo.fsActive('FSSlaveProfessionalism') && slave.accent > 1) { r += ` ${His} butchery of the local tongue drives away potential customers.`; } else if (slave.voice > 2) { if (slave.voiceImplant > 0) { @@ -754,7 +755,7 @@ App.SlaveAssignment.whore = function(slave) { } if (slave.butt > 4 && slave.boobs > 800) { - if (arcology.FSAssetExpansionist !== "unset") { + if (arcologyInfo.fsActive('FSAssetExpansionist')) { r += ` ${He} makes a river of ¤ with ${his} huge, fashionable assets.`; if (canTalk(slave)) { if (slave.voice > 2) { @@ -766,20 +767,20 @@ App.SlaveAssignment.whore = function(slave) { } else { r += ` ${He} receives extra ¤ for having huge assets.`; } - if (arcology.FSGenderRadicalist !== "unset") { + if (arcologyInfo.fsActive('FSGenderRadicalist')) { if (slave.dick > 0) { r += ` Society's appetite for stacked whores with dicks makes ${him} especially profitable.`; } } } - if (arcology.FSPetiteAdmiration !== "unset") { + if (arcologyInfo.fsActive('FSPetiteAdmiration')) { if (heightPass(slave)) { r += ` ${His} adorably petite stature attracts additional customers.`; } else if (slave.height >= 170) { r += ` ${His} tall stature turns off potential costumers.`; } - } else if (arcology.FSStatuesqueGlorification !== "unset") { + } else if (arcologyInfo.fsActive('FSStatuesqueGlorification')) { if (heightPass(slave)) { r += ` ${His} gloriously tall stature attracts additional customers.`; } else { @@ -788,15 +789,15 @@ App.SlaveAssignment.whore = function(slave) { } if (slave.visualAge >= 30) { - if (arcology.FSMaturityPreferentialist !== "unset") { + if (arcologyInfo.fsActive('FSMaturityPreferentialist')) { r += ` ${His} mature body is very fashionable.`; - } else if (arcology.FSYouthPreferentialist !== "unset") { + } else if (arcologyInfo.fsActive('FSYouthPreferentialist')) { r += ` ${His} old body is badly out of fashion.`; } } else { - if (arcology.FSYouthPreferentialist !== "unset") { + if (arcologyInfo.fsActive('FSYouthPreferentialist')) { r += ` ${His} youthful body is very fashionable.`; - } else if (arcology.FSMaturityPreferentialist !== "unset") { + } else if (arcologyInfo.fsActive('FSMaturityPreferentialist')) { r += ` ${His} young body is out of fashion.`; } } @@ -808,7 +809,7 @@ App.SlaveAssignment.whore = function(slave) { if (arcology.FSGenderFundamentalistLawBeauty + arcology.FSGenderRadicalistLawBeauty > 0) { if (genderLawPass(slave) === 1) { - if (arcology.FSAssetExpansionist !== "unset") { + if (arcologyInfo.fsActive('FSAssetExpansionist')) { r += ` ${He} makes extra ¤ due to ${his} fashionably feminine body.`; } else { r += ` ${He} receives extra ¤ for having a sleek, girlish figure.`; @@ -833,7 +834,7 @@ App.SlaveAssignment.whore = function(slave) { } } else { if (slave.boobs < 500 && slave.butt < 3) { - if (slave.muscles <= 30 && arcology.FSPhysicalIdealist === "unset" && slave.weight <= 10 && arcology.FSHedonisticDecadence === "unset") { + if (slave.muscles <= 30 && !arcologyInfo.fsActive('FSPhysicalIdealist') && slave.weight <= 10 && !arcologyInfo.fsActive('FSHedonisticDecadence')) { if (arcology.FSSlimnessEnthusiast > 20) { r += ` ${He} makes extra ¤ due to ${his} fashionably sleek little body.`; } else { @@ -842,7 +843,7 @@ App.SlaveAssignment.whore = function(slave) { if (canTalk(slave) && slave.voice > 2) { r += ` ${His} high voice contributes to ${his} girlish image, so ${he} does even better.`; } - } else if (arcology.FSPhysicalIdealist !== "unset") { // no muscle malus for muscle loving societies + } else if (arcologyInfo.fsActive('FSPhysicalIdealist')) { // no muscle malus for muscle loving societies if ((arcology.FSPhysicalIdealistStrongFat === 1 && slave.weight <= 30) || slave.weight <= 10) { // reduced weight malus for fat loving societies if (arcology.FSSlimnessEnthusiast > 20) { r += ` ${He} makes extra ¤ due to ${his} fashionably sleek little body.`; @@ -853,7 +854,7 @@ App.SlaveAssignment.whore = function(slave) { r += ` ${His} high voice contributes to ${his} girlish image, so ${he} does even better.`; } } - } else if (arcology.FSHedonisticDecadence !== "unset" && slave.weight <= 30) { // reduced weight malus for fat loving societies + } else if (arcologyInfo.fsActive('FSHedonisticDecadence') && slave.weight <= 30) { // reduced weight malus for fat loving societies if (arcology.FSHedonisticDecadenceStrongFat === 1 || slave.muscles <= 30) { // no muscle malus for muscle loving societies if (arcology.FSSlimnessEnthusiast > 20) { r += ` ${He} makes extra ¤ due to ${his} fashionably sleek little body.`; @@ -875,7 +876,7 @@ App.SlaveAssignment.whore = function(slave) { } if (slave.boobsImplant === 0 && slave.buttImplant === 0 && slave.waist >= -95 && slave.bellyImplant === -1 && slave.lipsImplant === 0 && slave.faceImplant < 30) { - if (arcology.FSBodyPurist !== "unset") { + if (arcologyInfo.fsActive('FSBodyPurist')) { r += ` With ${his} all-natural, implant free appearance, ${he}'s very profitable.`; } else if (arcology.FSTransformationFetishist >= 20) { r += ` Customers are disappointed by ${his} all-natural, implant free appearance.`; @@ -883,13 +884,13 @@ App.SlaveAssignment.whore = function(slave) { r += ` Some discerning customers appreciate ${his} all-natural, implant free appearance.`; } } else { - if (arcology.FSTransformationFetishist !== "unset") { + if (arcologyInfo.fsActive('FSTransformationFetishist')) { r += ` The public is willing to pay more for ${his} augmented body.`; } } if (slave.nipples === "fuckable") { - if (arcology.FSTransformationFetishist !== "unset") { + if (arcologyInfo.fsActive('FSTransformationFetishist')) { r += ` ${His} fuckable nipples give ${him} a profitable edge over those without such body modifications.`; } else { r += ` ${His} fuckable nipples entice some of the more adventurous customers.`; @@ -921,7 +922,7 @@ App.SlaveAssignment.whore = function(slave) { } if (slave.dick !== 0) { - if (arcology.FSGenderRadicalist === "unset") { + if (!arcologyInfo.fsActive('FSGenderRadicalist')) { r += ` ${He} sees fewer customers because many prefer whores without cocks.`; } else if (arcology.FSGenderRadicalist < 50) { r += ` ${His} cock entices some customers and disappoints others; it has little effect on ${his} popularity.`; @@ -931,7 +932,7 @@ App.SlaveAssignment.whore = function(slave) { } if (slave.muscles > 95) { - if (arcology.FSPhysicalIdealist !== "unset") { + if (arcologyInfo.fsActive('FSPhysicalIdealist')) { r += ` In the new culture of ${arcology.name} ${his} muscles make ${him} a very profitable whore.`; } else { r += ` ${His} muscles scare off some customers, but some pay well to enjoy a muscular whore.`; @@ -950,7 +951,7 @@ App.SlaveAssignment.whore = function(slave) { } if (slave.bellyPreg >= 1500 || App.Data.misc.fakeBellies.includes(slave.bellyAccessory) || slave.bellyImplant >= 1500) { - if (arcology.FSRepopulationFocus !== "unset") { + if (arcologyInfo.fsActive('FSRepopulationFocus')) { r += ` In the new culture of ${arcology.name}, ${his} pregnancy makes ${him} a profitable whore`; if (App.Data.misc.fakeBellies.includes(slave.bellyAccessory) || slave.bellyImplant >= 1500) { r += `, even if it's not real`; @@ -958,13 +959,13 @@ App.SlaveAssignment.whore = function(slave) { r += `.`; } else if (arcology.FSRepopulationFocusPregPolicy === 1 && slave.bellyPreg >= 1500) { r += ` It's currently trendy to plow a whore laden with child, a role ${he} fits perfectly.`; - } else if (arcology.FSRestart !== "unset") { + } else if (arcologyInfo.fsActive('FSRestart')) { r += ` In the new culture of ${arcology.name}, ${his}`; if (App.Data.misc.fakeBellies.includes(slave.bellyAccessory) || slave.bellyImplant >= 1500) { r += ` apparent`; } r += ` pregnancy is a massive turn off to potential customers.`; - } else if (arcology.FSGenderFundamentalist !== "unset") { + } else if (arcologyInfo.fsActive('FSGenderFundamentalist')) { r += ` The new respect for traditional gender roles has given many citizens a taste for pregnant whores`; if (App.Data.misc.fakeBellies.includes(slave.bellyAccessory) || slave.bellyImplant >= 1500) { r += `, even if they only look pregnant`; @@ -984,33 +985,33 @@ App.SlaveAssignment.whore = function(slave) { r += ` Many customers prefer white ${girl}s like ${slave.slaveName}.`; } } - if (arcology.FSSupremacist !== "unset") { + if (arcologyInfo.fsActive('FSSupremacist')) { if (slave.race !== arcology.FSSupremacistRace) { r += ` Some citizens fetishize whores of the servile races.`; } } - if (arcology.FSSubjugationist !== "unset") { + if (arcologyInfo.fsActive('FSSubjugationist')) { if (slave.race === arcology.FSSubjugationistRace) { r += ` Many prefer to use and abuse whores of the proper slave race.`; } } - if (arcology.FSEdoRevivalist !== "unset") { + if (arcologyInfo.fsActive('FSEdoRevivalist')) { if (slave.nationality === "Japanese" || slave.nationality === "Edo Revivalist") { r += ` As a proper Japanese ${girl}, ${he} is considered extremely desirable.`; } - } else if (arcology.FSChineseRevivalist !== "unset") { + } else if (arcologyInfo.fsActive('FSChineseRevivalist')) { if (slave.nationality === "Chinese" || slave.nationality === "Ancient Chinese Revivalist") { r += ` As a proper Chinese ${girl}, ${he} is considered extremely desirable.`; } } - if (arcology.FSSlaveProfessionalism !== "unset") { + if (arcologyInfo.fsActive('FSSlaveProfessionalism')) { if (slave.intelligence + slave.intelligenceImplant > 50) { r += ` ${His} intelligence satisfies customers looking for more than just a hole to fuck.`; } else if (slave.intelligence + slave.intelligenceImplant < -10) { r += ` ${His} stupidity aggravates customers looking for more than just a hole to fuck.`; } - } else if (arcology.FSIntellectualDependency !== "unset") { + } else if (arcologyInfo.fsActive('FSIntellectualDependency')) { if (slave.intelligence + slave.intelligenceImplant > 10) { r += ` ${His} intellectual baggage annoys customers looking for a simple fuck.`; } else if (slave.intelligence + slave.intelligenceImplant < -50) { diff --git a/src/endWeek/sexualServices.js b/src/endWeek/sexualServices.js index 8a7487700d495a49911bb6fdad406a6abe3d0e3e..860c228220be79e593d8cfa8b3512d71d484e2ca 100644 --- a/src/endWeek/sexualServices.js +++ b/src/endWeek/sexualServices.js @@ -50,7 +50,7 @@ App.EndWeek.computeSexualServicesModel = function(renderContainer) { let arcadeDemand = 0; let arcadeDemandDeg = 0; // Arcade Specific Demand for Degradationists to give it higher priority - if (arcology.FSDegradationist !== "unset" && arcology.FSDegradationist > 0) { + if (arcology.FSDegradationist > 0) { lowerClassArcadeSexDemand = Math.trunc(lowerClassSexDemand * arcology.FSDegradationist * 0.0015); middleClassArcadeSexDemand = Math.trunc(middleClassSexDemand * arcology.FSDegradationist * 0.0002); upperClassArcadeSexDemand = Math.trunc(upperClassSexDemand * arcology.FSDegradationist * 0.000025); @@ -137,7 +137,7 @@ App.EndWeek.computeSexualServicesModel = function(renderContainer) { } // Price for sex in the arcade or at a glory hole - if (arcology.FSPaternalist !== "unset" && arcology.FSPaternalist > 0) { + if (arcology.FSPaternalist > 0) { arcadeDemand = Math.max((arcadeDemandDeg + lowerClassSexDemand) * (1 - arcology.FSPaternalist / 50), 0); // Paternalists sap demand for the arcade } else { arcadeDemand = arcadeDemandDeg + lowerClassSexDemand; diff --git a/src/events/Elites/eliteTakeOver.js b/src/events/Elites/eliteTakeOver.js index 616d0c05641dcffc4cf1b0d2e3d636b4f0172865..544490c32b69372f99451071898a5b4f9bb7feff 100644 --- a/src/events/Elites/eliteTakeOver.js +++ b/src/events/Elites/eliteTakeOver.js @@ -1,7 +1,7 @@ App.Events.eliteTakeOver = class eliteTakeOver extends App.Events.BaseEvent { eventPrerequisites() { return [ - () => V.arcologies[0].FSRestart !== "unset", + () => FutureSocieties.isActive('FSRestart'), () => V.failedElite > 300, () => V.eugenicsFullControl !== 1 ]; @@ -598,7 +598,7 @@ App.Events.eliteTakeOver = class eliteTakeOver extends App.Events.BaseEvent { } V.SF.Depravity += 0.05; } else if (eliteLeft <= 9 && V.rep >= 10000) { - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { r.push(`An evil smile appears on the faces of your loyal citizens, while the surviving Elite freeze in terror. The impromptu festivity will go on for hours, getting more and more depraved.`); } else { r.push(`While some citizens respectfully step out, some join you in the fun. The impromptu festivities will go on for hours, getting more and more depraved.`); diff --git a/src/events/PE/UnderageConcubine.js b/src/events/PE/UnderageConcubine.js index 1053fecebeb80f4cfdce3958e8ae2eca0fe4ba30..152ab3552790e0691460469e9fff35e75b07e84c 100644 --- a/src/events/PE/UnderageConcubine.js +++ b/src/events/PE/UnderageConcubine.js @@ -5,7 +5,7 @@ App.Events.PEUnderageConcubine = class PEUnderageConcubine extends App.Events.Ba () => V.minimumSlaveAge < 18, // underage content visible () => V.PC.visualAge > 18, // underage PC is a totally different controversy () => !!S.Concubine, // must have concubine - () => V.arcologies[0].FSMaturityPreferentialist === "unset" // failure should not benefit the player + () => !FutureSocieties.isActive('FSMaturityPreferentialist') // failure should not benefit the player ]; } @@ -81,13 +81,13 @@ App.Events.PEUnderageConcubine = class PEUnderageConcubine extends App.Events.Ba function arcologyGoesMature() { const vulnerableArcologies = V.arcologies.filter((arc) => arc.direction !== 0 && arc.government !== "your agent" && arc.government !== "your trustees" && arc.rival !== 1); - let arcology = vulnerableArcologies.find((arc) => arc.FSYouthPreferentialist !== "unset"); // if there's a YP arcology, we'll replace it with MP for maximum effect + let arcology = vulnerableArcologies.find((arc) => FutureSocieties.isActive('FSYouthPreferentialist', arc)); // if there's a YP arcology, we'll replace it with MP for maximum effect if (!arcology) { arcology = vulnerableArcologies.find((arc) => FutureSocieties.activeCount(arc) < V.FSCreditCount); // adopt another FS prematurely...hopefully doesn't cause problems } if (arcology) { - arcology.FSYouthPreferentialist = "unset"; - if (arcology.FSMaturityPreferentialist === "unset" || arcology.FSMaturityPreferentialist < 60) { + arcology.FSYouthPreferentialist = null; + if (arcology.FSMaturityPreferentialist < 60) { arcology.FSMaturityPreferentialist = 60; // entrench somewhat } } diff --git a/src/events/PE/concubineInterview.js b/src/events/PE/concubineInterview.js index a423a8bc3b4e394ffe62390624108dbc82f62f2f..bff35a71623770c467d35ee35452a35b5a64da79 100644 --- a/src/events/PE/concubineInterview.js +++ b/src/events/PE/concubineInterview.js @@ -433,7 +433,7 @@ App.Events.PEConcubineInterview = class PEConcubineInterview extends App.Events. t.push(speak(`lots of bellies of all sizes,`)); } - if (arcology.FSBodyPurist === "unset") { + if (!FutureSocieties.isActive('FSBodyPurist', arcology)) { t.push(speak(`gorgeous tattoos and piercings,`)); } else if (arcology.FSTransformationFetishist > 0) { t.push(speak(`new assets every day,`)); @@ -516,9 +516,9 @@ App.Events.PEConcubineInterview = class PEConcubineInterview extends App.Events. t.push(speak(`incest,`)); } - if (arcology.FSSlimnessEnthusiast === "unset") { + if (!FutureSocieties.isActive('FSSlimnessEnthusiast', arcology)) { t.push(speak(`huge breasts and plush asses,`)); - } else if (arcology.FSAssetExpansionist === "unset") { + } else if (!FutureSocieties.isActive('FSAssetExpansionist', arcology)) { t.push(speak(`pert tits and cute butts,`)); } diff --git a/src/events/PE/peHeadgirlConcubine.js b/src/events/PE/peHeadgirlConcubine.js index 2953641ca85c86356db351f3b234cb6238d72749..b9606f8717316be0729ad73677529075b8644829 100644 --- a/src/events/PE/peHeadgirlConcubine.js +++ b/src/events/PE/peHeadgirlConcubine.js @@ -354,7 +354,7 @@ App.Events.PEHeadgirlConcubine = class PEHeadgirlConcubine extends App.Events.Ba r.push(`lovers`); } r.push(`in your`); - if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (FutureSocieties.isActive('FSPhysicalIdealist')) { r.push(`powerful arms.`); } else if (V.PC.title === 1) { r.push(`dominant grip.`); diff --git a/src/events/RE/reAWOL.js b/src/events/RE/reAWOL.js index b4974b09ae2fd26be12df0172218befde16b964d..19c1d22563f4d562c4efa38f4b10ec7d0deb3a77 100644 --- a/src/events/RE/reAWOL.js +++ b/src/events/RE/reAWOL.js @@ -167,7 +167,7 @@ App.Events.REAWOL = class REAWOL extends App.Events.BaseEvent { function enslave() { let r = []; - r.push(`Despite the trouble ${he} has caused you, you manage to complete the legalities and biometric scanning quickly and without incident. Of course, this is in large part due to the fact that the would-be mutineer is of course restrained. Based on the accounts of ${his} captors and the numerous injuries evident amongst them, ${he} is likely to be violent when ${he} is finally released.`); + r.push(`Despite the trouble ${he} has caused you, you manage to complete the legalities and biometric scanning quickly and without incident. Of course, this is in large part due to the fact that the would-be mutineer is thoroughly restrained. Based on the accounts of ${his} captors and the numerous injuries evident amongst them, ${he} is likely to be violent when ${he} is finally released.`); r.push(App.UI.newSlaveIntro(slave)); return r; } diff --git a/src/events/RE/reCitizenHookup.js b/src/events/RE/reCitizenHookup.js index 53b73a42a9003800ac9b64c99c140feb3d86537b..a8ac8a65e21c97f8f27e43d67669a99b624497c1 100644 --- a/src/events/RE/reCitizenHookup.js +++ b/src/events/RE/reCitizenHookup.js @@ -17,9 +17,9 @@ App.Events.RECitizenHookup = class RECitizenHookup extends App.Events.BaseEvent App.Events.addParagraph(node, r); r = []; r.push(`But tonight, you've put in an appearance. Your citizens are drinking your`); - if (V.arcologies[0].FSPastoralist !== "unset") { + if (FutureSocieties.isActive('FSPastoralist')) { r.push(`milk`); - } else if (V.arcologies[0].FSRestart !== "unset") { + } else if (FutureSocieties.isActive('FSRestart')) { r.push(`finest alcohol`); } else { r.push(`alcohol`); diff --git a/src/events/RE/reFSNonconformist.js b/src/events/RE/reFSNonconformist.js index fd1bbb7fc7fbf87794ba5a07f5f2a337f095d962..1b9eeb1b2696dc6de62668759dff7a64b9f536ff 100644 --- a/src/events/RE/reFSNonconformist.js +++ b/src/events/RE/reFSNonconformist.js @@ -21,7 +21,7 @@ App.Events.REFSNonconformist = class REFSNonconformist extends App.Events.BaseEv /** @type {FC.FutureSocietyAdj} */ const FSNonconformist = App.Data.FutureSociety.records[this.getNonconformistFS()].adj; - if (V.arcologies[0].FSRestart !== "unset") { + if (FutureSocieties.isActive('FSRestart')) { r.push(`A group of the Societal Elite arrives at your penthouse and is quickly ushered into your office. They're among the best members of the society you're building, uniformly wealthy, influential, and deeply`); } else { r.push(`A deputation of your citizens arrives at your penthouse and asks to see you. They're among the best members of the society you're building, uniformly wealthy, influential, and deeply`); @@ -89,7 +89,7 @@ App.Events.REFSNonconformist = class REFSNonconformist extends App.Events.BaseEv } else { throw Error(`FS "${FSNonconformist}" not found `); } - if (V.arcologies[0].FSRestart !== "unset") { + if (FutureSocieties.isActive('FSRestart')) { r.push(`so you hear them out. Apparently, they're here about a peer, another member of the Elite, who has chosen to perform certain undesirable actions. ${capFirstChar(V.assistant.name)} helpfully supplies a biography, but you were previously aware of the situation.`); } else { r.push(`so you hear them out. Apparently, they're here about a peer, a fellow citizen with money and power who does not support your vision for the arcology's future. ${capFirstChar(V.assistant.name)} helpfully supplies a biography, but you were previously aware of the situation.`); @@ -166,7 +166,7 @@ App.Events.REFSNonconformist = class REFSNonconformist extends App.Events.BaseEv } else { throw Error(`FS "${FSNonconformist}" not found `); } - if (V.arcologies[0].FSRestart !== "unset") { + if (FutureSocieties.isActive('FSRestart')) { r.push(`Faced with such a threat, the Elite naturally came to you. They ask you, as leader of the arcology, to both cover up the event and deal with the disgraced Elite.`); } else { r.push(`Faced with such a threat, the citizens naturally came to you. They ask you, as leader of the arcology, to both prevent the plan and get the nonconformist to move out.`); @@ -327,7 +327,7 @@ App.Events.REFSNonconformist = class REFSNonconformist extends App.Events.BaseEv const frag = new DocumentFragment(); let r = []; cashX(-10000, "event"); - if (V.arcologies[0].FSRestart !== "unset") { + if (FutureSocieties.isActive('FSRestart')) { r.push(`You promise to deal with the situation. The Societal Elite trust you to not fail, and they are not disappointed. The fallen Elite`); } else { r.push(`You promise to deal with the situation. The prominent citizens trust you enough to leave the problem in your hands, and they are not disappointed. The nonconformist`); diff --git a/src/events/RE/reMaleCitizenHookup.js b/src/events/RE/reMaleCitizenHookup.js index 0b977873269d56b0a5ca878af7118385aba2d53f..78c58e0c680e31f5b600f7e37bc9fa4c03a08697 100644 --- a/src/events/RE/reMaleCitizenHookup.js +++ b/src/events/RE/reMaleCitizenHookup.js @@ -22,9 +22,9 @@ App.Events.REMaleCitizenHookup = class REMaleCitizenHookup extends App.Events.Ba App.Events.addParagraph(node, r); r = []; r.push(`But tonight, you've put in an appearance. Your citizens are drinking your`); - if (V.arcologies[0].FSPastoralist !== "unset") { + if (FutureSocieties.isActive('FSPastoralist')) { r.push(`milk`); - } else if (V.arcologies[0].FSRestart !== "unset") { + } else if (FutureSocieties.isActive('FSRestart')) { r.push(`finest alcohol`); } else { r.push(`alcohol`); diff --git a/src/events/RE/reMalefactor.js b/src/events/RE/reMalefactor.js index 46866b331714d8833acaf11b52dffbdac28d8d9a..99e30bc54c62f782f48e1db3613e3ad34744157d 100644 --- a/src/events/RE/reMalefactor.js +++ b/src/events/RE/reMalefactor.js @@ -482,7 +482,7 @@ App.Events.REMalefactor = class REMalefactor extends App.Events.BaseEvent { cashX(forceNeg(contractCost), "slaveTransfer", slave); r.push(`You sit down and talk to the exhausted ${girl}, handing ${him} a contract cleverly altered to resemble adoption papers. Once ${he} comprehends what ${he} is looking at, ${he} eagerly signs it. Only once ${he} has reached the penthouse and been introduced to the slave life does ${he} realize ${he} willingly signed away ${his} freedom. Though ${he} can't complain. A warm cot and plenty of food await, which to ${him} is a huge improvement over a slow death on the streets. The public`); - if (V.arcologies[0].FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist')) { r.push(`<span class="reputation inc">is impressed by your act,</span> even if it is a trick.`); repX(500, "event", slave); } else { @@ -510,17 +510,17 @@ App.Events.REMalefactor = class REMalefactor extends App.Events.BaseEvent { r.push(`youth`); } r.push(`will be a boon to`); - if (V.arcologies[0].FSRepopulationFocus !== "unset") { + if (FutureSocieties.isActive('FSRepopulationFocus')) { r.push(`Repopulationism,`); } else { r.push(`society,`); } r.push(`and that the contract ${he} is signing mandates ${he} be on powerful fertility agents whenever ${he} isn't pregnant. During ${his} residency, free or not, ${he} will provide society with dozens of future children. The public`); - if (V.arcologies[0].FSRepopulationFocus !== "unset") { + if (FutureSocieties.isActive('FSRepopulationFocus')) { r.push(`<span class="reputation inc">approves of breeders, free or not,</span> and word spreads that any and all mothers are welcome into your arcology <span class="green">adding to its prosperity.</span>`); repX(500, "event", slave); V.arcologies[0].prosperity += 5; - } else if (V.arcologies[0].FSPaternalist !== "unset") { + } else if (FutureSocieties.isActive('FSPaternalist')) { r.push(`<span class="reputation inc">sympathizes with your charity.</span>`); repX(100, "event", slave); } else { diff --git a/src/events/RE/reNickname.js b/src/events/RE/reNickname.js index 71799366ead4e1237b75c552f3ab117fac7035ad..10bc7a2909b76019c833ad377278555d078ae8f2 100644 --- a/src/events/RE/reNickname.js +++ b/src/events/RE/reNickname.js @@ -1196,7 +1196,7 @@ App.Events.RENickname = class RENickname extends App.Events.BaseEvent { notApplyDesc: `understands that what matters is not what ${he} did yesterday, or how much they liked it, but what ${he} does today, and how much they like it.`, }); } - if (slave.breedingMark === 1 && V.propOutcome === 1 && V.arcologies[0].FSRestart !== "unset") { + if (slave.breedingMark === 1 && V.propOutcome === 1 && FutureSocieties.isActive('FSRestart')) { nickMap.set("mark", { nicknameArray: ["Ass Kisser", "Breeder", "Chosen", "Conceited", "Connections", "Elite Breeder", "Elite", "Elitist", "Eugenicist", "Favors", "High and Mighty", "Lucky", "Mark", "Marked", "Nepotist", "Pedigree", "Privileged", "Special"], situationDesc: `is an Elite Breeder. ${He} has permanently been marked as the mother of society's children. If ${he} isn't currently swelling with life, ${he} will be soon. However, ${he} is also granted special benefits befitting the mother of future generations of gifted children.`, diff --git a/src/events/RE/rePregInventorFCTV.js b/src/events/RE/rePregInventorFCTV.js index 3b7cd8c56c9e1f730faddca1d3ef8c420c4a3518..6853f614844d314f8aa9ad6b9cf15a832c9a373b 100644 --- a/src/events/RE/rePregInventorFCTV.js +++ b/src/events/RE/rePregInventorFCTV.js @@ -83,11 +83,7 @@ App.Events.rePregInventorFCTV = class rePregInventorFCTV extends App.Events.Base repX(10000, "event"); V.pregInventions = 2; for (const arc of V.arcologies) { - if (arc.FSRepopulationFocus !== "unset") { - arc.FSRepopulationFocus += 10; - } else if (arc.FSRestart !== "unset") { - arc.FSRestart -= 20; - } + if (!FutureSocieties.advance('FSRepopulationFocus', 10, arc)) { FutureSocieties.advance('FSRestart', -20, arc); } } addTrinket(`a cut out magazine cover of your renowned hyperbroodmother inventor, ${slave.slaveName}, and ${his} myriad toys`); App.Events.addParagraph(frag, r); @@ -114,11 +110,7 @@ App.Events.rePregInventorFCTV = class rePregInventorFCTV extends App.Events.Base repX(10000, "event"); V.pregInventions = 2; for (const arc of V.arcologies) { - if (arc.FSRepopulationFocus !== "unset") { - arc.FSRepopulationFocus += 10; - } else if (arc.FSRestart !== "unset") { - arc.FSRestart -= 20; - } + if (!FutureSocieties.advance('FSRepopulationFocus', 10, arc)) { FutureSocieties.advance('FSRestart', -20, arc); } } addTrinket(`a cut out magazine cover of your renowned hyperbroodmother inventor, ${slave.slaveName}, and ${his} myriad toys`); @@ -155,11 +147,7 @@ App.Events.rePregInventorFCTV = class rePregInventorFCTV extends App.Events.Base repX(25000, "event"); V.pregInventions = 3; for (const arc of V.arcologies) { - if (arc.FSRepopulationFocus !== "unset") { - arc.FSRepopulationFocus += 30; - } else if (arc.FSRestart !== "unset") { - arc.FSRestart -= 60; - } + if (!FutureSocieties.advance('FSRepopulationFocus', 30, arc)) { FutureSocieties.advance('FSRestart', -60, arc); } } addTrinket(`a cut out magazine cover of your world-renowned hyperbroodmother inventor, ${slave.slaveName}, and ${his} myriad toys`); } else if (slave.porn.prestige >= 3 && random(1, 100) > 30) { @@ -171,11 +159,7 @@ App.Events.rePregInventorFCTV = class rePregInventorFCTV extends App.Events.Base repX(10000, "event"); V.pregInventions = 2; for (const arc of V.arcologies) { - if (arc.FSRepopulationFocus !== "unset") { - arc.FSRepopulationFocus += 10; - } else if (arc.FSRestart !== "unset") { - arc.FSRestart -= 20; - } + if (!FutureSocieties.advance('FSRepopulationFocus', 10, arc)) { FutureSocieties.advance('FSRestart', -20, arc); } } addTrinket(`a cut out magazine cover of your renowned hyperbroodmother inventor, ${slave.slaveName}, and ${his} myriad toys`); } else if (slave.porn.prestige >= 3 && random(1, 100) > 15) { @@ -186,21 +170,13 @@ App.Events.rePregInventorFCTV = class rePregInventorFCTV extends App.Events.Base } repX(2500, "event"); for (const arc of V.arcologies) { - if (arc.FSRepopulationFocus !== "unset") { - arc.FSRepopulationFocus += 5; - } else if (arc.FSRestart !== "unset") { - arc.FSRestart -= 10; - } + if (!FutureSocieties.advance('FSRepopulationFocus', 5, arc)) { FutureSocieties.advance('FSRestart', -10, arc); } } } else if (slave.porn.prestige >= 3) { r.push(`You turn your FCTV screen off disappointed that your slave has done a mediocre job. Over the course of the next several weeks, it becomes clear that <span class="reputation inc">what little impact</span> ${he} has had is on a local scale only.`); repX(500, "event"); for (const arc of V.arcologies) { - if (arc.FSRepopulationFocus !== "unset") { - arc.FSRepopulationFocus += 5; - } else if (arc.FSRestart !== "unset") { - arc.FSRestart -= 10; - } + if (!FutureSocieties.advance('FSRepopulationFocus', 5, arc)) { FutureSocieties.advance('FSRestart', -10, arc); } } } else if (slave.porn.prestige >= 2 && random(1, 100) > 75) { r.push(`You turn your FCTV screen off satisfied that your slave has just finished a job very well done. Over the course of the next several weeks, it becomes clear that ${slave.slaveName}'s appearance on "Husbandry With Milly" has had <span class="reputation inc">world-changing</span> consequences.`); @@ -211,11 +187,7 @@ App.Events.rePregInventorFCTV = class rePregInventorFCTV extends App.Events.Base repX(25000, "event"); V.pregInventions = 3; for (const arc of V.arcologies) { - if (arc.FSRepopulationFocus !== "unset") { - arc.FSRepopulationFocus += 30; - } else if (arc.FSRestart !== "unset") { - arc.FSRestart -= 60; - } + if (!FutureSocieties.advance('FSRepopulationFocus', 30, arc)) { FutureSocieties.advance('FSRestart', -60, arc); } } addTrinket(`a cut out magazine cover of your world-renowned hyperbroodmother inventor, ${slave.slaveName}, and ${his} myriad toys`); } else if (slave.porn.prestige >= 2 && random(1, 100) > 50) { @@ -227,11 +199,7 @@ App.Events.rePregInventorFCTV = class rePregInventorFCTV extends App.Events.Base repX(10000, "event"); V.pregInventions = 2; for (const arc of V.arcologies) { - if (arc.FSRepopulationFocus !== "unset") { - arc.FSRepopulationFocus += 10; - } else if (arc.FSRestart !== "unset") { - arc.FSRestart -= 20; - } + if (!FutureSocieties.advance('FSRepopulationFocus', 10, arc)) { FutureSocieties.advance('FSRestart', -20, arc); } } addTrinket(`a cut out magazine cover of your renowned hyperbroodmother inventor, ${slave.slaveName}, and ${his} myriad toys`); } else if (slave.porn.prestige >= 2 && random(1, 100) > 30) { @@ -242,21 +210,13 @@ App.Events.rePregInventorFCTV = class rePregInventorFCTV extends App.Events.Base } repX(2500, "event"); for (const arc of V.arcologies) { - if (arc.FSRepopulationFocus !== "unset") { - arc.FSRepopulationFocus += 5; - } else if (arc.FSRestart !== "unset") { - arc.FSRestart -= 10; - } + if (!FutureSocieties.advance('FSRepopulationFocus', 5, arc)) { FutureSocieties.advance('FSRestart', -10, arc); } } } else if (slave.porn.prestige >= 2) { r.push(`You turn your FCTV screen off disappointed that your slave has done a mediocre job. Over the course of the next several weeks, it becomes clear that <span class="reputation inc">what little impact</span> ${he} has had is on a local scale only.`); repX(500, "event"); for (const arc of V.arcologies) { - if (arc.FSRepopulationFocus !== "unset") { - arc.FSRepopulationFocus += 5; - } else if (arc.FSRestart !== "unset") { - arc.FSRestart -= 10; - } + if (!FutureSocieties.advance('FSRepopulationFocus', 5, arc)) { FutureSocieties.advance('FSRestart', -10, arc); } } } else if (random(1, 100) > 90) { r.push(`You turn your FCTV screen off satisfied that your slave has just finished a job very well done. Over the course of the next several weeks, it becomes clear that ${slave.slaveName}'s appearance on "Husbandry With Milly" has had <span class="reputation inc">world-changing</span> consequences.`); @@ -267,11 +227,7 @@ App.Events.rePregInventorFCTV = class rePregInventorFCTV extends App.Events.Base repX(25000, "event"); V.pregInventions = 3; for (const arc of V.arcologies) { - if (arc.FSRepopulationFocus !== "unset") { - arc.FSRepopulationFocus += 30; - } else if (arc.FSRestart !== "unset") { - arc.FSRestart -= 60; - } + if (!FutureSocieties.advance('FSRepopulationFocus', 30, arc)) { FutureSocieties.advance('FSRestart', -60, arc); } } addTrinket(`a cut out magazine cover of your world-renowned hyperbroodmother inventor, ${slave.slaveName}, and ${his} myriad toys`); } else if (random(1, 100) > 70) { @@ -283,11 +239,7 @@ App.Events.rePregInventorFCTV = class rePregInventorFCTV extends App.Events.Base repX(10000, "event"); V.pregInventions = 2; for (const arc of V.arcologies) { - if (arc.FSRepopulationFocus !== "unset") { - arc.FSRepopulationFocus += 10; - } else if (arc.FSRestart !== "unset") { - arc.FSRestart -= 20; - } + if (!FutureSocieties.advance('FSRepopulationFocus', 10, arc)) { FutureSocieties.advance('FSRestart', -20, arc); } } addTrinket(`a cut out magazine cover of your renowned hyperbroodmother inventor, ${slave.slaveName}, and ${his} myriad toys`); } else if (random(1, 100) > 50) { @@ -298,21 +250,13 @@ App.Events.rePregInventorFCTV = class rePregInventorFCTV extends App.Events.Base } repX(2500, "event"); for (const arc of V.arcologies) { - if (arc.FSRepopulationFocus !== "unset") { - arc.FSRepopulationFocus += 5; - } else if (arc.FSRestart !== "unset") { - arc.FSRestart -= 10; - } + if (!FutureSocieties.advance('FSRepopulationFocus', 5, arc)) { FutureSocieties.advance('FSRestart', -10, arc); } } } else { r.push(`You turn your FCTV screen off disappointed that your slave has done a mediocre job. Over the course of the next several weeks, it becomes clear that <span class="reputation inc">what little impact</span> ${he} has had is on a local scale only.`); repX(500, "event"); for (const arc of V.arcologies) { - if (arc.FSRepopulationFocus !== "unset") { - arc.FSRepopulationFocus += 5; - } else if (arc.FSRestart !== "unset") { - arc.FSRestart -= 10; - } + if (!FutureSocieties.advance('FSRepopulationFocus', 5, arc)) { FutureSocieties.advance('FSRestart', -10, arc); } } } @@ -588,7 +532,7 @@ App.Events.rePregInventorFCTV = class rePregInventorFCTV extends App.Events.Base r.push(`The camera rotates to focus on your slave and ${he} shakes ${himself}, apparently regathering ${his} wits.`); App.Events.addParagraph(el, r); r = []; - if (V.arcologies[0].FSRepopulationFocus !== "unset") { + if (FutureSocieties.isActive('FSRepopulationFocus')) { if (canTalk(slave)) { r.push(`"My ${Master}, ${(SlaveStatsChecker.checkForLisp(slave)) ? lispReplace(PlayerName()) : PlayerName()}, has a vision for a beautiful future where baby-laden broodmothers like me aren't the exception in Free Cities society, but the norm. We both hope that everyone here will support us, and so we've hidden certificates for free pools and swings under everyone's seats — everybody look! If you like what you've seen today as much as we hope you have, my ${Master} and I both hope you'll be filling these inventions with your own slaves' swollen bodies, soon. And we hope that, some day, everyone watching at home will feel this way, as well!"`); } else { diff --git a/src/events/RE/reShippingContainer.js b/src/events/RE/reShippingContainer.js index 60e1c5f5e0003565b11b29f9b201bf41fe7561fd..4400fd63b8bd6c79769498840cd1cda1b3adc67d 100644 --- a/src/events/RE/reShippingContainer.js +++ b/src/events/RE/reShippingContainer.js @@ -57,9 +57,9 @@ App.Events.REShippingContainer = class REShippingContainer extends App.Events.Ba r = []; r.push(`For now, the crowd around you is looking at the helpless human cargo with`); - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { r.push(`undisguised lust.`); - } else if (V.arcologies[0].FSPaternalist !== "unset") { + } else if (FutureSocieties.isActive('FSPaternalist')) { r.push(`concern, wondering if any of them need medical attention, and wanting to reassure them about the arcology they've entered.`); } else { r.push(`cupidity.`); @@ -68,9 +68,9 @@ App.Events.REShippingContainer = class REShippingContainer extends App.Events.Ba const choices = []; choices.push(new App.Events.Result(`Conduct an impromptu auction`, auction)); choices.push(new App.Events.Result(`Keep them`, keep)); - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { choices.push(new App.Events.Result(`Indulge the crowd's Degradationism`, degradationism)); - } else if (V.arcologies[0].FSPaternalist !== "unset") { + } else if (FutureSocieties.isActive('FSPaternalist')) { choices.push(new App.Events.Result(`Indulge the crowd's Paternalism`, paternalism)); } App.Events.addResponses(node, choices); @@ -138,4 +138,3 @@ App.Events.REShippingContainer = class REShippingContainer extends App.Events.Ba } } }; - diff --git a/src/events/RE/reSiblingPlease.js b/src/events/RE/reSiblingPlease.js index 4f7d39989acf0c940eb85e1c06c5ff665582fac6..616b546891b5193bb577fc67c7401912b909b730 100644 --- a/src/events/RE/reSiblingPlease.js +++ b/src/events/RE/reSiblingPlease.js @@ -4,7 +4,7 @@ App.Events.RESiblingPlease = class RESiblingPlease extends App.Events.BaseEvent () => V.seePreg !== 0, () => V.seeIncest !== 0, // daughter participates in sex scenes () => isFullyPotent(V.PC), // natural impregnation of slave's mother by potent PC; other paths are potentially possible but not written - () => V.arcologies[0].FSRestart === "unset" // in a Eugenics arcology this event would require extra checks and special dialog that hasn't been written + () => !FutureSocieties.isActive('FSRestart') // in a Eugenics arcology this event would require extra checks and special dialog that hasn't been written ]; } diff --git a/src/events/REFS/refsAztecArtifact.js b/src/events/REFS/refsAztecArtifact.js index c1d00c1e598bd8908580a30927cabeafdbfd42bb..fd2e9b228a5a4a2c47325344c5f8508abd06b5b5 100644 --- a/src/events/REFS/refsAztecArtifact.js +++ b/src/events/REFS/refsAztecArtifact.js @@ -37,12 +37,12 @@ App.Events.refsAztecArtifact = class refsAztecArtifact extends App.Events.BaseEv const frag = new DocumentFragment(); App.Events.addParagraph(frag, [`You buy the ancient Aztec altar and have it hauled in and set up in the center of your sacrifice room. It's sure a pain to move, but you're sure you'll find some use for it.`]); const t = [`You find a place for the obsidian tecpatl safe in the display case behind your desk, where it can serve as a constant reminder of your heritage.`]; - if (V.arcologies[0].FSPaternalist === "unset") { // no blood sacrifice allowed for paternalists + if (FutureSocieties.isActive('FSPaternalist')) { // no blood sacrifice allowed for paternalists t.push(`Conveniently, it's also easy to access when you feel the need to sacrifice a slave.`); } App.Events.addParagraph(frag, t); addTrinket("an ancient obsidian tecpatl, stained with the blood of slave sacrifices"); - if (V.arcologies[0].FSPaternalist === "unset") { + if (FutureSocieties.isActive('FSPaternalist')) { App.Events.addResponses(frag, [new App.Events.Result(`Choose a slave and let the tecpatl taste blood again.`, sacrifice, `The slave you choose will die.`)]); } return frag; @@ -62,7 +62,7 @@ App.Events.refsAztecArtifact = class refsAztecArtifact extends App.Events.BaseEv frag.append(`Choose a slave to sacrifice. This slave will die.`); V.slaves - .filter(s => (s.breedingMark === 0 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) + .filter(s => (s.breedingMark === 0 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || !FutureSocieties.isActive('FSRestart'))) .forEach(slave => { App.Events.addNode(frag, [ App.UI.DOM.link(`Sacrifice ${SlaveFullName(slave)}`, () => { diff --git a/src/events/RESS/breedingBull.js b/src/events/RESS/breedingBull.js index ec9421b3f8bc0bf45a061d326f742d23129e9803..63a296df5cafe980fd57cb05f735a2252efeecc7 100644 --- a/src/events/RESS/breedingBull.js +++ b/src/events/RESS/breedingBull.js @@ -61,7 +61,7 @@ App.Events.RESSBreedingBull = class RESSBreedingBull extends App.Events.BaseEven r = []; if (overpowerCheck(eventSlave, V.PC) >= random(1, 100)) { r.push(`You struggle underneath ${his} grip and manage to wriggle your arms free. You grab the amorous bull and effortlessly flip ${him} off of you. ${He} might be strong, but you are`); - if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (FutureSocieties.isActive('FSPhysicalIdealist')) { if (V.PC.title === 0) { r.push(`a chiseled goddess.`); } else { diff --git a/src/events/RESS/devotedEducated.js b/src/events/RESS/devotedEducated.js index 3266cf8119a43f7b8973ff5bb96b67a1174f6b70..7087299fad1183c3fafbe5d2353fbd6576a832aa 100644 --- a/src/events/RESS/devotedEducated.js +++ b/src/events/RESS/devotedEducated.js @@ -46,10 +46,10 @@ App.Events.RESSDevotedEducated = class RESSDevotedEducated extends App.Events.Ba canDoAnal(eventSlave) || canDoVaginal(eventSlave) ? new App.Events.Result(`Stimulate ${his} mind and body`, stimulate, virginityCheck()) : new App.Events.Result(), - V.arcologies[0].FSDegradationist !== "unset" + FutureSocieties.isActive('FSDegradationist') ? new App.Events.Result(`A public blowbang will show ${him} what a Degradationist arcology thinks about 'educated' slaves`, blowbang) : new App.Events.Result(), - V.arcologies[0].FSPaternalist !== "unset" + FutureSocieties.isActive('FSPaternalist') ? new App.Events.Result(`Allow ${him} to audit some advanced classes at Paternalist slave schools`, schooling) : new App.Events.Result() ]); diff --git a/src/events/RESS/hotPC.js b/src/events/RESS/hotPC.js index 0367fafed15d5c385ee3702708958e341b754300..f00b00cd24aa9d1b02925f24d29179c0e8d6237b 100644 --- a/src/events/RESS/hotPC.js +++ b/src/events/RESS/hotPC.js @@ -34,7 +34,7 @@ App.Events.RESSHotPC = class RESSHotPC extends App.Events.BaseEvent { let t = []; - if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (FutureSocieties.isActive('FSPhysicalIdealist')) { t.push(`You maintain a tremendous workout routine: the leader of a society that worships physical perfection can afford nothing less. Working out maintains your appearance, keeps you sharp, and makes you the exemplar of the physical ideal that you have to be for your vision for the future to be realized. So, you pay the iron price for your ${PC.title === 1 ? "muscles" : "toned body"}. Like most of the arcology's prominent citizens, you often lift publicly and take part in other amateur sports, but you also have your own private weight room in your penthouse, and you spend a lot of time there.`); } else if (PC.physicalAge >= 50) { t.push(`You take care of yourself. You're no longer as young as you once were, making it almost a requirement that you work out, hard and regularly. The fact is, the overwhelming majority of arcology owners who maintain their positions for more than a short time are physically fit. The Free Cities have a reputation for destroying old world wastrels who inherit wealth and think that makes them able to survive in an anarcho-capitalist world. Sloth and an inability to self-govern are not qualities common among your successful peers. Not to mention, it's useful to look good, and it may well prove essential to be physically capable in the near future.`); diff --git a/src/events/RESS/injectionsPlease.js b/src/events/RESS/injectionsPlease.js index d2bcfe36c420dac64a6a7446325e0a252405d74f..ed2483d9336e0d2aa1edadd583b3d810f48195f7 100644 --- a/src/events/RESS/injectionsPlease.js +++ b/src/events/RESS/injectionsPlease.js @@ -2,7 +2,7 @@ App.Events.RESSInjectionsPlease = class RESSInjectionsPlease extends App.Events. eventPrerequisites() { return [ () => V.expansionRequestsAllowed > 0, - () => V.arcologies[0].FSSlimnessEnthusiast === "unset", + () => !FutureSocieties.isActive('FSSlimnessEnthusiast'), ]; // always valid if sufficient actors can be cast successfully } @@ -250,7 +250,7 @@ App.Events.RESSInjectionsPlease = class RESSInjectionsPlease extends App.Events. } } - if (V.arcologies[0].FSGenderRadicalist !== "unset") { + if (FutureSocieties.isActive('FSGenderRadicalist')) { if (V.arcologies[0].FSGenderRadicalistLawFuta === 2) { if (canPenetrate(eventSlave) && eventSlave.dick < 5) { const entry = {type: "dick", text: `penis enhancement? I want to be the best hung slave I can be, ${Master}. I want them to see my erection and stare.`}; diff --git a/src/events/RESS/meanGirls.js b/src/events/RESS/meanGirls.js index 39181547e382b2f4eb5666eac9a8f8b90214a4fb..34b3657b306967bb9548e728eba3798206a896e8 100644 --- a/src/events/RESS/meanGirls.js +++ b/src/events/RESS/meanGirls.js @@ -1,7 +1,7 @@ App.Events.RESSMeanGirls = class RESSMeanGirls extends App.Events.BaseEvent { eventPrerequisites() { return [ - () => V.arcologies[0].FSDegradationist === "unset", + () => !FutureSocieties.isActive('FSDegradationist'), () => V.arcologyUpgrade.drones === 1, ]; } diff --git a/src/events/RESS/review/araAra.js b/src/events/RESS/review/araAra.js index 1e8d2f8bc7eb17726a2ca882fdfd78b231c73feb..e23011533a8c726e85967255de7e3e4fcc61906d 100644 --- a/src/events/RESS/review/araAra.js +++ b/src/events/RESS/review/araAra.js @@ -58,9 +58,9 @@ App.Events.RESSAraAra = class RESSAraAra extends App.Events.BaseEvent { r.push(Spoken(eventSlave, `every guy I approach wants to fuck me!"`)); } r.toParagraph(); - if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + if (FutureSocieties.isActive('FSMaturityPreferentialist')) { r.push(`"It's different here," the other slave explains. "Almost everyone here has a thing for older ${V.seeDicks < 100 ? "women. MILFs" : "men. DILFs"} get all the attention."`); // review seeDicks here - } else if (V.arcologies[0].FSGenderRadicalist !== "unset" && (eventSlave.dick > 0 || eventSlave.vagina === -1)) { + } else if (FutureSocieties.isActive('FSGenderRadicalist') && (eventSlave.dick > 0 || eventSlave.vagina === -1)) { if (eventSlave.vagina > -1) { r.push(`"Well, you're a futa," the other slave explains. "A chick with a dick. Everyone here is going to want to fuck you, since you've got both."`); } else if (eventSlave.balls > 0) { @@ -70,31 +70,31 @@ App.Events.RESSAraAra = class RESSAraAra extends App.Events.BaseEvent { } else { r.push(`"You've got a soft girldick," the other slave explains. "That's like an advertisement that you love it up the butt, here."`); } - } else if (V.arcologies[0].FSAssetExpansionist !== "unset" && eventSlave.boobs > 4000) { + } else if (FutureSocieties.isActive('FSAssetExpansionist') && eventSlave.boobs > 4000) { r.push(`"It's your boobs," the other slave explains. "There's no such thing as too big, here. Everyone who sees your boobs here is going to want to fuck you."`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset" && eventSlave.butt > 7) { + } else if (FutureSocieties.isActive('FSAssetExpansionist') && eventSlave.butt > 7) { r.push(`"It's your ass," the other slave explains. "There's no such thing as too big, here. Everyone who sees your ass here is going to want to fuck you."`); - } else if ((V.arcologies[0].FSRepopulationFocus !== "unset") && eventSlave.belly >= 5000) { + } else if ((FutureSocieties.isActive('FSRepopulationFocus')) && eventSlave.belly >= 5000) { r.push(`"It's your belly," the other slave explains. "They love how big and round it is. If you look pregnant, they'll be all over you. Even if it's fake, they won't care."`); } else if (V.arcologies[0].FSRepopulationFocusPregPolicy === 1 && eventSlave.bellyPreg >= 5000) { r.push(`"It's your belly," the other slave explains. "Preggos are in these days and you aren't exactly lacking in the 'with child' department."`); - } else if (V.arcologies[0].FSPastoralist !== "unset" && eventSlave.boobs >= 800 && eventSlave.lactation > 0 && eventSlave.lactationAdaptation > 50) { + } else if (FutureSocieties.isActive('FSPastoralist') && eventSlave.boobs >= 800 && eventSlave.lactation > 0 && eventSlave.lactationAdaptation > 50) { r.push(`"It's those plump, milky titties you have," the other slave explains. "Everyone here is thirsty for a motherly body like yours, in more ways than one."`); - } else if ((V.arcologies[0].FSTransformationFetishist !== "unset" && eventSlave.boobsImplant/eventSlave.boobs) >= .50) { + } else if ((FutureSocieties.isActive('FSTransformationFetishist') && eventSlave.boobsImplant/eventSlave.boobs) >= .50) { r.push(`"It's your fake tits," the other slave explains. "They love how fake they look, here. If you look like a bimbo, they don't care if you're a little mature."`); - } else if (V.arcologies[0].FSHedonisticDecadence !== "unset" && eventSlave.weight > 95) { + } else if (FutureSocieties.isActive('FSHedonisticDecadence') && eventSlave.weight > 95) { r.push(`"You're so fat," the other slave explains. "Everyone here loves thick ${girl}s. They don't care that you're a little mature; that just means you understand life's pleasures more."`); - } else if (V.arcologies[0].FSPhysicalIdealist !== "unset" && eventSlave.muscles > 50) { + } else if (FutureSocieties.isActive('FSPhysicalIdealist') && eventSlave.muscles > 50) { r.push(`"It's how ripped you are," the other slave explains. "It promises you won't give out after one fuck, no matter how old you are."`); - } else if (V.arcologies[0].FSSlimnessEnthusiast !== "unset" && eventSlave.boobs < 800 && eventSlave.butt < 3) { + } else if (FutureSocieties.isActive('FSSlimnessEnthusiast') && eventSlave.boobs < 800 && eventSlave.butt < 3) { r.push(`"You're so slim," the other slave explains. "Everyone here loves slender ${girl}s. They don't care that you're a little mature; they think you're hot."`); - } else if (V.arcologies[0].FSStatuesqueGlorification !== "unset" && heightPass(eventSlave)) { + } else if (FutureSocieties.isActive('FSStatuesqueGlorification') && heightPass(eventSlave)) { r.push(`"You're really fucking tall," the other slave explains. "Guys here love a ${girl} that tower over them and you're, like, the definition of tall."`); - } else if (V.arcologies[0].FSPetiteAdmiration !== "unset" && heightPass(eventSlave)) { + } else if (FutureSocieties.isActive('FSPetiteAdmiration') && heightPass(eventSlave)) { r.push(`"You're so small," the other slave explains. "A guy can just scoop you up and carry you off for a good time."`); - } else if (V.arcologies[0].FSBodyPurist !== "unset" && eventSlave.boobsImplant === 0 && eventSlave.health.condition > 50) { + } else if (FutureSocieties.isActive('FSBodyPurist') && eventSlave.boobsImplant === 0 && eventSlave.health.condition > 50) { r.push(`"It's how healthy you are, and your natural boobs," the other slave explains. "You look good and natural, and everyone likes that here, especially if you're mature."`); - } else if ((V.arcologies[0].FSIntellectualDependency !== "unset") && bimboScore(eventSlave) >= 6) { + } else if ((FutureSocieties.isActive('FSIntellectualDependency')) && bimboScore(eventSlave) >= 6) { r.push(`"You're so hot," the other slave explains. "Guys love a ${girl} who knows a good time and your body screams 'ravish me'."`); } else if (eventSlave.face > 95) { r.push(`"It might have something to do with how incredibly beautiful you are," the other slave explains sarcastically. "Come on, you could be a model. Of course they want you."`); diff --git a/src/events/RESS/review/breastExpansionBlues.js b/src/events/RESS/review/breastExpansionBlues.js index 1cba9e4142b6e4df0a13eef9d3bc95315bcce3a9..011767fdb7ffdd24539d5c4f5e97e18bdae46eec 100644 --- a/src/events/RESS/review/breastExpansionBlues.js +++ b/src/events/RESS/review/breastExpansionBlues.js @@ -60,7 +60,7 @@ App.Events.RESSBreastExpansionBlues = class RESSBreastExpansionBlues extends App Spoken(eventSlave, `"They're so heavy and awkward. I'm sore every night, and my back hurts. I feel like a cow with boobs this big, and I can't imagine what it'll be like if they get any bigger."`) ); r.push(`In one sense, it's amusing that ${he} feels that way, because`); - if (V.arcologies[0].FSAssetExpansionist !== "unset" || (V.arcologies[0].FSTransformationFetishist !== "unset" && V.arcologies[0].FSSlimnessEnthusiast === "unset") || V.arcologies[0].FSPastoralist !== "unset") { + if (FutureSocieties.isActive('FSAssetExpansionist') || (FutureSocieties.isActive('FSTransformationFetishist') && !FutureSocieties.isActive('FSSlimnessEnthusiast')) || FutureSocieties.isActive('FSPastoralist')) { r.push(`as many slaves in this very arcology know quite well,`); } r.push(`it's possible for the miracles of modern medicine to grow a ${SlaveTitle(eventSlave)}'s tits until they're so heavy they immobilize ${him} completely.`); diff --git a/src/events/RESS/review/cageRelief.js b/src/events/RESS/review/cageRelief.js index c14151864365cc2b4ccb6558a8398708663299d5..439d52d67f33885104aa3e7c7ca3b8cec9a40ef5 100644 --- a/src/events/RESS/review/cageRelief.js +++ b/src/events/RESS/review/cageRelief.js @@ -148,7 +148,7 @@ App.Events.RESSCageRelief = class RESSCageRelief extends App.Events.BaseEvent { r.push(`gravid`); } else if (PC.belly >= 1500) { r.push(`swollen`); - } else if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + } else if (FutureSocieties.isActive('FSPhysicalIdealist')) { r.push(`muscular`); } else if (PC.title === 0) { r.push(`feminine`); @@ -188,7 +188,7 @@ App.Events.RESSCageRelief = class RESSCageRelief extends App.Events.BaseEvent { r.push(`breasts`); } else if (PC.boobs >= 300) { r.push(`boobs`); - } else if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + } else if (FutureSocieties.isActive('FSPhysicalIdealist')) { r.push(`strong shoulder`); } else if (PC.title === 0) { r.push(`feminine shoulder`); diff --git a/src/events/RESS/review/eliteBreederPlease.js b/src/events/RESS/review/eliteBreederPlease.js index 7f9a65c73460113e11f0da04796c2ab01b120482..528a2c138117f900e4d9befa0cbf114760ff892b 100644 --- a/src/events/RESS/review/eliteBreederPlease.js +++ b/src/events/RESS/review/eliteBreederPlease.js @@ -1,7 +1,7 @@ App.Events.RESSEliteBreederPlease = class RESSEliteBreederPlease extends App.Events.BaseEvent { eventPrerequisites() { return [ - () => V.arcologies[0].FSRestart !== "unset", + () => FutureSocieties.isActive('FSRestart'), () => !!V.propOutcome, ]; } diff --git a/src/events/RESS/review/gorging.js b/src/events/RESS/review/gorging.js index a396cae09e19450317d273ab739b03d78dd74c0d..1bd30496fa5b26081829831d2560d7fbcb5efa2c 100644 --- a/src/events/RESS/review/gorging.js +++ b/src/events/RESS/review/gorging.js @@ -158,10 +158,10 @@ App.Events.RESSGorging = class RESSGorging extends App.Events.BaseEvent { r.push(`Being forced to experience such a mindblowing orgasm by your ministrations <span class="devotion inc">draws ${him} closer to you,</span> even if ${he}'ll be a little sore in the morning.`); eventSlave.devotion += 2; } - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { r.push(`${He} ${canSee(eventSlave) ? "glances down at" : "runs a hand over"} his glutted belly, imagining how people will <span class="devotion inc">admire</span> the constantly expanding figure you're giving ${him}.`); eventSlave.devotion += 2; - } else if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + } else if (FutureSocieties.isActive('FSSlimnessEnthusiast')) { r.push(`However, ${he} quickly realizes what ${he} has done to ${his} body, and the bliss on ${his} face is quickly replaced by <span class="devotion dec">disdain</span> as ${he} rationalizes that it's your fault that society will now judge ${him} over ${his} bloated figure.`); eventSlave.devotion -= 5; } @@ -201,10 +201,10 @@ App.Events.RESSGorging = class RESSGorging extends App.Events.BaseEvent { r.push(`${eventSlave.slaveName} awakes and struggles to push ${himself} upright, weighed down by so much food, only to knock a mop to the floor. ${He} groans at the mess ${he} has to clean up, but ${his} defiance has been tempered slightly by you showing ${him} ${his} proper place in the penthouse hierarchy.`); - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { r.push(`${He} ${canSee(eventSlave) ? "glances down at" : "runs a hand over"} his glutted belly, understanding that you only let ${him} keep eating because <span class="devotion inc">this is how you want ${him} to look.</span>`); eventSlave.devotion += 2; - } else if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + } else if (FutureSocieties.isActive('FSSlimnessEnthusiast')) { r.push(`However, ${he} quickly realizes what ${he} has done to ${his} body, and whatever submission to you ${he} developed is quickly replaced by <span class="devotion dec">newfound hate</span> as ${he} rationalizes that it's your fault that society will now judge ${him} over ${his} bloated figure.`); eventSlave.devotion -= 7; } @@ -224,9 +224,9 @@ App.Events.RESSGorging = class RESSGorging extends App.Events.BaseEvent { function punish() { r = []; r.push(`You can't have your slaves being disobedient, gluttonous`); - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { r.push(`hogs, even if your society has adopted a decadent lifestyle that encourages it.`); - } else if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + } else if (FutureSocieties.isActive('FSSlimnessEnthusiast')) { r.push(`hogs, especially when your slaves are ruining their bodies in the process.`); } else { r.push(`hogs and this is the perfect time to fix it.`); @@ -261,7 +261,7 @@ App.Events.RESSGorging = class RESSGorging extends App.Events.BaseEvent { r = []; r.push(`You have seen enough and don't have the time, nor the energy to deal with this, so you return to bed. You manage to wake up early the next day and make some extra profits with your heightened productivity, but your good spirits are soured that evening when you see ${eventSlave.slaveName} ${canWalk(eventSlave) ? `waddle past your office door with ${his} taut, food-bloated belly leading the way` : `scrape past your office door with ${his} taut, food-bloated belly dragging along beneath ${him}`}.`); - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { r.push(`A <span class="devotion inc">smile</span> lights up ${his} face as ${he} delights in the <span class="trust inc">knowledge that ${he} has been given free rein to gorge ${himself},</span> and that ${his} gluttony will only make ${him} more popular in your indulgent society. ${eventSlave.slaveName} delights in how ${his} hugely distended gut is admired as ${he} goes about ${his} duties. ${He} had quite the good day today and is headed off to the kitchen to make tomorrow a good one as well.`); if (eventSlave.devotion > 50 && canSee(eventSlave) && canWalk(eventSlave)) { r.push(`As ${eventSlave.slaveName} walks past the open door, ${he} catches you admiring ${his} turgid form. Striking a pose, ${he} ${hasBothArms(eventSlave) ? `locks ${his} hands under his belly and shakes it,` : `bounces on ${his} heels,`} winking at you as a cacophony of sloshing radiates out from ${his} food-filled gut.`); @@ -269,7 +269,7 @@ App.Events.RESSGorging = class RESSGorging extends App.Events.BaseEvent { eventSlave.devotion += 2; eventSlave.trust += 7; cashX(5000, "event"); - } else if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + } else if (FutureSocieties.isActive('FSSlimnessEnthusiast')) { r.push(`A <span class="devotion dec">worried</span> look crosses ${his} features as ${he} senses the disdain and disgust levied towards ${his} direction, both from yourself and the slaves currently servicing you. ${He} scampers away quickly, eager to escape your presence; ${he}'s had <span class="trust dec">plenty of torment thrown ${his} way</span> today already, and so ${he} will spend the night eating away ${his} sorrows.`); eventSlave.devotion -= 5; eventSlave.trust -= 5; diff --git a/src/events/RESS/review/rebelliousArrogant.js b/src/events/RESS/review/rebelliousArrogant.js index 7d4c03e207835048a98e7801f54e83ab30160379..1e153fb43749252b94c924217417d23e5729156e 100644 --- a/src/events/RESS/review/rebelliousArrogant.js +++ b/src/events/RESS/review/rebelliousArrogant.js @@ -71,7 +71,7 @@ App.Events.RESSRebelliousArrogant = class RESSRebelliousArrogant extends App.Eve r.push(`${textArray[0]}, ${textArray[2]} and ${textArray[3]}.`); } r.push(`You force ${him} right there, thoroughly raping the struggling ${girl} in public. <span class="trust dec">${He} learns the consequences of refusal,</span>`); - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { r.push(`and <span class="reputation inc">your citizens certainly enjoy the public spectacle.</span>`); repX(100, "event", eventSlave); } else { diff --git a/src/events/RESS/review/showerSlip.js b/src/events/RESS/review/showerSlip.js index 6762ce0165d6f645d9896b75f902378c177bcebd..661328b2b544f74a47b05e93d070da0e31d8e0c6 100644 --- a/src/events/RESS/review/showerSlip.js +++ b/src/events/RESS/review/showerSlip.js @@ -160,7 +160,7 @@ App.Events.RESSShowerSlip = class RESSShowerSlip extends App.Events.BaseEvent { r.push(`${His} tremendous balls serve as an imposing anchor, quickly forcing you to lower ${him} back to the ground.`); wasCarried = false; } else if (eventSlave.dick > 30) { - if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (FutureSocieties.isActive('FSPhysicalIdealist')) { r.push(`${His} hanging dick adds tremendously to ${his} weight and touches the floor, but you're ${strong} enough to carry ${him} some distance.`); } else { r.push(`${His} hanging dick adds tremendously to ${his} weight and touches the floor, preventing you from really carrying ${him} very far.`); @@ -168,14 +168,14 @@ App.Events.RESSShowerSlip = class RESSShowerSlip extends App.Events.BaseEvent { } } else if (eventSlave.belly >= 100000) { if (eventSlave.bellyPreg > 3000) { - if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (FutureSocieties.isActive('FSPhysicalIdealist')) { r.push(`${His} pregnancy is truly gigantic, but you're ${strong} enough to carry ${him} some distance.`); } else { r.push(`${His} pregnancy is truly gigantic and a little too big for you to safely carry without the risk of dropping, quickly forcing you to lower ${him}.`); wasCarried = false; } } else { - if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (FutureSocieties.isActive('FSPhysicalIdealist')) { r.push(`${His} ${belly} belly is truly gigantic, but you're ${strong} enough to carry ${him} some distance.`); } else { r.push(`${His} ${belly} belly is truly an armful and a little to heavy for you to carry, quickly forcing you to lower ${him}.`); @@ -184,7 +184,7 @@ App.Events.RESSShowerSlip = class RESSShowerSlip extends App.Events.BaseEvent { } } else if (eventSlave.boobs > 25000) { r.push(`${His} enormous boobs`); - if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (FutureSocieties.isActive('FSPhysicalIdealist')) { r.push(`add tremendously to ${his} weight and are awkward to manage, but you're ${strong} enough to carry ${him} some distance.`); } else { r.push(`add tremendously to ${his} weight and are awkward to manage, quickly forcing you to lower ${him}.`); @@ -192,7 +192,7 @@ App.Events.RESSShowerSlip = class RESSShowerSlip extends App.Events.BaseEvent { } } else if (eventSlave.weight > 130) { r.push(`${He}'s a`); - if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (FutureSocieties.isActive('FSPhysicalIdealist')) { r.push(`fatty, but you're ${strong} enough to carry ${him} some distance.`); } else { r.push(`fatty and a little too big and heavy for you to hold for long.`); @@ -200,7 +200,7 @@ App.Events.RESSShowerSlip = class RESSShowerSlip extends App.Events.BaseEvent { } } else if (eventSlave.balls > 100) { r.push(`${His} enormous balls`); - if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (FutureSocieties.isActive('FSPhysicalIdealist')) { r.push(`add tremendously to ${his} weight and dangle ponderously, but you're ${strong} enough to carry ${him} some distance, even though you have to step awkwardly to avoid kneeing ${his} sensitive sack.`); } else { r.push(`add tremendously to ${his} weight and dangle ponderously, quickly forcing you to lower ${him} or risk accidentally kneeing the sensitive sack.`); @@ -210,7 +210,7 @@ App.Events.RESSShowerSlip = class RESSShowerSlip extends App.Events.BaseEvent { r.push(`${His} dangling cock adds tremendously to ${his} weight and is awkward to walk with, but you're ${strong} enough to carry ${him} some distance.`); } else if (eventSlave.butt > 18) { r.push(`${His} expansive ass`); - if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (FutureSocieties.isActive('FSPhysicalIdealist')) { r.push(`adds tremendously to ${his} weight and is awkward to handle, but you're ${strong} enough to carry ${him} some distance.`); } else { r.push(`adds tremendously to ${his} weight and is awkward to handle, quickly forcing you to lower ${him}.`); @@ -295,28 +295,28 @@ App.Events.RESSShowerSlip = class RESSShowerSlip extends App.Events.BaseEvent { } else if (eventSlave.balls > 200) { r.push(`${His} tremendous balls serve as an imposing anchor, quickly forcing you to push ${him} against the shower wall for added support.`); } else if (eventSlave.dick > 30) { - if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (FutureSocieties.isActive('FSPhysicalIdealist')) { r.push(`${His} hanging dick adds tremendously to ${his} weight and touches the floor, but you're ${strong} enough to lift ${him}.`); } else { r.push(`${His} hanging dick adds tremendously to ${his} weight and touches the floor, quickly forcing you to push ${him} against the shower wall for added support.`); } } else if (eventSlave.boobs > 25000) { r.push(`${His} enormous boobs`); - if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (FutureSocieties.isActive('FSPhysicalIdealist')) { r.push(`add tremendously to ${his} weight and are awkward to manage, but you're ${strong} enough to lift ${him}.`); } else { r.push(`add tremendously to ${his} weight and are awkward to manage, quickly forcing you to push ${him} against the shower wall for added support.`); } } else if (eventSlave.weight > 130) { r.push(`${He}'s a`); - if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (FutureSocieties.isActive('FSPhysicalIdealist')) { r.push(`fatty, but you're ${strong} enough to lift ${him}.`); } else { r.push(`fatty and a little too big and heavy, quickly forcing you to push ${him} against the shower wall with a wet slap.`); } } else if (eventSlave.balls > 100) { r.push(`${His} enormous balls`); - if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (FutureSocieties.isActive('FSPhysicalIdealist')) { r.push(`add tremendously to ${his} weight and dangle ponderously, but you're ${strong} enough to lift ${him}.`); } else { r.push(`add tremendously to ${his} weight and dangle ponderously, quickly forcing you to push ${him} against the shower wall for added support.`); @@ -325,7 +325,7 @@ App.Events.RESSShowerSlip = class RESSShowerSlip extends App.Events.BaseEvent { r.push(`${His} dangling cock adds tremendously to ${his} weight and dangles heavily, but you're ${strong} enough to lift ${him}.`); } else if (eventSlave.butt > 18) { r.push(`${His} expansive ass`); - if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (FutureSocieties.isActive('FSPhysicalIdealist')) { r.push(`adds tremendously to ${his} weight and is awkward to handle, but you're ${strong} enough to lift ${him}.`); } else { r.push(`adds tremendously to ${his} weight and is awkward to handle, quickly forcing you to push ${him} against the shower wall for added support.`); diff --git a/src/events/RESS/review/subjugationBlues.js b/src/events/RESS/review/subjugationBlues.js index edefbe6839fa5c48c12334ace93452e8508295b4..f231443ec40234adeafa596afa994bd30da42296 100644 --- a/src/events/RESS/review/subjugationBlues.js +++ b/src/events/RESS/review/subjugationBlues.js @@ -1,7 +1,7 @@ App.Events.RESSSubjugationBlues = class RESSSubjugationBlues extends App.Events.BaseEvent { eventPrerequisites() { return [ - () => V.arcologies[0].FSSubjugationist !== "unset" + () => FutureSocieties.isActive('FSSubjugationist') ]; // always valid if sufficient actors can be cast successfully } diff --git a/src/events/RESS/review/surprisingWakeup.js b/src/events/RESS/review/surprisingWakeup.js index 5342b64ec633570612c4d72d2c84289f3e2cf8fa..4dc2db63bc316a67f322ff5ef0511a0dd6eb0c7d 100644 --- a/src/events/RESS/review/surprisingWakeup.js +++ b/src/events/RESS/review/surprisingWakeup.js @@ -92,7 +92,7 @@ App.Events.RESSSurprisingWakeup = class RESSSurprisingWakeup extends App.Events. eventSlave.fetishKnown = 1; const geneIndex = V.genePool.findIndex(s => s.ID === eventSlave.ID); eventSlave.intelligence = V.genePool[geneIndex].intelligence; - if (V.arcologies[0].FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist')) { r.push(`Society <span class="reputation inc">strongly approves</span> of ${eventSlave.slaveName} being restored to sanity, which advances ideals about enlightened slaveownership.`); V.arcologies[0].FSPaternalist += 0.01*V.FSSingleSlaveRep; repX(10*V.FSSingleSlaveRep*(V.arcologies[0].FSPaternalist/V.FSLockinLevel), "futureSocieties"); @@ -122,7 +122,7 @@ App.Events.RESSSurprisingWakeup = class RESSSurprisingWakeup extends App.Events. eventSlave.fetishKnown = 1; const geneIndex = V.genePool.findIndex(s => s.ID === eventSlave.ID); eventSlave.intelligence = V.genePool[geneIndex].intelligence; - if (V.arcologies[0].FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist')) { r.push(`Society <span class="reputation inc">strongly approves</span> of ${eventSlave.slaveName} being restored to sanity by the power of love, which advances ideals about enlightened slaveownership.`); V.arcologies[0].FSPaternalist += 0.01*V.FSSingleSlaveRep; repX(10*V.FSSingleSlaveRep*(V.arcologies[0].FSPaternalist/V.FSLockinLevel), "futureSocieties"); diff --git a/src/events/RESS/tooThinForCumDiet.js b/src/events/RESS/tooThinForCumDiet.js index d80136c54249c9fe2039b5e2927015a27b0ae826..c2d3bab96e78b7a7f23f3ad304c9fac808963796 100644 --- a/src/events/RESS/tooThinForCumDiet.js +++ b/src/events/RESS/tooThinForCumDiet.js @@ -94,7 +94,7 @@ App.Events.RESSTooThinForCumDiet = class RESSTooThinForCumDiet extends App.Event t.push(eventSlave.boobs < 300 ? `tiny` : `small`); t.push("boobs are barely noticeable"); t.push(eventSlave.belly >= 5000 ? `above ${his} bloated` : `against ${his} concave`); - if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + if (FutureSocieties.isActive('FSSlimnessEnthusiast')) { t.push(`tummy, and that can be a very appealing look given the predilection your arcology has for slim ${girl}s.`); } else { t.push(`tummy, and to most clients, this makes ${him} a less appealing whore.`); diff --git a/src/events/RETS/reFucktoyPrefersRelative.js b/src/events/RETS/reFucktoyPrefersRelative.js index b6be3e3034fe318cb094a77865e409945f71b38d..293c3c017ae8ee042f8b69b112fde935ea88b792 100644 --- a/src/events/RETS/reFucktoyPrefersRelative.js +++ b/src/events/RETS/reFucktoyPrefersRelative.js @@ -221,7 +221,7 @@ App.Events.RETSFucktoyPrefersRelative = class RETSFucktoyPrefersRelative extends } App.Events.addParagraph(frag, t); - if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + if (FutureSocieties.isActive('FSSlaveProfessionalism')) { 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("Slave Professionalism", 3); diff --git a/src/events/RETS/reIfYouEnjoyIt.js b/src/events/RETS/reIfYouEnjoyIt.js index e672d89ddb1c128e78106db5f144d2215c5f4f08..e2d21e43caa7d240ecfc49c9c3cdb26ebc6b43f9 100644 --- a/src/events/RETS/reIfYouEnjoyIt.js +++ b/src/events/RETS/reIfYouEnjoyIt.js @@ -230,7 +230,7 @@ App.Events.RETSIfYouEnjoyIt = class RETSIfYouEnjoyIt extends App.Events.BaseEven t.push(`without mercy. The slave screams at the sudden change of pace, thrashing a little. ${His2} struggles bring`); if (canSee(subSlave)) { t.push(`${his2} head around, and ${he2}'s surprised to come face to face with your ankles. With dawning comprehension, ${his2} eyes track rapidly up your`); - if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (FutureSocieties.isActive('FSPhysicalIdealist')) { t.push(`muscular`); } else if (V.PC.title !== 0) { t.push(`trim`); @@ -258,14 +258,14 @@ App.Events.RETSIfYouEnjoyIt = class RETSIfYouEnjoyIt extends App.Events.BaseEven t.push(`swollen middle`); } else if (V.PC.belly >= 100) { t.push(`suspiciously swollen midriff`); - } else if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + } else if (FutureSocieties.isActive('FSPhysicalIdealist')) { t.push(`shredded abs`); } else { t.push(`muscular abs`); } t.push(`and over your`); if (V.PC.boobs < 300) { - if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (FutureSocieties.isActive('FSPhysicalIdealist')) { t.push(`strong chest`); } else if (V.PC.title !== 0) { t.push(`firm chest`); diff --git a/src/events/assistant/assistantBody.js b/src/events/assistant/assistantBody.js index 2756572aa6f70842ff77193e2ca3c34093189e64..e038d56b6293322251f2a69b96ce2182e41a924c 100644 --- a/src/events/assistant/assistantBody.js +++ b/src/events/assistant/assistantBody.js @@ -232,9 +232,9 @@ App.Events.assistantBody = class assistantBody extends App.Events.BaseEvent { r.push(`Can my new body fulfill your deepest desires?"`); } r.push(`${HeA} says with enthusiasm.`); - if (V.arcologies[0].FSSupremacist !== "unset") { + if (FutureSocieties.isActive('FSSupremacist')) { r.push(`"Oh, could I also be ${V.arcologies[0].FSSupremacistRace}? I feel like I could do so much more for you with the right body."`); - } else if (V.arcologies[0].FSSubjugationist !== "unset") { + } else if (FutureSocieties.isActive('FSSubjugationist')) { r.push(`"Oh, could I also not be ${V.arcologies[0].FSSubjugationistRace}? I feel like I could do so much more for you with the right body."`); } App.Events.addParagraph(el, r); diff --git a/src/events/assistant/assistantFS.js b/src/events/assistant/assistantFS.js index 4176c30df40e5ef5b6c743e2368b145c42dfaf26..3502ea489e3b8f81cbe4cce299468de84797f26c 100644 --- a/src/events/assistant/assistantFS.js +++ b/src/events/assistant/assistantFS.js @@ -17,6 +17,7 @@ App.Events.assistantFS = class assistantFS extends App.Events.BaseEvent { HeA, HisA, heA, hisA, girlA, himA, womanA, himselfA, loliA } = getPronouns(assistant.pronouns().main).appendSuffix("A"); + const arcInfo = new App.Utils.Arcology(V.arcologies[0]); let r = []; App.Events.drawEventArt(node, "assistant"); V.assistant.fsOptions = 1; @@ -77,967 +78,967 @@ App.Events.assistantFS = class assistantFS extends App.Events.BaseEvent { r.push(`of your personal assistant pops up on the nearest screen. "${properTitle()}!" ${HeA} says excitedly, "I thought, with how you are shaping society itself, that I should do my part and follow your lead!" You continue to stare sleepily, prompting ${himA} to get to ${hisA} point. "I can adjust my appearance to better fit in with your society, ${properTitle()} – let me demonstrate." ${HeA} focuses intently for a moment and`); switch (V.assistant.appearance) { case "monstergirl": - if (V.arcologies[0].FSPaternalist !== "unset") { + if (arcInfo.fsActive('FSPaternalist')) { r.push(`adjusts ${hisA} appearance to be more conservative to conform with your vision of a well-bred race of slaves.`); - } else if (V.arcologies[0].FSRepopulationFocus !== "unset") { + } else if (arcInfo.fsActive('FSRepopulationFocus')) { r.push(`adjusts ${hisA} appearance to be pregnant to conform with your vision that all women should be pregnant.`); - } else if (V.arcologies[0].FSRestart !== "unset") { + } else if (arcInfo.fsActive('FSRestart')) { r.push(`adjusts ${hisA} appearance to involve chastity.`); - } else if (V.arcologies[0].FSGenderRadicalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderRadicalist')) { r.push(`adjusts ${hisA} appearance to be more androgynous to conform with your vision of gender being defined by power.`); - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderFundamentalist')) { r.push(`adjusts ${hisA} appearance to be quite cute to conform with your vision of preserving traditional gender roles.`); - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (arcInfo.fsActive('FSDegradationist')) { r.push(`adjusts ${hisA} appearance to be quite frightening to conform with your vision that slaves are not human and should be thoroughly degraded.`); - } else if (V.arcologies[0].FSBodyPurist !== "unset") { + } else if (arcInfo.fsActive('FSBodyPurist')) { r.push(`adjusts ${hisA} appearance to be completely flawless to conform with your vision of an implant free society.`); - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (arcInfo.fsActive('FSTransformationFetishist')) { r.push(`${hisA} nipples begin to extend and turn phallic while horns grow from ${hisA} heels as ${heA} adjusts ${himselfA} to conform with your vision of a society focused on implants, alterations, and modifications.`); - } else if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSYouthPreferentialist')) { r.push(`adopts a more youthful appearance to conform with your vision of a society glorifying young ladies.`); - } else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSMaturityPreferentialist')) { r.push(`adopts a more mature appearance to conform with your vision of a society glorifying older ladies.`); - } else if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + } else if (arcInfo.fsActive('FSSlimnessEnthusiast')) { r.push(`adopts a slimmer, more athletic, appearance to conform with your vision of a society glorifying lithe ladies.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (arcInfo.fsActive('FSAssetExpansionist')) { r.push(`adjusts the size of ${hisA} breasts and cocks to conform with your vision that bigger is better.`); - } else if (V.arcologies[0].FSPastoralist !== "unset") { + } else if (arcInfo.fsActive('FSPastoralist')) { r.push(`begins to leak a suspiciously thick milk from ${hisA} nipples to conform with your vision that slaves should be milked.`); - } else if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + } else if (arcInfo.fsActive('FSPhysicalIdealist')) { r.push(`adjusts ${hisA} appearance to be more muscular to conform with your vision that all slaves should be tall and strong.`); - } else if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + } else if (arcInfo.fsActive('FSHedonisticDecadence')) { r.push(`adjusts ${hisA} appearance to be more rotund and relaxed to conform with your vision that everyone should enjoy life to the fullest.`); - } else if (V.arcologies[0].FSIntellectualDependency !== "unset") { + } else if (arcInfo.fsActive('FSIntellectualDependency')) { r.push(`adjusts ${hisA} appearance to be more fun and flirty to conform with your vision that slaves shouldn't waste time thinking.`); - } else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + } else if (arcInfo.fsActive('FSSlaveProfessionalism')) { r.push(`adjusts ${hisA} appearance to be more refined to conform with your vision that slaves should be smart and professional.`); - } else if (V.arcologies[0].FSPetiteAdmiration !== "unset") { + } else if (arcInfo.fsActive('FSPetiteAdmiration')) { r.push(`adjusts ${hisA} height to conform with your vision that short is sexy.`); - } else if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { + } else if (arcInfo.fsActive('FSStatuesqueGlorification')) { r.push(`adjusts ${hisA} height to conform with your vision of a society glorifying the tall.`); - } else if (V.arcologies[0].FSChattelReligionist !== "unset") { + } else if (arcInfo.fsActive('FSChattelReligionist')) { r.push(`adjusts ${hisA} outfit to resemble a priestess of your new religion.`); - } else if (V.arcologies[0].FSRomanRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSRomanRevivalist')) { r.push(`adjusts ${hisA} appearance to resemble a Greek demigoddess to conform with your vision of building a new Rome.`); - } else if (V.arcologies[0].FSNeoImperialist !== "unset") { + } else if (arcInfo.fsActive('FSNeoImperialist')) { r.push(`adjusts ${hisA} appearance to resemble a Pagan Empress to conform with your vision of a new Imperial society.`); - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAztecRevivalist')) { r.push(`adjusts ${hisA} appearance to resemble an Aztec goddess to conform with your vision of building a new Aztec Empire.`); - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEgyptianRevivalist')) { r.push(`adjusts ${hisA} appearance to resemble an Egyptian deity to conform with your vision of building a new land of the Pharaohs.`); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEdoRevivalist')) { r.push(`adjusts ${hisA} appearance to resemble a demon to conform with your vision of building a new Edo Japan.`); - } else if (V.arcologies[0].FSArabianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSArabianRevivalist')) { r.push(`adjusts ${hisA} appearance to resemble a djinn to conform with your vision of building a new Sultanate.`); - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSChineseRevivalist')) { r.push(`adjusts ${hisA} appearance to resemble a demon to conform with your vision of pursuing the Mandate of Heaven.`); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAntebellumRevivalist')) { r.push(`adjusts ${hisA} appearance to resemble a mishmash of creatures from American folklore to conform with your vision of building a new Antebellum South.`); } break; case "shemale": - if (V.arcologies[0].FSPaternalist !== "unset") { + if (arcInfo.fsActive('FSPaternalist')) { r.push(`adjusts ${hisA} appearance to be more classy to conform with your vision of a well-bred race of slaves.`); - } else if (V.arcologies[0].FSGenderRadicalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderRadicalist')) { r.push(`adjusts ${hisA} penis to be extremely detailed to conform with your vision of gender being defined by power.`); - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderFundamentalist')) { r.push(`begins doing ${hisA} best to conceal ${hisA} penis to conform with your vision of preserving traditional gender roles.`); - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (arcInfo.fsActive('FSDegradationist')) { r.push(`adjusts ${hisA} appearance to look comically evil to conform with your vision that slaves are not human and should be thoroughly degraded.`); - } else if (V.arcologies[0].FSBodyPurist !== "unset") { + } else if (arcInfo.fsActive('FSBodyPurist')) { r.push(`adjusts ${hisA} appearance to be more natural to conform with your vision of an implant free society.`); - } else if (V.arcologies[0].FSRepopulationFocus !== "unset") { + } else if (arcInfo.fsActive('FSRepopulationFocus')) { r.push(`adjusts ${hisA} appearance to be pregnant to conform with your vision that all women should be pregnant.`); - } else if (V.arcologies[0].FSRestart !== "unset") { + } else if (arcInfo.fsActive('FSRestart')) { r.push(`adjusts ${hisA} appearance to involve chastity.`); - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (arcInfo.fsActive('FSTransformationFetishist')) { r.push(`adjusts ${himselfA} to appear more fake to conform with your vision of a society focused on implants, alterations, and modifications.`); - } else if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSYouthPreferentialist')) { r.push(`adopts a more youthful and innocent appearance to conform with your vision of a society glorifying young ladies.`); - } else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSMaturityPreferentialist')) { r.push(`adopts a more mature appearance to conform with your vision of a society glorifying older ladies.`); - } else if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + } else if (arcInfo.fsActive('FSSlimnessEnthusiast')) { r.push(`adopts a slimmer, more athletic, appearance to conform with your vision of a society glorifying lithe ladies.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (arcInfo.fsActive('FSAssetExpansionist')) { r.push(`adjusts the size of ${hisA} breasts and cock to conform with your vision that bigger is better.`); - } else if (V.arcologies[0].FSPastoralist !== "unset") { + } else if (arcInfo.fsActive('FSPastoralist')) { r.push(`begins to lactate and drip cum to conform with your vision that slaves should be milked.`); - } else if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + } else if (arcInfo.fsActive('FSPhysicalIdealist')) { r.push(`adjusts ${hisA} appearance to be extremely muscular to conform with your vision that all slaves should be tall and strong.`); - } else if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + } else if (arcInfo.fsActive('FSHedonisticDecadence')) { r.push(`adjusts ${hisA} appearance to be more rotund and relaxed to conform with your vision that everyone should enjoy life to the fullest.`); - } else if (V.arcologies[0].FSIntellectualDependency !== "unset") { + } else if (arcInfo.fsActive('FSIntellectualDependency')) { r.push(`adjusts ${hisA} appearance to be more fun and flirty to conform with your vision that slaves shouldn't waste time thinking.`); - } else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + } else if (arcInfo.fsActive('FSSlaveProfessionalism')) { r.push(`adjusts ${hisA} appearance to be more refined to conform with your vision that slaves should be smart and professional.`); - } else if (V.arcologies[0].FSPetiteAdmiration !== "unset") { + } else if (arcInfo.fsActive('FSPetiteAdmiration')) { r.push(`adjusts ${hisA} height to conform with your vision that short is sexy.`); - } else if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { + } else if (arcInfo.fsActive('FSStatuesqueGlorification')) { r.push(`adjusts ${hisA} height to conform with your vision of a society glorifying the tall.`); - } else if (V.arcologies[0].FSChattelReligionist !== "unset") { + } else if (arcInfo.fsActive('FSChattelReligionist')) { r.push(`adjusts ${hisA} outfit to resemble a priestess of your new religion.`); - } else if (V.arcologies[0].FSRomanRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSRomanRevivalist')) { r.push(`adopts a roman lifestyle to conform with your vision of building a new Rome.`); - } else if (V.arcologies[0].FSNeoImperialist !== "unset") { + } else if (arcInfo.fsActive('FSNeoImperialist')) { r.push(`adjusts ${hisA} outfit to a tight-fitting bodysuit to conform with your vision of a new Imperial society.`); - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAztecRevivalist')) { r.push(`adjusts ${hisA} outfit to a royal Aztec cloth to conform with your vision of building a new Aztec Empire.`); - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEgyptianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble Egyptian garb to conform with your vision of building a new land of the Pharaohs.`); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEdoRevivalist')) { r.push(`adjusts ${hisA} outfit to a brief Japanese bathhouse robe to conform with your vision of building a new Edo Japan.`); - } else if (V.arcologies[0].FSArabianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSArabianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an oil millionaire to conform with your vision of building a new Sultanate.`); - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSChineseRevivalist')) { r.push(`adjusts ${hisA} appearance to be tattooed with rude Chinese characters to conform with your vision of pursuing the Mandate of Heaven.`); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAntebellumRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble old-fashioned, aristocratic garb to conform with your vision of building a new Antebellum South.`); - } else if (V.arcologies[0].FSSupremacist !== "unset") { + } else if (arcInfo.fsActive('FSSupremacist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSupremacistRace} to conform with your vision of glorifying the superior race.`); - } else if (V.arcologies[0].FSSubjugationist !== "unset") { + } else if (arcInfo.fsActive('FSSubjugationist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSubjugationistRace} to conform with your vision of subjugating the inferior race.`); } break; case "amazon": - if (V.arcologies[0].FSPaternalist !== "unset") { + if (arcInfo.fsActive('FSPaternalist')) { r.push(`adjusts ${hisA} appearance to be more conservative to conform with your vision of a well-bred race of slaves.`); - } else if (V.arcologies[0].FSGenderRadicalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderRadicalist')) { r.push(`adjusts ${hisA} appearance to be more androgynous to conform with your vision of gender being defined by power.`); - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderFundamentalist')) { r.push(`adjusts ${hisA} appearance to be more feminine to conform with your vision of preserving traditional gender roles.`); - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (arcInfo.fsActive('FSDegradationist')) { r.push(`adjusts ${hisA} appearance to look threatening to conform with your vision that slaves are not human and should be thoroughly degraded.`); - } else if (V.arcologies[0].FSBodyPurist !== "unset") { + } else if (arcInfo.fsActive('FSBodyPurist')) { r.push(`adjusts ${hisA} outfit to be more realistic to conform with your vision of an implant free society.`); - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (arcInfo.fsActive('FSTransformationFetishist')) { r.push(`adjusts ${himselfA} to appear more fake to conform with your vision of a society focused on implants, alterations, and modifications.`); - } else if (V.arcologies[0].FSRepopulationFocus !== "unset") { + } else if (arcInfo.fsActive('FSRepopulationFocus')) { r.push(`adjusts ${hisA} appearance to be pregnant to conform with your vision that all women should be pregnant.`); - } else if (V.arcologies[0].FSRestart !== "unset") { + } else if (arcInfo.fsActive('FSRestart')) { r.push(`adjusts ${hisA} appearance to involve chastity.`); - } else if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSYouthPreferentialist')) { r.push(`adopts a more youthful and innocent appearance to conform with your vision of a society glorifying young ladies.`); - } else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSMaturityPreferentialist')) { r.push(`adopts a more mature appearance to conform with your vision of a society glorifying older ladies.`); - } else if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + } else if (arcInfo.fsActive('FSSlimnessEnthusiast')) { r.push(`adopts a slimmer, but no less muscled, appearance to conform with your vision of a society glorifying lithe ladies.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (arcInfo.fsActive('FSAssetExpansionist')) { r.push(`adjusts the size of ${hisA} muscles to conform with your vision that bigger is better.`); - } else if (V.arcologies[0].FSPastoralist !== "unset") { + } else if (arcInfo.fsActive('FSPastoralist')) { r.push(`adjusts ${hisA} outfit to resemble a cow${girlA} to conform with your vision that slaves should be milked.`); - } else if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + } else if (arcInfo.fsActive('FSPhysicalIdealist')) { r.push(`adjusts the appearance of ${hisA} muscles to be extra detailed to conform with your vision that all slaves should be tall and strong.`); - } else if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + } else if (arcInfo.fsActive('FSHedonisticDecadence')) { r.push(`adjusts ${hisA} appearance to be more rotund and relaxed to conform with your vision that everyone should enjoy life to the fullest.`); - } else if (V.arcologies[0].FSIntellectualDependency !== "unset") { + } else if (arcInfo.fsActive('FSIntellectualDependency')) { r.push(`adjusts ${hisA} appearance to be more straight to the point to conform with your vision that slaves shouldn't waste time thinking.`); - } else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + } else if (arcInfo.fsActive('FSSlaveProfessionalism')) { r.push(`adjusts ${hisA} appearance to be more refined to conform with your vision that slaves should be smart and professional.`); - } else if (V.arcologies[0].FSPetiteAdmiration !== "unset") { + } else if (arcInfo.fsActive('FSPetiteAdmiration')) { r.push(`adjusts ${hisA} height to conform with your vision that short is sexy.`); - } else if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { + } else if (arcInfo.fsActive('FSStatuesqueGlorification')) { r.push(`adjusts ${hisA} height to conform with your vision of a society glorifying the tall.`); - } else if (V.arcologies[0].FSChattelReligionist !== "unset") { + } else if (arcInfo.fsActive('FSChattelReligionist')) { if (V.arcologies[0].FSChattelReligionistLaw2 === 1) { r.push(`adjusts ${hisA} appearance to include a holy symbol painted onto ${hisA} nude body.`); } else { r.push(`adjusts ${hisA} outfit to resemble a crusader of your new religion.`); } - } else if (V.arcologies[0].FSRomanRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSRomanRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Roman warrior to conform with your vision of building a new Rome.`); - } else if (V.arcologies[0].FSNeoImperialist !== "unset") { + } else if (arcInfo.fsActive('FSNeoImperialist')) { r.push(`adjusts ${hisA} outfit to a full set of advanced battle armor bearing your family crest to conform with your vision of a new Imperial society.`); - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAztecRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Aztec champion to conform with your vision of building a new Aztec Empire.`); - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEgyptianRevivalist')) { r.push(`adjusts ${hisA} appearance to resemble an Egyptian to conform with your vision of building a new land of the Pharaohs.`); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEdoRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Japanese warrior to conform with your vision of building a new Edo Japan.`); - } else if (V.arcologies[0].FSArabianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSArabianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Arabian warrior to conform with your vision of building a new Sultanate.`); - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSChineseRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a warrior monk to conform with your vision of pursuing the Mandate of Heaven.`); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAntebellumRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Confederate soldier to confirm with your vision of building a new Antebellum South.`); } break; case "businesswoman": - if (V.arcologies[0].FSPaternalist !== "unset") { + if (arcInfo.fsActive('FSPaternalist')) { r.push(`adjusts ${hisA} appearance to be more conservative to conform with your vision of a well-bred race of slaves.`); - } else if (V.arcologies[0].FSGenderRadicalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderRadicalist')) { r.push(`adjusts ${hisA} appearance to be more androgynous to conform with your vision of gender being defined by power.`); - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderFundamentalist')) { r.push(`adjusts ${hisA} appearance to be more feminine to conform with your vision of preserving traditional gender roles.`); - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (arcInfo.fsActive('FSDegradationist')) { r.push(`adjusts ${hisA} appearance to look imposing to conform with your vision that slaves are not human and should be thoroughly degraded.`); - } else if (V.arcologies[0].FSRepopulationFocus !== "unset") { + } else if (arcInfo.fsActive('FSRepopulationFocus')) { r.push(`adjusts ${hisA} appearance to be pregnant to conform with your vision that all women should be pregnant.`); - } else if (V.arcologies[0].FSRestart !== "unset") { + } else if (arcInfo.fsActive('FSRestart')) { r.push(`adjusts ${hisA} appearance to involve chastity.`); - } else if (V.arcologies[0].FSBodyPurist !== "unset") { + } else if (arcInfo.fsActive('FSBodyPurist')) { r.push(`adjusts ${hisA} appearance to look more natural to conform with your vision of an implant free society.`); - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (arcInfo.fsActive('FSTransformationFetishist')) { r.push(`adjusts ${hisA} breasts to be implants to conform with your vision of a society focused on implants, alterations, and modifications.`); - } else if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSYouthPreferentialist')) { r.push(`adopts a more youthful appearance to conform with your vision of a society glorifying young ladies.`); - } else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSMaturityPreferentialist')) { r.push(`adopts a more mature appearance to conform with your vision of a society glorifying older ladies.`); - } else if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + } else if (arcInfo.fsActive('FSSlimnessEnthusiast')) { r.push(`adopts a slimmer appearance to conform with your vision of a society glorifying lithe ladies.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (arcInfo.fsActive('FSAssetExpansionist')) { r.push(`adjusts the size of ${hisA} breasts until they are almost as large as ${heA} is to conform with your vision that bigger is better.`); - } else if (V.arcologies[0].FSPastoralist !== "unset") { + } else if (arcInfo.fsActive('FSPastoralist')) { r.push(`adjusts ${hisA} outfit to farm${girlA} turned business${womanA} to conform with your vision that slaves should be milked.`); - } else if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + } else if (arcInfo.fsActive('FSPhysicalIdealist')) { r.push(`adjusts ${hisA} appearance to show off that ${heA} works out to conform with your vision that all slaves should be tall and strong.`); - } else if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + } else if (arcInfo.fsActive('FSHedonisticDecadence')) { r.push(`adjusts ${hisA} appearance to be more rotund but no less tense to conform with your vision that everyone should enjoy life to the fullest.`); - } else if (V.arcologies[0].FSIntellectualDependency !== "unset") { + } else if (arcInfo.fsActive('FSIntellectualDependency')) { r.push(`adjusts ${hisA} appearance to be more fun and flirty to conform with your vision that slaves shouldn't waste time thinking.`); - } else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + } else if (arcInfo.fsActive('FSSlaveProfessionalism')) { r.push(`adjusts ${hisA} appearance to be more refined to conform with your vision that slaves should be smart and professional.`); - } else if (V.arcologies[0].FSPetiteAdmiration !== "unset") { + } else if (arcInfo.fsActive('FSPetiteAdmiration')) { r.push(`adjusts ${hisA} height to conform with your vision that short is sexy.`); - } else if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { + } else if (arcInfo.fsActive('FSStatuesqueGlorification')) { r.push(`adjusts ${hisA} height to conform with your vision of a society glorifying the tall.`); - } else if (V.arcologies[0].FSChattelReligionist !== "unset") { + } else if (arcInfo.fsActive('FSChattelReligionist')) { r.push(`adjusts ${hisA} outfit to prominently display a religious symbol of your new religion.`); - } else if (V.arcologies[0].FSRomanRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSRomanRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a respectable Roman lady to conform with your vision of building a new Rome.`); - } else if (V.arcologies[0].FSNeoImperialist !== "unset") { + } else if (arcInfo.fsActive('FSNeoImperialist')) { r.push(`adjusts ${hisA} outfit to resemble a high-class old world business${womanA} to conform with your vision of a new Imperial society.`); - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAztecRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Aztec priestess to conform with your vision of building a new Aztec Empire.`); - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEgyptianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Egyptian lady to conform with your vision of building a new land of the Pharaohs.`); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEdoRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Japanese lady to conform with your vision of building a new Edo Japan.`); - } else if (V.arcologies[0].FSArabianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSArabianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Arabian oil heiress to conform with your vision of building a new Sultanate.`); - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSChineseRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Chinese lady to conform with your vision of pursuing the Mandate of Heaven.`); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAntebellumRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Southern lady to conform with your vision of building a new Antebellum South.`); - } else if (V.arcologies[0].FSSupremacist !== "unset") { + } else if (arcInfo.fsActive('FSSupremacist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSupremacistRace} to conform with your vision of glorifying the superior race.`); - } else if (V.arcologies[0].FSSubjugationist !== "unset") { + } else if (arcInfo.fsActive('FSSubjugationist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSubjugationistRace} to conform with your vision of subjugating the inferior race.`); } break; case "fairy": - if (V.arcologies[0].FSPaternalist !== "unset") { + if (arcInfo.fsActive('FSPaternalist')) { r.push(`adjusts ${hisA} appearance to be more conservative to conform with your vision of a well-bred race of slaves.`); - } else if (V.arcologies[0].FSGenderRadicalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderRadicalist')) { r.push(`adjusts ${hisA} appearance to be more androgynous to conform with your vision of gender being defined by power.`); - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderFundamentalist')) { r.push(`adjusts ${hisA} appearance to be more feminine to conform with your vision of preserving traditional gender roles.`); - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (arcInfo.fsActive('FSDegradationist')) { r.push(`adjusts ${hisA} appearance to look like a hooligan to conform with your vision that slaves are not human and should be thoroughly degraded.`); - } else if (V.arcologies[0].FSRepopulationFocus !== "unset") { + } else if (arcInfo.fsActive('FSRepopulationFocus')) { r.push(`stuffs a grape into ${hisA} dress.`); - } else if (V.arcologies[0].FSBodyPurist !== "unset") { + } else if (arcInfo.fsActive('FSBodyPurist')) { r.push(`strips naked and turns down ${hisA} glow.`); - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (arcInfo.fsActive('FSTransformationFetishist')) { r.push(`hops into a jar of jelly.`); - } else if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSYouthPreferentialist')) { r.push(`adopts a more youthful appearance to conform with your vision of a society glorifying young ladies.`); - } else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSMaturityPreferentialist')) { r.push(`adopts a more bullied appearance to conform with your vision of a society glorifying older ladies.`); - } else if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + } else if (arcInfo.fsActive('FSSlimnessEnthusiast')) { r.push(`adopts a slimmer appearance to conform with your vision of a society glorifying lithe ladies.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (arcInfo.fsActive('FSAssetExpansionist')) { r.push(`stuffs some blueberries into ${hisA} shirt.`); - } else if (V.arcologies[0].FSPastoralist !== "unset") { + } else if (arcInfo.fsActive('FSPastoralist')) { r.push(`begins lactating to conform with your vision that slaves should be milked.`); - } else if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + } else if (arcInfo.fsActive('FSPhysicalIdealist')) { r.push(`adjusts ${hisA} appearance to show off that ${heA} works out to conform with your vision that all slaves should be tall and strong.`); - } else if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + } else if (arcInfo.fsActive('FSHedonisticDecadence')) { r.push(`adjusts ${hisA} appearance to be more rotund and relaxed to conform with your vision that everyone should enjoy life to the fullest.`); - } else if (V.arcologies[0].FSIntellectualDependency !== "unset") { + } else if (arcInfo.fsActive('FSIntellectualDependency')) { r.push(`adjusts ${hisA} appearance to be more fun and flirty to conform with your vision that slaves shouldn't waste time thinking.`); - } else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + } else if (arcInfo.fsActive('FSSlaveProfessionalism')) { r.push(`adjusts ${hisA} appearance to be more refined to conform with your vision that slaves should be smart and professional.`); - } else if (V.arcologies[0].FSPetiteAdmiration !== "unset") { + } else if (arcInfo.fsActive('FSPetiteAdmiration')) { r.push(`adjusts ${hisA} height to conform with your vision that short is sexy. ${HeA} pauses for a moment to reconsider things.`); - } else if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { + } else if (arcInfo.fsActive('FSStatuesqueGlorification')) { r.push(`adjusts ${hisA} height to conform with your vision of a society glorifying the tall.`); - } else if (V.arcologies[0].FSChattelReligionist !== "unset") { + } else if (arcInfo.fsActive('FSChattelReligionist')) { r.push(`adjusts ${hisA} outfit to resemble the revealing habit of your new religion in a beautiful gold and white color scheme.`); - } else if (V.arcologies[0].FSRomanRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSRomanRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a respectable Roman ${girlA} to conform with your vision of building a new Rome.`); - } else if (V.arcologies[0].FSNeoImperialist !== "unset") { + } else if (arcInfo.fsActive('FSNeoImperialist')) { r.push(`adjusts ${hisA} outfit to resemble an innocent old-world ${girlA} to conform with your vision of a new Imperial society.`); - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAztecRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Aztec ${womanA} to conform with your vision of building a new Aztec Empire.`); - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEgyptianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Egyptian ${girlA} to conform with your vision of building a new land of the Pharaohs.`); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEdoRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Japanese ${girlA} to conform with your vision of building a new Edo Japan.`); - } else if (V.arcologies[0].FSArabianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSArabianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Arabian ${girlA} to conform with your vision of building a new Sultanate.`); - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSChineseRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Chinese ${girlA} to conform with your vision of pursuing the Mandate of Heaven.`); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAntebellumRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Southern ${girlA} to conform with your vision of building a new Antebellum South.`); - } else if (V.arcologies[0].FSSupremacist !== "unset") { + } else if (arcInfo.fsActive('FSSupremacist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSupremacistRace} to conform with your vision of glorifying the superior race.`); - } else if (V.arcologies[0].FSSubjugationist !== "unset") { + } else if (arcInfo.fsActive('FSSubjugationist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSubjugationistRace} to conform with your vision of subjugating the inferior race.`); } break; case "pregnant fairy": - if (V.arcologies[0].FSPaternalist !== "unset") { + if (arcInfo.fsActive('FSPaternalist')) { r.push(`adjusts ${hisA} appearance to be more conservative, despite ${hisA} pregnancy, to conform with your vision of a well-bred race of slaves.`); - } else if (V.arcologies[0].FSGenderRadicalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderRadicalist')) { r.push(`adjusts ${hisA} appearance to be more androgynous, despite ${hisA} pregnancy, to conform with your vision of gender being defined by power.`); - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderFundamentalist')) { r.push(`adjusts ${hisA} appearance to be even more feminine to conform with your vision of preserving traditional gender roles.`); - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (arcInfo.fsActive('FSDegradationist')) { r.push(`adjusts ${hisA} appearance to look like a hooligan to conform with your vision that slaves are not human and should be thoroughly degraded.`); - } else if (V.arcologies[0].FSRepopulationFocus !== "unset") { + } else if (arcInfo.fsActive('FSRepopulationFocus')) { r.push(`distends ${hisA} pregnancy further to conform with your vision that all women should be pregnant.`); - } else if (V.arcologies[0].FSRestart !== "unset") { + } else if (arcInfo.fsActive('FSRestart')) { r.push(`adjusts ${hisA} appearance to involve chastity, before running ${hisA} hand across ${hisA} belly and pondering what to do about it.`); - } else if (V.arcologies[0].FSBodyPurist !== "unset") { + } else if (arcInfo.fsActive('FSBodyPurist')) { r.push(`strips naked and turns down ${hisA} glow.`); - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (arcInfo.fsActive('FSTransformationFetishist')) { r.push(`hops into a jar of jelly.`); - } else if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSYouthPreferentialist')) { r.push(`adopts a more youthful appearance to conform with your vision of a society glorifying young ladies.`); - } else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSMaturityPreferentialist')) { r.push(`adopts a more bullied appearance to conform with your vision of a society glorifying older ladies.`); - } else if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + } else if (arcInfo.fsActive('FSSlimnessEnthusiast')) { r.push(`adopts a slimmer appearance, despite ${hisA} pregnancy, to conform with your vision of a society glorifying lithe ladies.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (arcInfo.fsActive('FSAssetExpansionist')) { r.push(`stuffs some blueberries into ${hisA} shirt.`); - } else if (V.arcologies[0].FSPastoralist !== "unset") { + } else if (arcInfo.fsActive('FSPastoralist')) { r.push(`swells ${hisA} breasts with extra milk to conform with your vision that slaves should be milked.`); - } else if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + } else if (arcInfo.fsActive('FSPhysicalIdealist')) { r.push(`tries to stretch out, but fails to get any larger.`); - } else if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + } else if (arcInfo.fsActive('FSHedonisticDecadence')) { r.push(`adjusts ${hisA} appearance to be more rotund and relaxed to conform with your vision that everyone should enjoy life to the fullest.`); - } else if (V.arcologies[0].FSIntellectualDependency !== "unset") { + } else if (arcInfo.fsActive('FSIntellectualDependency')) { r.push(`adjusts ${hisA} appearance to be more fun and flirty to conform with your vision that slaves shouldn't waste time thinking.`); - } else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + } else if (arcInfo.fsActive('FSSlaveProfessionalism')) { r.push(`adjusts ${hisA} appearance to be more refined to conform with your vision that slaves should be smart and professional.`); - } else if (V.arcologies[0].FSPetiteAdmiration !== "unset") { + } else if (arcInfo.fsActive('FSPetiteAdmiration')) { r.push(`adjusts ${hisA} height to conform with your vision that short is sexy. ${HeA} pauses for a moment to reconsider things.`); - } else if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { + } else if (arcInfo.fsActive('FSStatuesqueGlorification')) { r.push(`adjusts ${hisA} height to conform with your vision of a society glorifying the tall.`); - } else if (V.arcologies[0].FSChattelReligionist !== "unset") { + } else if (arcInfo.fsActive('FSChattelReligionist')) { r.push(`adjusts ${hisA} outfit to resemble the revealing habit of your new religion in a beautiful gold and white color scheme.`); - } else if (V.arcologies[0].FSRomanRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSRomanRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Roman ${girlA} to conform with your vision of building a new Rome.`); - } else if (V.arcologies[0].FSNeoImperialist !== "unset") { + } else if (arcInfo.fsActive('FSNeoImperialist')) { r.push(`adjusts ${hisA} outfit to resemble an old-world ${girlA} to conform with your vision of a new Imperial society.`); - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAztecRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Aztec ${womanA} to conform with your vision of building a new Aztec Empire.`); - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEgyptianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Egyptian ${girlA} to conform with your vision of building a new land of the Pharaohs.`); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEdoRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Japanese ${girlA} to conform with your vision of building a new Edo Japan.`); - } else if (V.arcologies[0].FSArabianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSArabianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Arabian ${girlA} to conform with your vision of building a new Sultanate.`); - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSChineseRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Chinese ${girlA} to conform with your vision of pursuing the Mandate of Heaven.`); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAntebellumRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Southern ${girlA} to conform with your vision of building a new Antebellum South.`); - } else if (V.arcologies[0].FSSupremacist !== "unset") { + } else if (arcInfo.fsActive('FSSupremacist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSupremacistRace} to conform with your vision of glorifying the superior race.`); - } else if (V.arcologies[0].FSSubjugationist !== "unset") { + } else if (arcInfo.fsActive('FSSubjugationist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSubjugationistRace} to conform with your vision of subjugating the inferior race.`); } break; case "goddess": - if (V.arcologies[0].FSPaternalist !== "unset") { + if (arcInfo.fsActive('FSPaternalist')) { r.push(`adjusts ${hisA} appearance to be slightly conservative to conform with your vision of a well-bred race of slaves.`); - } else if (V.arcologies[0].FSGenderRadicalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderRadicalist')) { r.push(`adjusts ${hisA} appearance to be more androgynous, despite ${hisA} pregnant belly, to conform with your vision of gender being defined by power.`); - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderFundamentalist')) { r.push(`adjusts ${hisA} appearance to be positively radiant to conform with your vision of preserving traditional gender roles.`); - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (arcInfo.fsActive('FSDegradationist')) { r.push(`adjusts ${hisA} appearance have piercings in ${hisA} clit, nipples and navel to conform with your vision that slaves are not human and should be thoroughly degraded.`); - } else if (V.arcologies[0].FSBodyPurist !== "unset") { + } else if (arcInfo.fsActive('FSBodyPurist')) { r.push(`adjusts ${hisA} appearance to look more natural to conform with your vision of an implant free society.`); - } else if (V.arcologies[0].FSRepopulationFocus !== "unset") { + } else if (arcInfo.fsActive('FSRepopulationFocus')) { r.push(`adjusts ${hisA} appearance to be even more pregnant to conform with your vision that all women should be pregnant.`); - } else if (V.arcologies[0].FSRestart !== "unset") { + } else if (arcInfo.fsActive('FSRestart')) { r.push(`adjusts ${hisA} appearance to involve chastity, before hefting ${hisA} huge belly and pondering what to do about it.`); - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (arcInfo.fsActive('FSTransformationFetishist')) { r.push(`adjusts the firmness and size of ${hisA} breasts and ass to resemble implants to conform with your vision of a society focused on implants, alterations, and modifications.`); - } else if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSYouthPreferentialist')) { r.push(`adopts a more youthful appearance to conform with your vision of a society glorifying young ladies.`); - } else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSMaturityPreferentialist')) { r.push(`adopts a more mature appearance to conform with your vision of a society glorifying older ladies.`); - } else if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + } else if (arcInfo.fsActive('FSSlimnessEnthusiast')) { r.push(`adopts a lithe appearance despite ${hisA} pregnant belly to conform with your vision of a society glorifying lithe ladies.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (arcInfo.fsActive('FSAssetExpansionist')) { r.push(`adjusts the size of ${hisA} breasts until they nearly eclipse ${hisA} pregnant belly to conform with your vision that bigger is better.`); - } else if (V.arcologies[0].FSPastoralist !== "unset") { + } else if (arcInfo.fsActive('FSPastoralist')) { r.push(`unleashes a torrent of milk from ${hisA} swollen breasts to conform with your vision that slaves should be milked.`); - } else if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + } else if (arcInfo.fsActive('FSPhysicalIdealist')) { r.push(`adjusts ${hisA} appearance to be trim and athletic, despite ${hisA} bulk, to conform with your vision that all slaves should be tall and strong.`); - } else if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + } else if (arcInfo.fsActive('FSHedonisticDecadence')) { r.push(`adjusts ${hisA} appearance to include a thick layer of softness to conform with your vision that everyone should enjoy life to the fullest.`); - } else if (V.arcologies[0].FSIntellectualDependency !== "unset") { + } else if (arcInfo.fsActive('FSIntellectualDependency')) { r.push(`adjusts ${hisA} appearance to be more fun and flirty to conform with your vision that slaves shouldn't waste time thinking.`); - } else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + } else if (arcInfo.fsActive('FSSlaveProfessionalism')) { r.push(`adjusts ${hisA} appearance to be even more refined to conform with your vision that slaves should be smart and professional.`); - } else if (V.arcologies[0].FSPetiteAdmiration !== "unset") { + } else if (arcInfo.fsActive('FSPetiteAdmiration')) { r.push(`adjusts ${hisA} height to conform with your vision that short is sexy.`); - } else if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { + } else if (arcInfo.fsActive('FSStatuesqueGlorification')) { r.push(`adjusts ${hisA} height to conform with your vision of a society glorifying the tall.`); - } else if (V.arcologies[0].FSChattelReligionist !== "unset") { + } else if (arcInfo.fsActive('FSChattelReligionist')) { r.push(`adjusts appearance to resemble an angel of your new religion.`); - } else if (V.arcologies[0].FSRomanRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSRomanRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Roman lady to conform with your vision of building a new Rome.`); - } else if (V.arcologies[0].FSNeoImperialist !== "unset") { + } else if (arcInfo.fsActive('FSNeoImperialist')) { r.push(`adjusts ${hisA} outfit to resemble a high-tech ${womanA} bearing your crest to conform with your vision of a new Imperial society.`); - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAztecRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Aztec ${womanA} to conform with your vision of building a new Aztec Empire.`); - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEgyptianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Egyptian lady to conform with your vision of building a new land of the Pharaohs.`); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEdoRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Japanese lady to conform with your vision of building a new Edo Japan.`); - } else if (V.arcologies[0].FSArabianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSArabianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Arabian lady to conform with your vision of building a new Sultanate.`); - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSChineseRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Chinese lady to conform with your vision of pursuing the Mandate of Heaven.`); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAntebellumRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble Columbia, goddess of America, to conform with your vision of building a Antebellum South.`); - } else if (V.arcologies[0].FSSupremacist !== "unset") { + } else if (arcInfo.fsActive('FSSupremacist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSupremacistRace} to conform with your vision of glorifying the superior race.`); - } else if (V.arcologies[0].FSSubjugationist !== "unset") { + } else if (arcInfo.fsActive('FSSubjugationist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSubjugationistRace} to conform with your vision of subjugating the inferior race.`); } break; case "hypergoddess": - if (V.arcologies[0].FSPaternalist !== "unset") { + if (arcInfo.fsActive('FSPaternalist')) { r.push(`adjusts ${hisA} appearance to be more classy to conform with your vision of a well-bred race of slaves.`); - } else if (V.arcologies[0].FSGenderRadicalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderRadicalist')) { r.push(`sprouts an enormous cock and balls to go with ${hisA} pregnancy to conform with your vision of gender being defined by power.`); - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderFundamentalist')) { r.push(`adjusts ${hisA} appearance to be a motherly idol to conform with your vision of preserving traditional gender roles.`); - } else if (V.arcologies[0].FSRepopulationFocus !== "unset") { + } else if (arcInfo.fsActive('FSRepopulationFocus')) { r.push(`adjusts ${hisA} appearance to be even more pregnant to conform with your vision that all women should be pregnant.`); - } else if (V.arcologies[0].FSRestart !== "unset") { + } else if (arcInfo.fsActive('FSRestart')) { r.push(`adjusts ${hisA} appearance to involve chastity, before hefting ${hisA} massive belly and pondering what to do about it.`); - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (arcInfo.fsActive('FSDegradationist')) { r.push(`adjusts ${hisA} appearance have piercings in ${hisA} clit, nipples and navel, as well as numerous studs across ${hisA} belly to conform with your vision that slaves are not human and should be thoroughly degraded.`); - } else if (V.arcologies[0].FSBodyPurist !== "unset") { + } else if (arcInfo.fsActive('FSBodyPurist')) { r.push(`adjusts ${hisA} appearance to look more natural to conform with your vision of an implant free society.`); - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (arcInfo.fsActive('FSTransformationFetishist')) { r.push(`adjusts the firmness and size of ${hisA} breasts and ass to resemble implants to conform with your vision of a society focused on implants, alterations, and modifications.`); - } else if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSYouthPreferentialist')) { r.push(`adopts a more youthful appearance to conform with your vision of a society glorifying young ladies.`); - } else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSMaturityPreferentialist')) { r.push(`adopts a more mature appearance to conform with your vision of a society glorifying older ladies.`); - } else if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + } else if (arcInfo.fsActive('FSSlimnessEnthusiast')) { r.push(`adopts a lithe appearance despite ${hisA} pregnant belly to conform with your vision of a society glorifying lithe ladies.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (arcInfo.fsActive('FSAssetExpansionist')) { r.push(`adjusts the size of ${hisA} breasts until they nearly eclipse ${hisA} pregnant belly to conform with your vision that bigger is better.`); - } else if (V.arcologies[0].FSPastoralist !== "unset") { + } else if (arcInfo.fsActive('FSPastoralist')) { r.push(`unleashes a torrent of milk from ${hisA} swollen breasts to conform with your vision that slaves should be milked.`); - } else if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + } else if (arcInfo.fsActive('FSPhysicalIdealist')) { r.push(`adjusts ${hisA} appearance to be bulky and muscular to conform with your vision that all slaves should be tall and strong.`); - } else if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + } else if (arcInfo.fsActive('FSHedonisticDecadence')) { r.push(`adjusts ${hisA} appearance to include a thick layer of softness to conform with your vision that everyone should enjoy life to the fullest.`); - } else if (V.arcologies[0].FSIntellectualDependency !== "unset") { + } else if (arcInfo.fsActive('FSIntellectualDependency')) { r.push(`adjusts ${hisA} appearance to be more fun and flirty to conform with your vision that slaves shouldn't waste time thinking.`); - } else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + } else if (arcInfo.fsActive('FSSlaveProfessionalism')) { r.push(`adjusts ${hisA} appearance to be more refined to conform with your vision that slaves should be smart and professional.`); - } else if (V.arcologies[0].FSPetiteAdmiration !== "unset") { + } else if (arcInfo.fsActive('FSPetiteAdmiration')) { r.push(`adjusts ${hisA} height to conform with your vision that short is sexy.`); - } else if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { + } else if (arcInfo.fsActive('FSStatuesqueGlorification')) { r.push(`adjusts ${hisA} height to conform with your vision of a society glorifying the tall.`); - } else if (V.arcologies[0].FSChattelReligionist !== "unset") { + } else if (arcInfo.fsActive('FSChattelReligionist')) { r.push(`adjusts appearance to resemble an angel of your new religion.`); - } else if (V.arcologies[0].FSRomanRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSRomanRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Roman lady to conform with your vision of building a new Rome.`); - } else if (V.arcologies[0].FSNeoImperialist !== "unset") { + } else if (arcInfo.fsActive('FSNeoImperialist')) { r.push(`adjusts ${hisA} outfit to resemble a high-tech ${womanA} bearing your crest to conform with your vision of a new Imperial society.`); - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAztecRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Aztec ${womanA} to conform with your vision of building a new Aztec Empire.`); - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEgyptianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Egyptian lady to conform with your vision of building a new land of the Pharaohs.`); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEdoRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Japanese lady to conform with your vision of building a new Edo Japan.`); - } else if (V.arcologies[0].FSArabianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSArabianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Arabian lady to conform with your vision of building a new Sultanate.`); - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSChineseRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Chinese lady to conform with your vision of pursuing the Mandate of Heaven.`); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAntebellumRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble Columbia, goddess of America, to conform with your vision of building a new Antebellum South.`); - } else if (V.arcologies[0].FSSupremacist !== "unset") { + } else if (arcInfo.fsActive('FSSupremacist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSupremacistRace} to conform with your vision of glorifying the superior race.`); - } else if (V.arcologies[0].FSSubjugationist !== "unset") { + } else if (arcInfo.fsActive('FSSubjugationist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSubjugationistRace} to conform with your vision of subjugating the inferior race.`); } break; case "loli": - if (V.arcologies[0].FSPaternalist !== "unset") { + if (arcInfo.fsActive('FSPaternalist')) { r.push(`adjusts ${hisA} appearance to be more conservative to conform with your vision of a well-bred race of slaves.`); - } else if (V.arcologies[0].FSGenderRadicalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderRadicalist')) { r.push(`adjusts ${hisA} appearance to be more androgynous to conform with your vision of gender being defined by power.`); - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderFundamentalist')) { r.push(`adjusts ${hisA} appearance to be more feminine to conform with your vision of preserving traditional gender roles.`); - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (arcInfo.fsActive('FSDegradationist')) { r.push(`adjusts ${hisA} appearance to look like a hooligan to conform with your vision that slaves are not human and should be thoroughly degraded.`); - } else if (V.arcologies[0].FSRepopulationFocus !== "unset") { + } else if (arcInfo.fsActive('FSRepopulationFocus')) { r.push(`adjusts ${hisA} appearance to be pregnant to conform with your vision that all women should be pregnant.`); - } else if (V.arcologies[0].FSRestart !== "unset") { + } else if (arcInfo.fsActive('FSRestart')) { r.push(`adjusts ${hisA} appearance to involve chastity.`); - } else if (V.arcologies[0].FSBodyPurist !== "unset") { + } else if (arcInfo.fsActive('FSBodyPurist')) { r.push(`adjusts ${hisA} appearance to look more natural to conform with your vision of an implant free society.`); - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (arcInfo.fsActive('FSTransformationFetishist')) { r.push(`inflates ${hisA} breasts until they are comically huge and rounded to conform with your vision of a society focused on implants, alterations, and modifications.`); - } else if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSYouthPreferentialist')) { r.push(`adopts a more youthful appearance to conform with your vision of a society glorifying young ladies.`); - } else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSMaturityPreferentialist')) { r.push(`adopts a more bullied appearance to conform with your vision of a society glorifying older ladies.`); - } else if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + } else if (arcInfo.fsActive('FSSlimnessEnthusiast')) { r.push(`adopts a slimmer appearance to conform with your vision of a society glorifying lithe ladies.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (arcInfo.fsActive('FSAssetExpansionist')) { r.push(`adjusts the size of ${hisA} breasts until they are bigger than ${hisA} head to conform with your vision that bigger is better.`); - } else if (V.arcologies[0].FSPastoralist !== "unset") { + } else if (arcInfo.fsActive('FSPastoralist')) { r.push(`begins lactating to conform with your vision that slaves should be milked.`); - } else if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + } else if (arcInfo.fsActive('FSPhysicalIdealist')) { r.push(`adjusts ${hisA} appearance to show off that ${heA} works out to conform with your vision that all slaves should be tall and strong.`); - } else if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + } else if (arcInfo.fsActive('FSHedonisticDecadence')) { r.push(`adjusts ${hisA} appearance to be more rotund and relaxed to conform with your vision that everyone should enjoy life to the fullest.`); - } else if (V.arcologies[0].FSIntellectualDependency !== "unset") { + } else if (arcInfo.fsActive('FSIntellectualDependency')) { r.push(`adjusts ${hisA} appearance to be more fun and flirty to conform with your vision that slaves shouldn't waste time thinking.`); - } else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + } else if (arcInfo.fsActive('FSSlaveProfessionalism')) { r.push(`adjusts ${hisA} appearance to be more refined to conform with your vision that slaves should be smart and professional.`); - } else if (V.arcologies[0].FSPetiteAdmiration !== "unset") { + } else if (arcInfo.fsActive('FSPetiteAdmiration')) { r.push(`adjusts ${hisA} height to conform with your vision that short is sexy.`); - } else if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { + } else if (arcInfo.fsActive('FSStatuesqueGlorification')) { r.push(`adjusts ${hisA} height to conform with your vision of a society glorifying the tall.`); - } else if (V.arcologies[0].FSChattelReligionist !== "unset") { + } else if (arcInfo.fsActive('FSChattelReligionist')) { r.push(`adjusts ${hisA} outfit to prominently display a religious symbol of your new religion.`); - } else if (V.arcologies[0].FSRomanRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSRomanRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a respectable Roman ${girlA} to conform with your vision of building a new Rome.`); - } else if (V.arcologies[0].FSNeoImperialist !== "unset") { + } else if (arcInfo.fsActive('FSNeoImperialist')) { r.push(`adjusts ${hisA} outfit to resemble an innocent old-world ${girlA} to conform with your vision of a new Imperial society.`); - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAztecRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Aztec ${girlA} to conform with your vision of building a new Aztec Empire.`); - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEgyptianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Egyptian ${girlA} to conform with your vision of building a new land of the Pharaohs.`); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEdoRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Japanese ${girlA} to conform with your vision of building a new Edo Japan.`); - } else if (V.arcologies[0].FSArabianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSArabianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Arabian ${girlA} to conform with your vision of building a new Sultanate.`); - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSChineseRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Chinese ${girlA} to conform with your vision of pursuing the Mandate of Heaven.`); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAntebellumRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Southern ${girlA} to conform with your vision of building a new Antebellum South.`); - } else if (V.arcologies[0].FSSupremacist !== "unset") { + } else if (arcInfo.fsActive('FSSupremacist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSupremacistRace} to conform with your vision of glorifying the superior race.`); - } else if (V.arcologies[0].FSSubjugationist !== "unset") { + } else if (arcInfo.fsActive('FSSubjugationist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSubjugationistRace} to conform with your vision of subjugating the inferior race.`); } break; case "preggololi": - if (V.arcologies[0].FSPaternalist !== "unset") { + if (arcInfo.fsActive('FSPaternalist')) { r.push(`adjusts ${hisA} appearance to be more conservative, despite ${hisA} pregnancy, to conform with your vision of a well-bred race of slaves.`); - } else if (V.arcologies[0].FSGenderRadicalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderRadicalist')) { r.push(`adjusts ${hisA} appearance to be more androgynous, despite ${hisA} pregnancy, to conform with your vision of gender being defined by power.`); - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderFundamentalist')) { r.push(`adjusts ${hisA} appearance to be even more feminine to conform with your vision of preserving traditional gender roles.`); - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (arcInfo.fsActive('FSDegradationist')) { r.push(`adjusts ${hisA} appearance to look like a hooligan to conform with your vision that slaves are not human and should be thoroughly degraded.`); - } else if (V.arcologies[0].FSRepopulationFocus !== "unset") { + } else if (arcInfo.fsActive('FSRepopulationFocus')) { r.push(`distends ${hisA} pregnancy further to conform with your vision that all women should be pregnant.`); - } else if (V.arcologies[0].FSRestart !== "unset") { + } else if (arcInfo.fsActive('FSRestart')) { r.push(`adjusts ${hisA} appearance to involve chastity, before running ${hisA} hand across ${hisA} belly and pondering what to do about it.`); - } else if (V.arcologies[0].FSBodyPurist !== "unset") { + } else if (arcInfo.fsActive('FSBodyPurist')) { r.push(`adjusts ${hisA} appearance to look more natural to conform with your vision of an implant free society.`); - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (arcInfo.fsActive('FSTransformationFetishist')) { r.push(`inflates ${hisA} breasts until they are comically huge and rounded to conform with your vision of a society focused on implants, alterations, and modifications.`); - } else if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSYouthPreferentialist')) { r.push(`adopts a more youthful appearance to conform with your vision of a society glorifying young ladies.`); - } else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSMaturityPreferentialist')) { r.push(`adopts a more bullied appearance to conform with your vision of a society glorifying older ladies.`); - } else if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + } else if (arcInfo.fsActive('FSSlimnessEnthusiast')) { r.push(`adopts a slimmer appearance, despite ${hisA} pregnancy, to conform with your vision of a society glorifying lithe ladies.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (arcInfo.fsActive('FSAssetExpansionist')) { r.push(`adjusts the size of ${hisA} breasts until they are bigger than ${hisA} head to conform with your vision that bigger is better.`); - } else if (V.arcologies[0].FSPastoralist !== "unset") { + } else if (arcInfo.fsActive('FSPastoralist')) { r.push(`swells ${hisA} breasts with extra milk to conform with your vision that slaves should be milked.`); - } else if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + } else if (arcInfo.fsActive('FSPhysicalIdealist')) { r.push(`adjusts ${hisA} appearance to show off that ${heA} works out to conform with your vision that all slaves should be tall and strong.`); - } else if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + } else if (arcInfo.fsActive('FSHedonisticDecadence')) { r.push(`adjusts ${hisA} appearance to be more rotund and relaxed to conform with your vision that everyone should enjoy life to the fullest.`); - } else if (V.arcologies[0].FSIntellectualDependency !== "unset") { + } else if (arcInfo.fsActive('FSIntellectualDependency')) { r.push(`adjusts ${hisA} appearance to be more fun and flirty to conform with your vision that slaves shouldn't waste time thinking.`); - } else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + } else if (arcInfo.fsActive('FSSlaveProfessionalism')) { r.push(`adjusts ${hisA} appearance to be more refined to conform with your vision that slaves should be smart and professional.`); - } else if (V.arcologies[0].FSPetiteAdmiration !== "unset") { + } else if (arcInfo.fsActive('FSPetiteAdmiration')) { r.push(`adjusts ${hisA} height to conform with your vision that short is sexy.`); - } else if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { + } else if (arcInfo.fsActive('FSStatuesqueGlorification')) { r.push(`adjusts ${hisA} height to conform with your vision of a society glorifying the tall.`); - } else if (V.arcologies[0].FSChattelReligionist !== "unset") { + } else if (arcInfo.fsActive('FSChattelReligionist')) { r.push(`adjusts ${hisA} outfit to prominently display a religious symbol of your new religion.`); - } else if (V.arcologies[0].FSRomanRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSRomanRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Roman ${girlA} to conform with your vision of building a new Rome.`); - } else if (V.arcologies[0].FSNeoImperialist !== "unset") { + } else if (arcInfo.fsActive('FSNeoImperialist')) { r.push(`adjusts ${hisA} outfit to resemble an old-world ${girlA} to conform with your vision of a new Imperial society.`); - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAztecRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Aztec ${girlA} to conform with your vision of building a new Aztec Empire.`); - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEgyptianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Egyptian ${girlA} to conform with your vision of building a new land of the Pharaohs.`); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEdoRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Japanese ${girlA} to conform with your vision of building a new Edo Japan.`); - } else if (V.arcologies[0].FSArabianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSArabianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Arabian ${girlA} to conform with your vision of building a new Sultanate.`); - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSChineseRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Chinese ${girlA} to conform with your vision of pursuing the Mandate of Heaven.`); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAntebellumRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Southern ${girlA} to confirm with your vision of building a new Antebellum South.`); - } else if (V.arcologies[0].FSSupremacist !== "unset") { + } else if (arcInfo.fsActive('FSSupremacist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSupremacistRace} to conform with your vision of glorifying the superior race.`); - } else if (V.arcologies[0].FSSubjugationist !== "unset") { + } else if (arcInfo.fsActive('FSSubjugationist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSubjugationistRace} to conform with your vision of subjugating the inferior race.`); } break; case "angel": - if (V.arcologies[0].FSPaternalist !== "unset") { + if (arcInfo.fsActive('FSPaternalist')) { r.push(`adjusts ${hisA} appearance to include a conservative skirt and a fine blouse, complete with slits for ${hisA} wings, to conform with your vision of a well-bred race of slaves.`); - } else if (V.arcologies[0].FSGenderRadicalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderRadicalist')) { r.push(`adjusts ${hisA} appearance to be more androgynous to conform with your vision of gender being defined by power.`); - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderFundamentalist')) { r.push(`adjusts ${hisA} appearance to be even more feminine to conform with your vision of preserving traditional gender roles.`); - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (arcInfo.fsActive('FSDegradationist')) { r.push(`adjusts ${hisA} appearance to include black feathers, lipstick and eyeliner to conform with your vision that slaves are not human and should be thoroughly degraded.`); - } else if (V.arcologies[0].FSRepopulationFocus !== "unset") { + } else if (arcInfo.fsActive('FSRepopulationFocus')) { r.push(`bulges ${hisA} middle into a full term pregnancy. ${HeA} blushes and gasps at what ${heA} just did, quickly reverting it.`); - } else if (V.arcologies[0].FSRestart !== "unset") { + } else if (arcInfo.fsActive('FSRestart')) { r.push(`adjusts ${hisA} appearance to be even more flawless.`); - } else if (V.arcologies[0].FSBodyPurist !== "unset") { + } else if (arcInfo.fsActive('FSBodyPurist')) { r.push(`adjusts ${hisA} appearance to look even more natural to conform with your vision of an implant free society.`); - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (arcInfo.fsActive('FSTransformationFetishist')) { r.push(`inflates ${hisA} breasts until they are comically huge and rounded to conform with your vision of a society focused on implants, alterations, and modifications.`); - } else if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSYouthPreferentialist')) { r.push(`adopts a more youthful appearance to conform with your vision of a society glorifying young ladies.`); - } else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSMaturityPreferentialist')) { r.push(`adopts a more mature appearance to conform with your vision of a society glorifying older ladies.`); - } else if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + } else if (arcInfo.fsActive('FSSlimnessEnthusiast')) { r.push(`adopts a slimmer appearance to conform with your vision of a society glorifying lithe ladies.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (arcInfo.fsActive('FSAssetExpansionist')) { r.push(`adjusts the size of ${hisA} breasts until they are bigger than ${hisA} head to conform with your vision that bigger is better. ${HeA} struggles to take flight before giving up.`); - } else if (V.arcologies[0].FSPastoralist !== "unset") { + } else if (arcInfo.fsActive('FSPastoralist')) { r.push(`swells ${hisA} breasts with milk to conform with your vision that slaves should be milked.`); - } else if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + } else if (arcInfo.fsActive('FSPhysicalIdealist')) { r.push(`adjusts ${hisA} appearance to be slightly toned to conform with your vision that all slaves should be tall and strong.`); - } else if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + } else if (arcInfo.fsActive('FSHedonisticDecadence')) { r.push(`adjusts ${hisA} appearance to be more slightly plump to conform with your vision that everyone should enjoy life to the fullest.`); - } else if (V.arcologies[0].FSIntellectualDependency !== "unset") { + } else if (arcInfo.fsActive('FSIntellectualDependency')) { r.push(`adjusts ${hisA} appearance to be more fun and flirty to conform with your vision that slaves shouldn't waste time thinking.`); - } else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + } else if (arcInfo.fsActive('FSSlaveProfessionalism')) { r.push(`adjusts ${hisA} appearance to be even more refined to conform with your vision that slaves should be smart and professional.`); - } else if (V.arcologies[0].FSPetiteAdmiration !== "unset") { + } else if (arcInfo.fsActive('FSPetiteAdmiration')) { r.push(`adjusts ${hisA} height to conform with your vision that short is sexy.`); - } else if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { + } else if (arcInfo.fsActive('FSStatuesqueGlorification')) { r.push(`adjusts ${hisA} height to conform with your vision of a society glorifying the tall.`); - } else if (V.arcologies[0].FSChattelReligionist !== "unset") { + } else if (arcInfo.fsActive('FSChattelReligionist')) { r.push(`adjusts ${hisA} outfit to prominently display a religious symbol of your new religion.`); - } else if (V.arcologies[0].FSRomanRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSRomanRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Roman ${womanA} to conform with your vision of building a new Rome.`); - } else if (V.arcologies[0].FSNeoImperialist !== "unset") { + } else if (arcInfo.fsActive('FSNeoImperialist')) { r.push(`adjusts ${hisA} outfit to resemble a high-tech ${womanA} bearing your crest to conform with your vision of a new Imperial society.`); - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAztecRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Aztec priestess to conform with your vision of building a new Aztec Empire.`); - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEgyptianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Egyptian ${womanA} to conform with your vision of building a new land of the Pharaohs.`); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEdoRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Japanese ${womanA} to conform with your vision of building a new Edo Japan.`); - } else if (V.arcologies[0].FSArabianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSArabianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Arabian ${womanA} to conform with your vision of building a new Sultanate.`); - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSChineseRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Chinese ${womanA} to conform with your vision of pursuing the Mandate of Heaven.`); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAntebellumRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Southern ${womanA} to confirm with your vision of building a new Antebellum South.`); - } else if (V.arcologies[0].FSSupremacist !== "unset") { + } else if (arcInfo.fsActive('FSSupremacist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSupremacistRace} to conform with your vision of glorifying the superior race.`); - } else if (V.arcologies[0].FSSubjugationist !== "unset") { + } else if (arcInfo.fsActive('FSSubjugationist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSubjugationistRace} to conform with your vision of subjugating the inferior race.`); } break; case "cherub": - if (V.arcologies[0].FSPaternalist !== "unset") { + if (arcInfo.fsActive('FSPaternalist')) { r.push(`adjusts ${hisA} appearance to be more prim and proper to conform with your vision of a well-bred race of slaves.`); - } else if (V.arcologies[0].FSGenderRadicalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderRadicalist')) { r.push(`adjusts ${hisA} appearance to be more androgynous to conform with your vision of gender being defined by power.`); - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderFundamentalist')) { r.push(`adjusts ${hisA} appearance to be more feminine and cute to conform with your vision of preserving traditional gender roles.`); - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (arcInfo.fsActive('FSDegradationist')) { r.push(`blackens ${hisA} feathers to conform with your vision that slaves are not human and should be thoroughly degraded.`); - } else if (V.arcologies[0].FSRepopulationFocus !== "unset") { + } else if (arcInfo.fsActive('FSRepopulationFocus')) { r.push(`adjusts ${hisA} appearance to be pregnant to conform with your vision that all women should be pregnant.`); - } else if (V.arcologies[0].FSRestart !== "unset") { + } else if (arcInfo.fsActive('FSRestart')) { r.push(`adjusts ${hisA} appearance to involve chastity.`); - } else if (V.arcologies[0].FSBodyPurist !== "unset") { + } else if (arcInfo.fsActive('FSBodyPurist')) { r.push(`adjusts ${hisA} appearance to look more natural, complete with freckles and perfect teeth, to conform with your vision of an implant free society.`); - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (arcInfo.fsActive('FSTransformationFetishist')) { r.push(`adjusts ${hisA} breasts to resemble implants to conform with your vision of a society focused on implants, alterations, and modifications.`); - } else if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSYouthPreferentialist')) { r.push(`adopts cuter, even more innocent attitude to conform with your vision of a society glorifying young ladies.`); - } else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSMaturityPreferentialist')) { r.push(`adjusts ${hisA} appearance to appear older to conform with your vision of a society glorifying older ladies.`); - } else if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + } else if (arcInfo.fsActive('FSSlimnessEnthusiast')) { r.push(`adopts a slimmer appearance to conform with your vision of a society glorifying lithe ladies. ${HeA} flutters around, enjoying ${hisA} lighter weight.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (arcInfo.fsActive('FSAssetExpansionist')) { r.push(`adjusts the size of ${hisA} breasts until ${heA} crashes to the ground under their weight to conform with your vision that bigger is better.`); - } else if (V.arcologies[0].FSPastoralist !== "unset") { + } else if (arcInfo.fsActive('FSPastoralist')) { r.push(`begins lactating to conform with your vision that slaves should be milked.`); - } else if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + } else if (arcInfo.fsActive('FSPhysicalIdealist')) { r.push(`adjusts ${hisA} appearance to look muscular to conform with your vision that all slaves should be tall and strong.`); - } else if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + } else if (arcInfo.fsActive('FSHedonisticDecadence')) { r.push(`adjusts ${hisA} appearance to be more rotund and relaxed to conform with your vision that everyone should enjoy life to the fullest.`); - } else if (V.arcologies[0].FSIntellectualDependency !== "unset") { + } else if (arcInfo.fsActive('FSIntellectualDependency')) { r.push(`adjusts ${hisA} appearance to be more fun and flirty to conform with your vision that slaves shouldn't waste time thinking.`); - } else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + } else if (arcInfo.fsActive('FSSlaveProfessionalism')) { r.push(`adjusts ${hisA} appearance to be more refined to conform with your vision that slaves should be smart and professional.`); - } else if (V.arcologies[0].FSPetiteAdmiration !== "unset") { + } else if (arcInfo.fsActive('FSPetiteAdmiration')) { r.push(`adjusts ${hisA} height to conform with your vision that short is sexy.`); - } else if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { + } else if (arcInfo.fsActive('FSStatuesqueGlorification')) { r.push(`adjusts ${hisA} height to conform with your vision of a society glorifying the tall.`); - } else if (V.arcologies[0].FSChattelReligionist !== "unset") { + } else if (arcInfo.fsActive('FSChattelReligionist')) { r.push(`adjusts ${hisA} outfit to prominently display a religious symbol of your new religion.`); - } else if (V.arcologies[0].FSRomanRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSRomanRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Roman ${womanA} to conform with your vision of building a new Rome.`); - } else if (V.arcologies[0].FSNeoImperialist !== "unset") { + } else if (arcInfo.fsActive('FSNeoImperialist')) { r.push(`adjusts ${hisA} outfit to resemble a high-tech ${womanA} bearing your crest to conform with your vision of a new Imperial society.`); - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAztecRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Aztec priestess to conform with your vision of building a new Aztec Empire.`); - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEgyptianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Egyptian ${womanA} to conform with your vision of building a new land of the Pharaohs.`); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEdoRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Japanese ${womanA} to conform with your vision of building a new Edo Japan.`); - } else if (V.arcologies[0].FSArabianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSArabianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Arabian ${womanA} to conform with your vision of building a new Sultanate.`); - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSChineseRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Chinese ${womanA} to conform with your vision of pursuing the Mandate of Heaven.`); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAntebellumRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Southern ${womanA} to confirm with your vision of building a new Antebellum South.`); - } else if (V.arcologies[0].FSSupremacist !== "unset") { + } else if (arcInfo.fsActive('FSSupremacist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSupremacistRace} to conform with your vision of glorifying the superior race.`); - } else if (V.arcologies[0].FSSubjugationist !== "unset") { + } else if (arcInfo.fsActive('FSSubjugationist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSubjugationistRace} to conform with your vision of subjugating the inferior race.`); } break; case "incubus": - if (V.arcologies[0].FSPaternalist !== "unset") { + if (arcInfo.fsActive('FSPaternalist')) { r.push(`adjusts ${hisA} appearance to be more prim and proper to conform with your vision of a well-bred race of slaves. ${HisA} pants have quite the bulge in them.`); - } else if (V.arcologies[0].FSGenderRadicalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderRadicalist')) { r.push(`increases the size of ${hisA} cock and balls to conform with your vision of gender being defined by power.`); - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderFundamentalist')) { r.push(`adjusts ${hisA} appearance to be more feminine, despite ${hisA} huge dong, to conform with your vision of preserving traditional gender roles.`); - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (arcInfo.fsActive('FSDegradationist')) { r.push(`adjusts ${hisA} cock to have a Jacob's ladder piercing down its length to conform with your vision that slaves are not human and should be thoroughly degraded.`); - } else if (V.arcologies[0].FSRepopulationFocus !== "unset") { + } else if (arcInfo.fsActive('FSRepopulationFocus')) { r.push(`adjusts ${hisA} appearance to be pregnant to conform with your vision that all women should be pregnant. ${HeA} scratches ${hisA} head as ${hisA} erect dick pushes against the underside of ${hisA} belly.`); - } else if (V.arcologies[0].FSRestart !== "unset") { + } else if (arcInfo.fsActive('FSRestart')) { r.push(`adjusts ${hisA} appearance to be even more handsome.`); - } else if (V.arcologies[0].FSBodyPurist !== "unset") { + } else if (arcInfo.fsActive('FSBodyPurist')) { r.push(`adjusts ${hisA} appearance to look more natural, even shrinking ${hisA} cock to a more reasonable length, to conform with your vision of an implant free society.`); - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (arcInfo.fsActive('FSTransformationFetishist')) { r.push(`adjusts ${hisA} cock to be unnaturally long to conform with your vision of a society focused on implants, alterations, and modifications.`); - } else if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSYouthPreferentialist')) { r.push(`adjusts ${hisA} appearance to appear younger to conform with your vision of a society glorifying young ladies.`); - } else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSMaturityPreferentialist')) { r.push(`adjusts ${hisA} appearance to appear older to conform with your vision of a society glorifying older ladies.`); - } else if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + } else if (arcInfo.fsActive('FSSlimnessEnthusiast')) { r.push(`adopts a slimmer appearance to conform with your vision of a society glorifying lithe ladies.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (arcInfo.fsActive('FSAssetExpansionist')) { r.push(`adjusts the size of ${hisA} cock and balls until they rest upon the ground to conform with your vision that bigger is better.`); - } else if (V.arcologies[0].FSPastoralist !== "unset") { + } else if (arcInfo.fsActive('FSPastoralist')) { r.push(`increases the size of ${hisA} balls and ${hisA} cum production to conform with your vision that slaves should be milked.`); - } else if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + } else if (arcInfo.fsActive('FSPhysicalIdealist')) { r.push(`adjusts ${hisA} appearance to look muscular to conform with your vision that all slaves should be tall and strong.`); - } else if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + } else if (arcInfo.fsActive('FSHedonisticDecadence')) { r.push(`adjusts ${hisA} appearance to be more rotund and relaxed to conform with your vision that everyone should enjoy life to the fullest.`); - } else if (V.arcologies[0].FSIntellectualDependency !== "unset") { + } else if (arcInfo.fsActive('FSIntellectualDependency')) { r.push(`adjusts ${hisA} appearance to be more fun and flirty to conform with your vision that slaves shouldn't waste time thinking.`); - } else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + } else if (arcInfo.fsActive('FSSlaveProfessionalism')) { r.push(`adjusts ${hisA} appearance to be more refined to conform with your vision that slaves should be smart and professional.`); - } else if (V.arcologies[0].FSPetiteAdmiration !== "unset") { + } else if (arcInfo.fsActive('FSPetiteAdmiration')) { r.push(`adjusts ${hisA} height to conform with your vision that short is sexy.`); - } else if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { + } else if (arcInfo.fsActive('FSStatuesqueGlorification')) { r.push(`adjusts ${hisA} height to conform with your vision of a society glorifying the tall.`); - } else if (V.arcologies[0].FSChattelReligionist !== "unset") { + } else if (arcInfo.fsActive('FSChattelReligionist')) { r.push(`adjusts ${hisA} outfit to prominently display a religious symbol of your new religion.`); - } else if (V.arcologies[0].FSRomanRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSRomanRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Roman ${womanA}, despite ${hisA} cock, to conform with your vision of building a new Rome.`); - } else if (V.arcologies[0].FSNeoImperialist !== "unset") { + } else if (arcInfo.fsActive('FSNeoImperialist')) { r.push(`adjusts ${hisA} outfit to resemble a high-tech old-world ${womanA}, despite ${hisA} cock, to conform with your vision of a new Imperial society.`); - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAztecRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Aztec ${womanA}, despite ${hisA} cock, to conform with your vision of building a new Aztec Empire.`); - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEgyptianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Egyptian ${womanA}, despite ${hisA} cock, to conform with your vision of building a new land of the Pharaohs.`); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEdoRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Japanese ${womanA}, despite ${hisA} cock, to conform with your vision of building a new Edo Japan.`); - } else if (V.arcologies[0].FSArabianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSArabianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Arabian ${womanA}, despite ${hisA} cock, to conform with your vision of building a new Sultanate.`); - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSChineseRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Chinese ${womanA}, despite ${hisA} cock, to conform with your vision of pursuing the Mandate of Heaven.`); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAntebellumRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Southern ${womanA}, despite ${hisA} cock, to confirm with your vision of building a new Antebellum South.`); - } else if (V.arcologies[0].FSSupremacist !== "unset") { + } else if (arcInfo.fsActive('FSSupremacist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSupremacistRace} to conform with your vision of glorifying the superior race.`); - } else if (V.arcologies[0].FSSubjugationist !== "unset") { + } else if (arcInfo.fsActive('FSSubjugationist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSubjugationistRace} to conform with your vision of subjugating the inferior race.`); } break; case "succubus": - if (V.arcologies[0].FSPaternalist !== "unset") { + if (arcInfo.fsActive('FSPaternalist')) { r.push(`adjusts ${hisA} appearance to be more prim to conform with your tastes.`); - } else if (V.arcologies[0].FSGenderRadicalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderRadicalist')) { r.push(`adjusts ${hisA} appearance to focus on anal to conform with your tastes`); - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderFundamentalist')) { r.push(`adjusts ${hisA} appearance to be even more feminine to conform with your tastes.`); - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (arcInfo.fsActive('FSDegradationist')) { r.push(`comes up with nothing. "I'll need to think on this one."`); - } else if (V.arcologies[0].FSRepopulationFocus !== "unset") { + } else if (arcInfo.fsActive('FSRepopulationFocus')) { r.push(`swells ${hisA} middle with child to conform with your tastes.`); - } else if (V.arcologies[0].FSRestart !== "unset") { + } else if (arcInfo.fsActive('FSRestart')) { r.push(`adjusts ${hisA} appearance to drop dead gorgeous to conform with your tastes.`); - } else if (V.arcologies[0].FSBodyPurist !== "unset") { + } else if (arcInfo.fsActive('FSBodyPurist')) { r.push(`adjusts ${hisA} appearance to look more natural to conform with your tastes.`); - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (arcInfo.fsActive('FSTransformationFetishist')) { r.push(`fills ${hisA} breasts, butt and lips with obvious implants to conform with your tastes.`); - } else if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSYouthPreferentialist')) { r.push(`adopts a more youthful and energetic appearance to conform with your tastes.`); - } else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSMaturityPreferentialist')) { r.push(`adopts a more mature and experienced appearance to conform with your tastes.`); - } else if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + } else if (arcInfo.fsActive('FSSlimnessEnthusiast')) { r.push(`adopts a slimmer appearance to conform with your tastes.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (arcInfo.fsActive('FSAssetExpansionist')) { r.push(`balloons ${hisA} breasts and butt to conform with your tastes.`); - } else if (V.arcologies[0].FSPastoralist !== "unset") { + } else if (arcInfo.fsActive('FSPastoralist')) { r.push(`begins lactating before sprouting an extra set of breasts to conform with your tastes.`); - } else if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + } else if (arcInfo.fsActive('FSPhysicalIdealist')) { r.push(`swells with added muscle to conform with your tastes.`); - } else if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + } else if (arcInfo.fsActive('FSHedonisticDecadence')) { r.push(`becomes soft and shapely in all the right ways to conform with your vision that everyone should enjoy life to the fullest.`); - } else if (V.arcologies[0].FSIntellectualDependency !== "unset") { + } else if (arcInfo.fsActive('FSIntellectualDependency')) { r.push(`adjusts ${hisA} appearance to be more fun and flirty to conform with your vision that slaves shouldn't waste time thinking.`); - } else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + } else if (arcInfo.fsActive('FSSlaveProfessionalism')) { r.push(`adjusts ${hisA} appearance to be more refined to conform with your vision that slaves should be smart and professional.`); - } else if (V.arcologies[0].FSPetiteAdmiration !== "unset") { + } else if (arcInfo.fsActive('FSPetiteAdmiration')) { r.push(`adjusts ${hisA} height to conform with your vision that short is sexy.`); - } else if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { + } else if (arcInfo.fsActive('FSStatuesqueGlorification')) { r.push(`adjusts ${hisA} height to conform with your vision of a society glorifying the tall.`); - } else if (V.arcologies[0].FSChattelReligionist !== "unset") { + } else if (arcInfo.fsActive('FSChattelReligionist')) { r.push(`adjusts ${hisA} outfit to prominently display a religious symbol of your new religion.`); - } else if (V.arcologies[0].FSRomanRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSRomanRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a proper upper-class Roman lady to conform with your vision of building a new Rome.`); - } else if (V.arcologies[0].FSNeoImperialist !== "unset") { + } else if (arcInfo.fsActive('FSNeoImperialist')) { r.push(`adjusts ${hisA} outfit to resemble a high-class old-world ${womanA} bearing your crest to conform with your vision of a new Imperial society.`); - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAztecRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Aztec ${womanA} to conform with your vision of building a new Aztec Empire.`); - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEgyptianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a topless Egyptian lady to conform with your vision of building a new land of the Pharaohs.`); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEdoRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a traditional Japanese lady to conform with your vision of building a new Edo Japan.`); - } else if (V.arcologies[0].FSArabianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSArabianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Arabian lady to conform with your vision of building a new Sultanate.`); - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSChineseRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Chinese lady to conform with your vision of pursuing the Mandate of Heaven.`); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAntebellumRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Southern lady to confirm with your vision of building a new Antebellum South.`); - } else if (V.arcologies[0].FSSupremacist !== "unset") { + } else if (arcInfo.fsActive('FSSupremacist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSupremacistRace} to conform with your vision of glorifying the superior race.`); - } else if (V.arcologies[0].FSSubjugationist !== "unset") { + } else if (arcInfo.fsActive('FSSubjugationist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSubjugationistRace} to conform with your vision of subjugating the inferior race.`); } break; case "imp": - if (V.arcologies[0].FSPaternalist !== "unset") { + if (arcInfo.fsActive('FSPaternalist')) { r.push(`adjusts ${hisA} appearance to be more prim and proper to conform with your vision of a well-bred race of slaves.`); - } else if (V.arcologies[0].FSGenderRadicalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderRadicalist')) { r.push(`adjusts ${hisA} appearance to be more androgynous to conform with your vision of gender being defined by power.`); - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderFundamentalist')) { r.push(`adjusts ${hisA} appearance to be more feminine and cute to conform with your vision of preserving traditional gender roles.`); - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (arcInfo.fsActive('FSDegradationist')) { r.push(`pauses for a moment before adding piercings across ${hisA} body to conform with your vision that slaves are not human and should be thoroughly degraded.`); - } else if (V.arcologies[0].FSRepopulationFocus !== "unset") { + } else if (arcInfo.fsActive('FSRepopulationFocus')) { r.push(`adjusts ${hisA} appearance to be pregnant to conform with your vision that all women should be pregnant.`); - } else if (V.arcologies[0].FSRestart !== "unset") { + } else if (arcInfo.fsActive('FSRestart')) { r.push(`adjusts ${hisA} appearance to involve chastity.`); - } else if (V.arcologies[0].FSBodyPurist !== "unset") { + } else if (arcInfo.fsActive('FSBodyPurist')) { r.push(`adjusts ${hisA} appearance to look more natural to conform with your vision of an implant free society.`); - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (arcInfo.fsActive('FSTransformationFetishist')) { r.push(`adjusts ${hisA} breasts to resemble implants to conform with your vision of a society focused on implants, alterations, and modifications.`); - } else if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSYouthPreferentialist')) { r.push(`adjusts ${hisA} appearance to appear younger to conform with your vision of a society glorifying young ladies.`); - } else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSMaturityPreferentialist')) { r.push(`adjusts ${hisA} appearance to appear older to conform with your vision of a society glorifying older ladies.`); - } else if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + } else if (arcInfo.fsActive('FSSlimnessEnthusiast')) { r.push(`adopts a slimmer appearance to conform with your vision of a society glorifying lithe ladies. ${HeA} flutters around, enjoying ${hisA} lighter weight.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (arcInfo.fsActive('FSAssetExpansionist')) { r.push(`adjusts the size of ${hisA} breasts until ${heA} crashes to the ground under their weight to conform with your vision that bigger is better.`); - } else if (V.arcologies[0].FSPastoralist !== "unset") { + } else if (arcInfo.fsActive('FSPastoralist')) { r.push(`begins lactating to conform with your vision that slaves should be milked.`); - } else if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + } else if (arcInfo.fsActive('FSPhysicalIdealist')) { r.push(`adjusts ${hisA} appearance to look muscular to conform with your vision that all slaves should be tall and strong.`); - } else if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + } else if (arcInfo.fsActive('FSHedonisticDecadence')) { r.push(`adjusts ${hisA} appearance to be more rotund and relaxed to conform with your vision that everyone should enjoy life to the fullest.`); - } else if (V.arcologies[0].FSIntellectualDependency !== "unset") { + } else if (arcInfo.fsActive('FSIntellectualDependency')) { r.push(`adjusts ${hisA} appearance to be more fun and flirty to conform with your vision that slaves shouldn't waste time thinking.`); - } else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + } else if (arcInfo.fsActive('FSSlaveProfessionalism')) { r.push(`adjusts ${hisA} appearance to be more refined to conform with your vision that slaves should be smart and professional.`); - } else if (V.arcologies[0].FSPetiteAdmiration !== "unset") { + } else if (arcInfo.fsActive('FSPetiteAdmiration')) { r.push(`adjusts ${hisA} height to conform with your vision that short is sexy.`); - } else if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { + } else if (arcInfo.fsActive('FSStatuesqueGlorification')) { r.push(`adjusts ${hisA} height to conform with your vision of a society glorifying the tall.`); - } else if (V.arcologies[0].FSChattelReligionist !== "unset") { + } else if (arcInfo.fsActive('FSChattelReligionist')) { r.push(`adjusts ${hisA} outfit to prominently display a religious symbol of your new religion.`); - } else if (V.arcologies[0].FSRomanRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSRomanRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Roman ${womanA} to conform with your vision of building a new Rome.`); - } else if (V.arcologies[0].FSNeoImperialist !== "unset") { + } else if (arcInfo.fsActive('FSNeoImperialist')) { r.push(`adjusts ${hisA} outfit to resemble a high-tech ${womanA} bearing your crest to conform with your vision of a new Imperial society.`); - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAztecRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Aztec ${womanA} to conform with your vision of building a new Aztec Empire.`); - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEgyptianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Egyptian ${womanA} to conform with your vision of building a new land of the Pharaohs.`); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEdoRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Japanese ${womanA} to conform with your vision of building a new Edo Japan.`); - } else if (V.arcologies[0].FSArabianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSArabianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Arabian ${womanA} to conform with your vision of building a new Sultanate.`); - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSChineseRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Chinese ${womanA} to conform with your vision of pursuing the Mandate of Heaven.`); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAntebellumRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Southern ${womanA} to conform with your vision of building a new Antebellum South.`); - } else if (V.arcologies[0].FSSupremacist !== "unset") { + } else if (arcInfo.fsActive('FSSupremacist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSupremacistRace} to conform with your vision of glorifying the superior race.`); - } else if (V.arcologies[0].FSSubjugationist !== "unset") { + } else if (arcInfo.fsActive('FSSubjugationist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSubjugationistRace} to conform with your vision of subjugating the inferior race.`); } break; case "witch": - if (V.arcologies[0].FSPaternalist !== "unset") { + if (arcInfo.fsActive('FSPaternalist')) { r.push(`casts a spell to appear more prim and proper; ${hisA} nipples, pussy and anus vanish. You can't be lewd if you're smooth.`); - } else if (V.arcologies[0].FSGenderRadicalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderRadicalist')) { r.push(`casts a spell to appear more androgynous; a sharp pain in ${hisA} crotch draws ${hisA} attention to ${hisA} new erect penis.`); - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderFundamentalist')) { r.push(`casts a spell to appear more feminine; ${hisA} hips widen, ${hisA} tits swell, and ${hisA} womb bulges with fertile eggs.`); - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (arcInfo.fsActive('FSDegradationist')) { r.push(`casts a spell to appear more deviant; every surface of ${hisA} body becomes tattooed.`); - } else if (V.arcologies[0].FSRepopulationFocus !== "unset") { + } else if (arcInfo.fsActive('FSRepopulationFocus')) { r.push(`casts a spell to summon children; ${hisA} womb swells to capacity,`); if (V.seeHyperPreg === 1) { r.push(`dwarfing ${hisA} body and bulging ominously with squirming young.`); } else { r.push(`knocking ${himA} off balance and pinning ${himA} to the floor under the weight of ${hisA} eight babies.`); } - } else if (V.arcologies[0].FSRestart !== "unset") { + } else if (arcInfo.fsActive('FSRestart')) { r.push(`casts a contraceptive spell; ${hisA} pussy vanishes.`); - } else if (V.arcologies[0].FSBodyPurist !== "unset") { + } else if (arcInfo.fsActive('FSBodyPurist')) { r.push(`casts a purifying spell; nothing happens, at first. The front of ${hisA} robes, above ${hisA} lower belly, steadily becomes transparent. Moments later, ${hisA} skin joins in, revealing an inactive egg vibrator concealed in ${hisA} pussy. ${V.assistant.name} squeals in embarrassment and hurries off-screen.`); - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (arcInfo.fsActive('FSTransformationFetishist')) { r.push(`casts a spell to inflate ${hisA} breasts; they rapidly swell, along with ${hisA} ass, belly, thighs and lips until ${heA} looks like an overinflated blowup doll. ${HeA} struggles to bring a rubbery arm to ${hisA} O-shaped lips before giving up and rebounding back into place; ${heA} really is a blowup sex doll!`); - } else if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSYouthPreferentialist')) { r.push(`casts a spell to appear more youthful;`); if (V.minimumSlaveAge === 3) { r.push(`${heA} rapidly shrinks until ${heA} is struggling to stand. ${HeA} has reverted to a toddler!`); @@ -1048,173 +1049,173 @@ App.Events.assistantFS = class assistantFS extends App.Events.BaseEvent { } else { r.push(`the years peel off of ${himA} until ${heA} looks fresh into adulthood again. The spell actually worked?`); } - } else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSMaturityPreferentialist')) { r.push(`casts a spell to appear more aged; a cane appears in ${hisA} hand and ${hisA} back buckles, forcing ${himA} to hunch forward. ${HeA} has transformed into a GILF!`); - } else if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + } else if (arcInfo.fsActive('FSSlimnessEnthusiast')) { r.push(`casts a spell to lighten ${himselfA}; ${hisA} muffin top is still there, but ${hisA} feet leave the ground as ${heA} begins to float upwards.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (arcInfo.fsActive('FSAssetExpansionist')) { r.push(`casts a spell to enlarge ${hisA} breasts and butt; they quickly grow into huge armfuls, and keep going until ${heA} is pinned under ${hisA} own mass.`); - } else if (V.arcologies[0].FSPastoralist !== "unset") { + } else if (arcInfo.fsActive('FSPastoralist')) { r.push(`casts a spell to give ${hisA} big milky breasts; they grow and start leaking, but are quickly joined by a septet of siblings, leaving ${himA} struggling to support ${hisA} nine huge breasts.`); - } else if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + } else if (arcInfo.fsActive('FSPhysicalIdealist')) { r.push(`casts a spell to make ${himA} strong; ${hisA} muscles grow and grow until ${heA} is so muscle-bound ${heA} can barely move.`); - } else if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + } else if (arcInfo.fsActive('FSHedonisticDecadence')) { r.push(`casts a spell to make ${himA} pleasantly soft; ${hisA} body swells with added fat until ${heA} can barely move.`); - } else if (V.arcologies[0].FSIntellectualDependency !== "unset") { + } else if (arcInfo.fsActive('FSIntellectualDependency')) { r.push(`casts a spell to turn ${himA} into a bimbo; ${heA} shows no further reactions.`); - } else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + } else if (arcInfo.fsActive('FSSlaveProfessionalism')) { r.push(`casts a spell to increase ${hisA} intelligence; ${hisA} face turns red and steam jets out of ${hisA} ears.`); - } else if (V.arcologies[0].FSPetiteAdmiration !== "unset") { + } else if (arcInfo.fsActive('FSPetiteAdmiration')) { r.push(`casts a spell to grow small; most of ${hisA} body shrinks until only a pair of tits are visible.`); - } else if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { + } else if (arcInfo.fsActive('FSStatuesqueGlorification')) { r.push(`casts a spell to grow tall; ${hisA} arms and legs stretch and stretch.`); - } else if (V.arcologies[0].FSChattelReligionist !== "unset") { + } else if (arcInfo.fsActive('FSChattelReligionist')) { r.push(`casts a spell to adorn ${hisA} outfit with religious symbols of your new religion. ${HeA} succeeds in conjuring them, at the expense of ${hisA} other clothes.`); - } else if (V.arcologies[0].FSRomanRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSRomanRevivalist')) { r.push(`casts a spell to make ${himselfA} appear Roman; ${heA} looks more Greek to you.`); - } else if (V.arcologies[0].FSNeoImperialist !== "unset") { + } else if (arcInfo.fsActive('FSNeoImperialist')) { r.push(`casts a spell to make ${himselfA} appear like a high-class Imperial; ${heA} looks more like a street peddling shaman, really.`); - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAztecRevivalist')) { r.push(`casts a spell to make ${himselfA} appear Aztec; ${heA} adopts the perfect conquistador appearance.`); - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEgyptianRevivalist')) { r.push(`casts a spell to make ${himselfA} appear Egyptian; bandages quickly wrap around ${himA} as a sarcophagus appears around ${himA}.`); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEdoRevivalist')) { r.push(`casts a spell to make ${himselfA} appear Japanese; ${heA} succeeds in becoming a baka gaijin.`); - } else if (V.arcologies[0].FSArabianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSArabianRevivalist')) { r.push(`casts a spell to make ${himselfA} appear Arabic; ${heA} succeeds in making ${himselfA} look like a wannabe Arabian princess.`); - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSChineseRevivalist')) { r.push(`casts a spell to make ${himselfA} appear Chinese; ${heA} succeeds in swapping the material of ${hisA} robes to a fine silk.`); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAntebellumRevivalist')) { r.push(`casts a spell to make ${himselfA} appear Southern; ${heA} succeeds in becoming a caricature of the Antebellum aristocracy.`); - } else if (V.arcologies[0].FSSupremacist !== "unset") { + } else if (arcInfo.fsActive('FSSupremacist')) { r.push(`casts a spell to look more ${V.arcologies[0].FSSupremacistRace}; ${heA} does too good of a job, ending up looking like an over-exaggerated ${V.arcologies[0].FSSupremacistRace} stereotype.`); - } else if (V.arcologies[0].FSSubjugationist !== "unset") { + } else if (arcInfo.fsActive('FSSubjugationist')) { r.push(`casts a spell to look more ${V.arcologies[0].FSSubjugationistRace}; ${heA} does too good of a job and ends up looking like an over-exaggerated ${V.arcologies[0].FSSubjugationistRace} stereotype.`); } break; case "ERROR_1606_APPEARANCE_FILE_CORRUPT": - if (V.arcologies[0].FSPaternalist !== "unset") { + if (arcInfo.fsActive('FSPaternalist')) { r.push(`adjusts ${hisA} appearance to be conservative to conform with your vision of a well-bred race of slaves.`); - } else if (V.arcologies[0].FSGenderRadicalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderRadicalist')) { r.push(`adjusts ${hisA} appearance to be androgynous to conform with your vision of gender being defined by power.`); - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderFundamentalist')) { r.push(`adjusts ${hisA} appearance to be feminine to conform with your vision of preserving traditional gender roles.`); - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (arcInfo.fsActive('FSDegradationist')) { r.push(`adjusts ${hisA} appearance to include oddly fleshy piercings to conform with your vision that slaves are not human and should be thoroughly degraded.`); - } else if (V.arcologies[0].FSRepopulationFocus !== "unset") { + } else if (arcInfo.fsActive('FSRepopulationFocus')) { r.push(`bulges ${hisA} middle to look pregnant to conform with your vision that all wombs should be filled.`); - } else if (V.arcologies[0].FSRestart !== "unset") { + } else if (arcInfo.fsActive('FSRestart')) { r.push(`adjusts ${hisA} appearance to be oddly flawless.`); - } else if (V.arcologies[0].FSBodyPurist !== "unset") { + } else if (arcInfo.fsActive('FSBodyPurist')) { r.push(`adjusts ${hisA} appearance to look somewhat natural to conform with your vision of an implant free society.`); - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (arcInfo.fsActive('FSTransformationFetishist')) { r.push(`inflates ${hisA} breasts until they are comically huge, rounded and jiggling ominously to conform with your vision of a society focused on implants, alterations, and modifications.`); - } else if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSYouthPreferentialist')) { r.push(`adopts a youthful appearance to conform with your vision of a society glorifying young ladies.`); - } else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSMaturityPreferentialist')) { r.push(`adopts a mature appearance to conform with your vision of a society glorifying older ladies.`); - } else if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + } else if (arcInfo.fsActive('FSSlimnessEnthusiast')) { r.push(`adopts a slimmer appearance to conform with your vision of a society glorifying lithe ladies.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (arcInfo.fsActive('FSAssetExpansionist')) { r.push(`swells ${hisA} breasts until they are bigger than ${hisA} head, and moving oddly, to conform with your vision that bigger is better.`); - } else if (V.arcologies[0].FSPastoralist !== "unset") { + } else if (arcInfo.fsActive('FSPastoralist')) { r.push(`starts lactating a strange fluid to conform with your vision that slaves should be milked.`); - } else if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + } else if (arcInfo.fsActive('FSPhysicalIdealist')) { r.push(`adjusts ${hisA} appearance to be outrageously bulky to conform with your vision that all slaves should be tall and strong.`); - } else if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + } else if (arcInfo.fsActive('FSHedonisticDecadence')) { r.push(`adjusts ${hisA} appearance to be outrageously fat to conform with your vision that everyone should enjoy life to the fullest.`); - } else if (V.arcologies[0].FSIntellectualDependency !== "unset") { + } else if (arcInfo.fsActive('FSIntellectualDependency')) { r.push(`adopts a more slutty appearance to conform with your vision that slaves shouldn't waste time thinking.`); - } else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + } else if (arcInfo.fsActive('FSSlaveProfessionalism')) { r.push(`adjusts ${hisA} appearance to be more refined to conform with your vision that slaves should be smart and professional.`); - } else if (V.arcologies[0].FSPetiteAdmiration !== "unset") { + } else if (arcInfo.fsActive('FSPetiteAdmiration')) { r.push(`adjusts ${hisA} height to conform with your vision that short is sexy.`); - } else if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { + } else if (arcInfo.fsActive('FSStatuesqueGlorification')) { r.push(`adjusts ${hisA} height to conform with your vision of a society glorifying the tall.`); - } else if (V.arcologies[0].FSChattelReligionist !== "unset") { + } else if (arcInfo.fsActive('FSChattelReligionist')) { r.push(`adjusts ${hisA} outfit to prominently display a religious symbol of your new religion.`); - } else if (V.arcologies[0].FSRomanRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSRomanRevivalist')) { r.push(`adjusts ${hisA} form to a Roman ${womanA} to conform with your vision of building a new Rome.`); - } else if (V.arcologies[0].FSNeoImperialist !== "unset") { + } else if (arcInfo.fsActive('FSNeoImperialist')) { r.push(`adjusts ${hisA} outfit to resemble a high-tech ${womanA} bearing your crest to conform with your vision of a new Imperial society.`); - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAztecRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Aztec ${womanA} to conform with your vision of building a new Aztec Empire.`); - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEgyptianRevivalist')) { r.push(`adjusts ${hisA} form to an Egyptian ${womanA} to conform with your vision of building a new land of the Pharaohs.`); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEdoRevivalist')) { r.push(`adjusts ${hisA} form to a Japanese ${womanA} to conform with your vision of building a new Edo Japan.`); - } else if (V.arcologies[0].FSArabianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSArabianRevivalist')) { r.push(`adjusts ${hisA} form to an Arabian ${womanA} to conform with your vision of building a new Sultanate.`); - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSChineseRevivalist')) { r.push(`adjusts ${hisA} form to a Chinese ${womanA} to conform with your vision of pursuing the Mandate of Heaven.`); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAntebellumRevivalist')) { r.push(`adjusts ${hisA} form to a Southern ${womanA} to conform with your vision of building a new Antebellum South.`); - } else if (V.arcologies[0].FSSupremacist !== "unset") { + } else if (arcInfo.fsActive('FSSupremacist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSupremacistRace} to conform with your vision of glorifying the superior race.`); - } else if (V.arcologies[0].FSSubjugationist !== "unset") { + } else if (arcInfo.fsActive('FSSubjugationist')) { r.push(`adjusts ${hisA} appearance to look more ${V.arcologies[0].FSSubjugationistRace} to conform with your vision of subjugating the inferior race.`); } break; case "schoolgirl": - if (V.arcologies[0].FSPaternalist !== "unset") { + if (arcInfo.fsActive('FSPaternalist')) { r.push(`adjusts ${hisA} appearance to be more prim and proper to conform with your vision of a well-bred race of slaves.`); - } else if (V.arcologies[0].FSGenderRadicalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderRadicalist')) { r.push(`adjusts ${hisA} appearance to be more androgynous to conform with your vision of gender being defined by power.`); - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderFundamentalist')) { r.push(`adjusts ${hisA} appearance to be more feminine and cute to conform with your vision of preserving traditional gender roles.`); - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (arcInfo.fsActive('FSDegradationist')) { r.push(`adjusts ${hisA} outfit to display ${hisA} tits and crotch to conform with your vision that slaves are not human and should be thoroughly degraded.`); - } else if (V.arcologies[0].FSRepopulationFocus !== "unset") { + } else if (arcInfo.fsActive('FSRepopulationFocus')) { r.push(`adjusts ${hisA} appearance to be pregnant to conform with your vision that all women should be pregnant.`); - } else if (V.arcologies[0].FSRestart !== "unset") { + } else if (arcInfo.fsActive('FSRestart')) { r.push(`adjusts ${hisA} appearance to involve chastity.`); - } else if (V.arcologies[0].FSBodyPurist !== "unset") { + } else if (arcInfo.fsActive('FSBodyPurist')) { r.push(`adjusts ${hisA} appearance to look more natural, complete with freckles and perfect teeth, to conform with your vision of an implant free society.`); - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (arcInfo.fsActive('FSTransformationFetishist')) { r.push(`adjusts ${hisA} breasts to resemble implants to conform with your vision of a society focused on implants, alterations, and modifications.`); - } else if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSYouthPreferentialist')) { r.push(`adopts a more shy and innocent attitude to conform with your vision of a society glorifying young ladies.`); - } else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSMaturityPreferentialist')) { r.push(`adjusts ${hisA} appearance to include a spanked bottom to conform with your vision of a society glorifying older ladies.`); - } else if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + } else if (arcInfo.fsActive('FSSlimnessEnthusiast')) { r.push(`adopts a slimmer appearance to conform with your vision of a society glorifying lithe ladies.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (arcInfo.fsActive('FSAssetExpansionist')) { r.push(`adjusts the size of ${hisA} breasts until they strain the buttons on ${hisA} shirt to conform with your vision that bigger is better.`); - } else if (V.arcologies[0].FSPastoralist !== "unset") { + } else if (arcInfo.fsActive('FSPastoralist')) { r.push(`begins lactating to conform with your vision that slaves should be milked.`); - } else if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + } else if (arcInfo.fsActive('FSPhysicalIdealist')) { r.push(`adjusts ${hisA} appearance to look like ${heA} just finished gym class to conform with your vision that all slaves should be tall and strong.`); - } else if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + } else if (arcInfo.fsActive('FSHedonisticDecadence')) { r.push(`adjusts ${hisA} appearance to be pleasantly plump to conform with your vision everyone should enjoy life to the fullest.`); - } else if (V.arcologies[0].FSIntellectualDependency !== "unset") { + } else if (arcInfo.fsActive('FSIntellectualDependency')) { r.push(`adjusts ${hisA} appearance to be more fun and flirty to conform with your vision that slaves shouldn't waste time thinking.`); - } else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + } else if (arcInfo.fsActive('FSSlaveProfessionalism')) { r.push(`adjusts ${hisA} appearance to be more refined to conform with your vision that slaves should be smart and professional.`); - } else if (V.arcologies[0].FSPetiteAdmiration !== "unset") { + } else if (arcInfo.fsActive('FSPetiteAdmiration')) { r.push(`adjusts ${hisA} height to conform with your vision that short is sexy.`); - } else if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { + } else if (arcInfo.fsActive('FSStatuesqueGlorification')) { r.push(`adjusts ${hisA} height to conform with your vision of a society glorifying the tall.`); - } else if (V.arcologies[0].FSChattelReligionist !== "unset") { + } else if (arcInfo.fsActive('FSChattelReligionist')) { r.push(`adjusts ${hisA} outfit to prominently display a religious symbol of your new religion.`); - } else if (V.arcologies[0].FSRomanRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSRomanRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a proper upper-class Roman lady to conform with your vision of building a new Rome.`); - } else if (V.arcologies[0].FSNeoImperialist !== "unset") { + } else if (arcInfo.fsActive('FSNeoImperialist')) { r.push(`adjusts ${hisA} outfit to resemble a high-tech ${womanA} bearing your crest to conform with your vision of a new Imperial society.`); - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAztecRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a high standing Aztec priestess to conform with your vision of building a new Aztec Empire.`); - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEgyptianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a topless Egyptian lady to conform with your vision of building a new land of the Pharaohs.`); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEdoRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a traditional Japanese lady to conform with your vision of building a new Edo Japan.`); - } else if (V.arcologies[0].FSArabianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSArabianRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble an Arab ${girlA} attending a Western school to conform with your vision of building a new Sultanate.`); - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSChineseRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Chinese lady to conform with your vision of pursuing the Mandate of Heaven.`); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAntebellumRevivalist')) { r.push(`adjusts ${hisA} outfit to resemble a Southern lady to conform with your vision of building a new Antebellum South.`); - } else if (V.arcologies[0].FSSupremacist !== "unset") { + } else if (arcInfo.fsActive('FSSupremacist')) { r.push(`adjusts ${hisA} appearance to resemble a model ${V.arcologies[0].FSSupremacistRace} student to conform with your vision of glorifying the superior race.`); - } else if (V.arcologies[0].FSSubjugationist !== "unset") { + } else if (arcInfo.fsActive('FSSubjugationist')) { r.push(`adjusts ${hisA} appearance to resemble ${addA(V.arcologies[0].FSSubjugationistRace)} foreign exchange student to conform with your vision of subjugating the inferior race.`); } } @@ -1232,65 +1233,65 @@ App.Events.assistantFS = class assistantFS extends App.Events.BaseEvent { return node; function keep() { - if (V.arcologies[0].FSPaternalist !== "unset") { + if (arcInfo.fsActive('FSPaternalist')) { V.assistant.fsAppearance = "paternalist"; - } else if (V.arcologies[0].FSRepopulationFocus !== "unset") { + } else if (arcInfo.fsActive('FSRepopulationFocus')) { V.assistant.fsAppearance = "repopulation focus"; - } else if (V.arcologies[0].FSRestart !== "unset") { + } else if (arcInfo.fsActive('FSRestart')) { V.assistant.fsAppearance = "eugenics"; - } else if (V.arcologies[0].FSGenderRadicalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderRadicalist')) { V.assistant.fsAppearance = "gender radicalist"; - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderFundamentalist')) { V.assistant.fsAppearance = "gender fundamentalist"; - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (arcInfo.fsActive('FSDegradationist')) { V.assistant.fsAppearance = "degradationist"; - } else if (V.arcologies[0].FSBodyPurist !== "unset") { + } else if (arcInfo.fsActive('FSBodyPurist')) { V.assistant.fsAppearance = "body purist"; - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (arcInfo.fsActive('FSTransformationFetishist')) { V.assistant.fsAppearance = "transformation fetishist"; - } else if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSYouthPreferentialist')) { V.assistant.fsAppearance = "youth preferentialist"; - } else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSMaturityPreferentialist')) { V.assistant.fsAppearance = "maturity preferentialist"; - } else if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + } else if (arcInfo.fsActive('FSSlimnessEnthusiast')) { V.assistant.fsAppearance = "slimness enthusiast"; - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (arcInfo.fsActive('FSAssetExpansionist')) { V.assistant.fsAppearance = "asset expansionist"; - } else if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + } else if (arcInfo.fsActive('FSHedonisticDecadence')) { V.assistant.fsAppearance = "hedonistic decadence"; - } else if (V.arcologies[0].FSPastoralist !== "unset") { + } else if (arcInfo.fsActive('FSPastoralist')) { V.assistant.fsAppearance = "pastoralist"; - } else if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + } else if (arcInfo.fsActive('FSPhysicalIdealist')) { V.assistant.fsAppearance = "physical idealist"; - } else if (V.arcologies[0].FSIntellectualDependency !== "unset") { + } else if (arcInfo.fsActive('FSIntellectualDependency')) { V.assistant.fsAppearance = "intellectual dependency"; - } else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + } else if (arcInfo.fsActive('FSSlaveProfessionalism')) { V.assistant.fsAppearance = "slave professionalism"; - } else if (V.arcologies[0].FSPetiteAdmiration !== "unset") { + } else if (arcInfo.fsActive('FSPetiteAdmiration')) { V.assistant.fsAppearance = "petite admiration"; - } else if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { + } else if (arcInfo.fsActive('FSStatuesqueGlorification')) { V.assistant.fsAppearance = "statuesque glorification"; - } else if (V.arcologies[0].FSChattelReligionist !== "unset") { + } else if (arcInfo.fsActive('FSChattelReligionist')) { V.assistant.fsAppearance = "chattel religionist"; - } else if (V.arcologies[0].FSRomanRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSRomanRevivalist')) { V.assistant.fsAppearance = "roman revivalist"; - } else if (V.arcologies[0].FSNeoImperialist !== "unset") { + } else if (arcInfo.fsActive('FSNeoImperialist')) { V.assistant.fsAppearance = "neoimperialist"; - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAztecRevivalist')) { V.assistant.fsAppearance = "aztec revivalist"; - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEgyptianRevivalist')) { V.assistant.fsAppearance = "egyptian revivalist"; - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEdoRevivalist')) { V.assistant.fsAppearance = "edo revivalist"; - } else if (V.arcologies[0].FSArabianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSArabianRevivalist')) { V.assistant.fsAppearance = "arabian revivalist"; - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSChineseRevivalist')) { V.assistant.fsAppearance = "chinese revivalist"; - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAntebellumRevivalist')) { V.assistant.fsAppearance = "antebellum revivalist"; - } else if (V.arcologies[0].FSSupremacist !== "unset") { + } else if (arcInfo.fsActive('FSSupremacist')) { V.assistant.fsAppearance = "supremacist"; - } else if (V.arcologies[0].FSSubjugationist !== "unset") { + } else if (arcInfo.fsActive('FSSubjugationist')) { V.assistant.fsAppearance = "subjugationist"; } refreshArt(); diff --git a/src/events/intro/initNationalities.js b/src/events/intro/initNationalities.js index fd3e2473e69e9e5e423d6af8b02aeca104af4158..76e1d3b0efc6a5e73c4377fda4f22d78303adac0 100644 --- a/src/events/intro/initNationalities.js +++ b/src/events/intro/initNationalities.js @@ -166,32 +166,32 @@ App.Intro.initNationalities = function() { minority: 20, PCminority: 0, demandFactor: 0, - FSSupremacist: "unset", + FSSupremacist: null, FSSupremacistRace: 0, - FSSubjugationist: "unset", + FSSubjugationist: null, FSSubjugationistRace: 0, - FSGenderRadicalist: "unset", - FSGenderFundamentalist: "unset", - FSPaternalist: "unset", - FSDegradationist: "unset", - FSBodyPurist: "unset", - FSTransformationFetishist: "unset", - FSYouthPreferentialist: "unset", - FSMaturityPreferentialist: "unset", - FSSlimnessEnthusiast: "unset", - FSAssetExpansionist: "unset", - FSPastoralist: "unset", - FSPhysicalIdealist: "unset", - FSChattelReligionist: "unset", - FSRomanRevivalist: "unset", - FSAztecRevivalist: "unset", - FSEgyptianRevivalist: "unset", - FSEdoRevivalist: "unset", - FSNeoImperialist: "unset", - FSArabianRevivalist: "unset", - FSChineseRevivalist: "unset", - FSAntebellumRevivalist: "unset", - FSNull: "unset", + FSGenderRadicalist: null, + FSGenderFundamentalist: null, + FSPaternalist: null, + FSDegradationist: null, + FSBodyPurist: null, + FSTransformationFetishist: null, + FSYouthPreferentialist: null, + FSMaturityPreferentialist: null, + FSSlimnessEnthusiast: null, + FSAssetExpansionist: null, + FSPastoralist: null, + FSPhysicalIdealist: null, + FSChattelReligionist: null, + FSRomanRevivalist: null, + FSAztecRevivalist: null, + FSEgyptianRevivalist: null, + FSEdoRevivalist: null, + FSNeoImperialist: null, + FSArabianRevivalist: null, + FSChineseRevivalist: null, + FSAntebellumRevivalist: null, + FSNull: null, embargo: 1, embargoTarget: -1, influenceTarget: -1, @@ -201,15 +201,15 @@ App.Intro.initNationalities = function() { CyberReputation: 1, CyberReputationTarget: -1, rival: 0, - FSRestart: "unset", - FSRepopulationFocus: "unset", - FSHedonisticDecadence: "unset", - FSIntellectualDependency: "unset", - FSSlaveProfessionalism: "unset", - FSPetiteAdmiration: "unset", - FSStatuesqueGlorification: "unset", - FSCummunism: "unset", - FSIncestFetishist: "unset", + FSRestart: null, + FSRepopulationFocus: null, + FSHedonisticDecadence: null, + FSIntellectualDependency: null, + FSSlaveProfessionalism: null, + FSPetiteAdmiration: null, + FSStatuesqueGlorification: null, + FSCummunism: null, + FSIncestFetishist: null, FSGenderRadicalistResearch: 0, FSGenderFundamentalistResearch: 0, FSPaternalistResearch: 0, diff --git a/src/events/nonRandom/daughters/pUndergroundRailroad.js b/src/events/nonRandom/daughters/pUndergroundRailroad.js index c6b524d636c32c47d81c64f1e969ba23ef4c4085..8fac9eccf43e660adcb666a4fb777d8b08297c2a 100644 --- a/src/events/nonRandom/daughters/pUndergroundRailroad.js +++ b/src/events/nonRandom/daughters/pUndergroundRailroad.js @@ -211,7 +211,7 @@ App.Events.PUndergroundRailroad = class PUndergroundRailroad extends App.Events. if (V.seeExtreme === 1) { responses.push(new App.Events.Result(`Chemically lobotomize ${him} to extirpate any record of the incident`, lobotomy)); - if (V.arcologies[0].FSPaternalist === "unset") { + if (!FutureSocieties.isActive('FSPaternalist')) { responses.push(new App.Events.Result(`Publicly execute ${him}`, execute)); } } @@ -427,11 +427,11 @@ App.Events.PUndergroundRailroad = class PUndergroundRailroad extends App.Events. let r = []; unlock(); r.push(`You announce that a treasonous slave will be publicly executed. Treason is understood in the Free Cities to be activity that tends to undermine slavery, and public interest is considerable when ${traitor.slaveName} is dragged out into a public atrium and`); - if (V.arcologies[0].FSAztecRevivalist !== "unset") { + if (FutureSocieties.isActive('FSAztecRevivalist')) { r.push(`has ${his} heart cut out of ${his} living body.`); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSEdoRevivalist')) { r.push(`is boiled alive.`); - } else if (V.arcologies[0].FSRomanRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSRomanRevivalist')) { r.push(`is crucified and left hanging until ${he} perishes.`); } else { r.push(`is summarily hanged.`); diff --git a/src/events/nonRandom/pBioreactorPerfected.js b/src/events/nonRandom/pBioreactorPerfected.js index ff60cdc292a4e8b5c9deb40748d77ef19f1ae05d..4ac5862e9020d775ff356f5e422794b1a1fe3001 100644 --- a/src/events/nonRandom/pBioreactorPerfected.js +++ b/src/events/nonRandom/pBioreactorPerfected.js @@ -348,7 +348,7 @@ App.Events.PBioreactorPerfected = class PBioreactorPerfected extends App.Events. let seed = (100 * bioreactorsXY) + (100 * bioreactorsHerm); if (V.arcologies[0].FSPastoralistLaw === 1) { cash += seed * random(40, 50); - } else if (V.arcologies[0].FSPastoralist !== "unset") { + } else if (FutureSocieties.isActive('FSPastoralist')) { cash += seed * (random(25, 35) + Math.trunc(V.arcologies[0].FSPastoralist / 10)); } else { cash += seed * random(25, 35); @@ -358,7 +358,7 @@ App.Events.PBioreactorPerfected = class PBioreactorPerfected extends App.Events. seed = (2 * bioreactorsXX) + (2 * bioreactorsHerm); if (V.arcologies[0].FSPastoralistLaw === 1) { cash += seed * random(40, 50); - } else if (V.arcologies[0].FSPastoralist !== "unset") { + } else if (FutureSocieties.isActive('FSPastoralist')) { cash += seed * (random(25, 35) + Math.trunc(V.arcologies[0].FSPastoralist / 10)); } else { cash += seed * random(25, 35); @@ -366,7 +366,7 @@ App.Events.PBioreactorPerfected = class PBioreactorPerfected extends App.Events. /* Milk */ seed = (800 * bioreactorsXX) + (700 * bioreactorsBarren) + (600 * bioreactorsXY) + (600 * bioreactorsHerm); - if (V.arcologies[0].FSPastoralist !== "unset") { + if (FutureSocieties.isActive('FSPastoralist')) { if (V.arcologies[0].FSPastoralistLaw === 1) { cash += seed * (13 + Math.trunc(V.arcologies[0].FSPastoralist / 30)); } else { diff --git a/src/events/nonRandom/tfsFarmUpgrade.js b/src/events/nonRandom/tfsFarmUpgrade.js index 346c47594886a7431c5f8d097446263964990b4f..a98750f50733653ba655ff746922161c1012b7ea 100644 --- a/src/events/nonRandom/tfsFarmUpgrade.js +++ b/src/events/nonRandom/tfsFarmUpgrade.js @@ -74,7 +74,7 @@ App.Events.TFSFarmUpgrade = class TFSFarmUpgrade extends App.Events.BaseEvent { r.push(`The Societal Elite are <span class="red">outraged</span> that you would not only allow such a breach of eugenics to occur, but encourage it.`); } V.TFS.farmUpgrade = 2; - if (V.arcologies[0].FSRestart !== "unset" && V.eugenicsFullControl !== 1) { + if (FutureSocieties.isActive('FSRestart') && V.eugenicsFullControl !== 1) { V.failedElite += 275; } App.Events.addParagraph(frag, r); @@ -89,7 +89,7 @@ App.Events.TFSFarmUpgrade = class TFSFarmUpgrade extends App.Events.BaseEvent { r.push(`The Societal Elite are <span class="red">outraged</span> that you would not only allow such a breach of eugenics to occur, but encourage it to such an obscene degree.`); } V.TFS.farmUpgrade = 3; - if (V.arcologies[0].FSRestart !== "unset" && V.eugenicsFullControl !== 1) { + if (FutureSocieties.isActive('FSRestart') && V.eugenicsFullControl !== 1) { V.failedElite += 1000; } App.Events.addParagraph(frag, r); @@ -104,7 +104,7 @@ App.Events.TFSFarmUpgrade = class TFSFarmUpgrade extends App.Events.BaseEvent { r.push(`The Societal Elite are <span class="red">outraged</span> that you would not only allow such a breach of eugenics to occur, but encourage it.`); } V.TFS.farmUpgrade = 4; - if (V.arcologies[0].FSRestart !== "unset" && V.eugenicsFullControl !== 1) { + if (FutureSocieties.isActive('FSRestart') && V.eugenicsFullControl !== 1) { V.failedElite += 100; } App.Events.addParagraph(frag, r); diff --git a/src/events/reRecruit/cleaningHouse.js b/src/events/reRecruit/cleaningHouse.js index 74b9e574efd204e1b5c646e5e151c515d6f0d2b0..c775b6806ad3929ff0cd8aff38b4fcd5b0bdae58 100644 --- a/src/events/reRecruit/cleaningHouse.js +++ b/src/events/reRecruit/cleaningHouse.js @@ -30,7 +30,7 @@ App.Events.recCleaningHouse = class recCleaningHouse extends App.Events.BaseEven App.Events.addParagraph(node, r); r = []; r.push(`He explains that one of his servant ${girl}s, ${slave.slaveName}, was impregnated by his fool of a son, and that he wants to sell you the ${girl} and ${his} nosy coworkers to clean house and cover it up.`); - if (V.arcologies[0].FSRepopulationFocus !== "unset") { + if (FutureSocieties.isActive('FSRepopulationFocus')) { r.push(`You relish at the opportunity to obtain an expectant mother and some decent slaves.`); } else { r.push(`You aren't particularly concerned with the pregnancy, but it sounds like you could get a several decent slaves out of this.`); diff --git a/src/events/reRecruit/desperatePreg.js b/src/events/reRecruit/desperatePreg.js index 8c629cc4e8aa9ab42c262c271f1972e59b69b578..18f850f6643efe23b3326496911ad09b03adda5c 100644 --- a/src/events/reRecruit/desperatePreg.js +++ b/src/events/reRecruit/desperatePreg.js @@ -5,7 +5,7 @@ App.Events.recDesperatePreg = class recDesperatePreg extends App.Events.BaseEven eventPrerequisites() { return [ - () => V.arcologies[0].FSRestart === "unset" + () => !FutureSocieties.isActive('FSRestart') ]; } diff --git a/src/events/reRecruit/femaleSD2.js b/src/events/reRecruit/femaleSD2.js index 1a18bb6742b1e658a4430f35b99226aa62d147c6..71564dec0836a6e9db14dbaa7931054180a27816 100644 --- a/src/events/reRecruit/femaleSD2.js +++ b/src/events/reRecruit/femaleSD2.js @@ -38,7 +38,7 @@ App.Events.recFemaleSD2 = class recFemaleSD2 extends App.Events.BaseEvent { App.Events.addParagraph(node, r); r = []; r.push(`Given the damage to an expensive classic car and the meager balance of ${his} bank accounts, this student is definitively up for enslavement. There's no way ${he} or even anyone related to ${him} could come up with the cash.`); - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { r.push(`All of which leaves you with an opportunity... the car's owner hasn't seen ${him} yet, so you could conceivably approach him and buy the debt for this beauty off him. Better be quick, if he realizes what is waiting in a cell for him, you doubt he'd sell ${him} at all.`); } else { r.push(`Most slavers wouldn't give such a bloated slave a second look, but your eyes are keen; there is a rather pretty face buried under all that flab. With a bit of work, ${he} can be turned into a rather valuable asset; also it's always fun to break a haughty bitch into an obedient slut.`); diff --git a/src/events/reRecruit/racerLoser.js b/src/events/reRecruit/racerLoser.js index eb21051481abbc754fd476a006041c1bb902331d..61677dcbc57f1225a6958ba483120c8f00521ebb 100644 --- a/src/events/reRecruit/racerLoser.js +++ b/src/events/reRecruit/racerLoser.js @@ -101,7 +101,7 @@ App.Events.recRacerLoser = class recRacerLoser extends App.Events.BaseEvent { slave.pregWeek = 1; slave.pregType = 1; slave.pregKnown = 1; - WombImpregnate(slave, slave.pregType, slave.pregSource, 0); + WombImpregnate(slave, slave.pregType, slave.pregSource, 1); return slave; } } diff --git a/src/events/recETS/recetsDesperateBroodmother.js b/src/events/recETS/recetsDesperateBroodmother.js index fbb7fbec138e86eb3223bab78dd50e40f1e3cc2a..9fe47e45cbee58f51bbcf0f205adcc9d2ae03b10 100644 --- a/src/events/recETS/recetsDesperateBroodmother.js +++ b/src/events/recETS/recetsDesperateBroodmother.js @@ -4,7 +4,7 @@ App.Events.recetsDesperateBroodmother = class recetsDesperateBroodmother extends () => V.seeDicks !== 100, () => V.seePreg !== 0, () => V.seeHyperPreg === 1, - () => V.arcologies[0].FSRestart === "unset", + () => !FutureSocieties.isActive('FSRestart'), () => V.rep / 400 > random(1, 100) || (V.debugMode > 0 && V.debugModeEventSelection > 0) ]; } diff --git a/src/events/recETS/recetsIncestFatherDaughter.js b/src/events/recETS/recetsIncestFatherDaughter.js index 73d856ab5582faa700fe7bb014adb12d2118e7c1..e143a78d2f056df40bc70f8bd0b8378093d17c6e 100644 --- a/src/events/recETS/recetsIncestFatherDaughter.js +++ b/src/events/recETS/recetsIncestFatherDaughter.js @@ -4,7 +4,7 @@ App.Events.recetsIncestFatherDaughter = class recetsIncestFatherDaughter extends () => V.seeDicks !== 100, () => V.seeDicks !== 0, () => V.seeIncest !== 0, - () => V.arcologies[0].FSRestart === "unset", + () => !FutureSocieties.isActive('FSRestart'), () => V.rep / 400 > random(1, 100) || (V.debugMode > 0 && V.debugModeEventSelection > 0) ]; } diff --git a/src/events/scheduled/murderAttempt.js b/src/events/scheduled/murderAttempt.js index 7de099c66749f3cd75a366b6792432bf407d40fa..2ea765366f6627520be4f568184582eadd71c8f2 100644 --- a/src/events/scheduled/murderAttempt.js +++ b/src/events/scheduled/murderAttempt.js @@ -37,7 +37,7 @@ App.Events.MurderAttempt = class MurderAttempt extends App.Events.BaseEvent { } } const companyName = ["RealTec", "Horizons Unlimited", "Dix Trade", "TA Technology"].random() + ["", " Inc."].random(); - const {he, He, his, him, woman, himself} = getPronouns((V.arcologies[0].FSGenderFundamentalist !== "unset" || V.seeDicks > random(0, 99)) + const {he, He, his, him, woman, himself} = getPronouns((FutureSocieties.isActive('FSGenderFundamentalist') || V.seeDicks > random(0, 99)) ? {pronoun: App.Data.Pronouns.Kind.male} : {pronoun: App.Data.Pronouns.Kind.female}); const {womanPC} = getPronouns(V.PC).appendSuffix("PC"); diff --git a/src/events/scheduled/pitFight.js b/src/events/scheduled/pitFight.js index b3500bbec14d9fc192c18891a3c6cce0a3c0e6d6..36bebbc909cf58a4c1aa3b944e4e0719da0e053f 100644 --- a/src/events/scheduled/pitFight.js +++ b/src/events/scheduled/pitFight.js @@ -214,7 +214,7 @@ App.Events.SEPitFight = class SEPitFight extends App.Events.BaseEvent { r.push("They expect to see a mix of lethal and nonlethal fights."); } - if (V.arcologies[0].FSRomanRevivalist !== "unset") { + if (FutureSocieties.isActive('FSRomanRevivalist')) { r.push(`They `, App.UI.DOM.makeElement("span", 'strongly approve', ["reputation", "inc"]), ` of your hosting combat between slaves; this advances ideas from antiquity about what public events should be.`); @@ -223,13 +223,13 @@ App.Events.SEPitFight = class SEPitFight extends App.Events.BaseEvent { } if (V.pit.minimumHealth) { - if (V.arcologies[0].FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist')) { r.push(`They `, App.UI.DOM.makeElement("span", 'strongly approve', ["reputation", "inc"]), ` of restricting fights to healthy slaves; this advances ideas about slave well-being.`); repX(10 * V.FSSingleSlaveRep * (V.arcologies[0].FSPaternalist / V.FSLockinLevel), "pit"); V.arcologies[0].FSPaternalist += (0.2 * V.FSSingleSlaveRep); - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (FutureSocieties.isActive('FSDegradationist')) { r.push(`They `, App.UI.DOM.makeElement("span", 'strongly disapprove', ["reputation", "dec"]), ` of restricting fights to healthy slaves; this hampers ideas about slave degradation.`); @@ -237,13 +237,13 @@ App.Events.SEPitFight = class SEPitFight extends App.Events.BaseEvent { V.arcologies[0].FSDegradationist -= (0.2 * V.FSSingleSlaveRep); } } else { - if (V.arcologies[0].FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist')) { r.push(`They `, App.UI.DOM.makeElement("span", 'strongly disapprove', ["reputation", "dec"]), ` of allowing ill slaves to fight; this hampers ideas about slave well-being.`); repX(-10 * V.FSSingleSlaveRep * (V.arcologies[0].FSPaternalist / V.FSLockinLevel), "pit"); V.arcologies[0].FSPaternalist -= (0.2 * V.FSSingleSlaveRep); - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (FutureSocieties.isActive('FSDegradationist')) { r.push(`They `, App.UI.DOM.makeElement("span", 'strongly approve', ["reputation", "inc"]), ` of allowing ill slaves to fight; this advances ideas about slave degradation.`); diff --git a/src/events/scheduled/seFctvRemote.js b/src/events/scheduled/seFctvRemote.js index 7fda6bde8c9be0d6639665a2353ee5ff3b75e590..a0bd922c3734f52e0db69597bb831dad5be73ae5 100644 --- a/src/events/scheduled/seFctvRemote.js +++ b/src/events/scheduled/seFctvRemote.js @@ -395,21 +395,21 @@ App.Events.SEfctvRemote = class SEfctvRemote extends App.Events.BaseEvent { const frag = new DocumentFragment(); let r = []; r.push(`You know well that in`); - if (V.arcologies[0].FSRomanRevivalist !== "unset") { + if (FutureSocieties.isActive('FSRomanRevivalist')) { r.push(`Roman days,`); - } else if (V.arcologies[0].FSNeoImperialist !== "unset") { + } else if (FutureSocieties.isActive('FSNeoImperialist')) { r.push(`the Dark Ages,`); - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSAztecRevivalist')) { r.push(`Aztec days,`); - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSEgyptianRevivalist')) { r.push(`Ancient Egypt,`); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSEdoRevivalist')) { r.push(`the Edo period,`); - } else if (V.arcologies[0].FSArabianRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSArabianRevivalist')) { r.push(`the Caliphates,`); - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSChineseRevivalist')) { r.push(`imperial China,`); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSAntebellumRevivalist')) { r.push(`the Antebellum days,`); } else { r.push(`ancient times,`); diff --git a/src/events/scheduled/seIndependenceDay.js b/src/events/scheduled/seIndependenceDay.js index d6d0188914c7120de473720ae1f802822fbc2f75..71ba2489b09331bf3aa32f70fc9ee0558f8ed03a 100644 --- a/src/events/scheduled/seIndependenceDay.js +++ b/src/events/scheduled/seIndependenceDay.js @@ -39,6 +39,7 @@ App.Events.SEIndependenceDay = class SEIndependenceDay extends App.Events.BaseEv const frag = new DocumentFragment(); r = []; const arc = V.arcologies[0]; + const arcInfo = new App.Utils.Arcology(arc); r.push(`You broadcast a speech to mark the occasion, using the arcology's media systems to reach a wide audience. It is unnecessary to make an effort to ensure attention;`); if (arc.FSChattelReligionistLaw === 1) { r.push(`the Prophet's word always receives complete attention on the rare occasions that it is publicly given.`); @@ -360,194 +361,194 @@ App.Events.SEIndependenceDay = class SEIndependenceDay extends App.Events.BaseEv App.Events.addParagraph(frag, r); r = []; r.push(`With this bridge, you move to arcology culture.`); - if (arc.FSRomanRevivalist !== "unset") { + if (FutureSocieties.isActive('FSRomanRevivalist', arc)) { if (arc.FSRomanRevivalist >= 90) { r.push(`You speak warmly of the state of New Rome, and express a hope that Roman honor and justice shall once again last a thousand years.`); } else if (arc.FSRomanRevivalist >= 40) { r.push(`You ask that your citizens will support Roman values.`); } - } else if (arc.FSNeoImperialist !== "unset") { + } else if (FutureSocieties.isActive('FSNeoImperialist', arc)) { if (arc.FSNeoImperialist >= 90) { r.push(`You speak warmly of the state of the magnificent new Imperial society that you have built together, and proclaim that your mighty Empire will stand amongst the ashes, no matter what the world seeks to throw at it.`); } else if (arc.FSNeoImperialist >= 40) { r.push(`You ask that your citizens believe in your Imperial right to rule, and build a new society that will stand the test of time together.`); } - } else if (arc.FSAztecRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSAztecRevivalist', arc)) { if (arc.FSAztecRevivalist >= 90) { r.push(`You speak warmly of the state of the new golden City of the Gods, and express a hope that this time, the empire will stand forever.`); } else if (arc.FSAztecRevivalist >= 40) { r.push(`You ask that your citizens strengthen their belief in the Aztec Gods.`); } - } else if (arc.FSEgyptianRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSEgyptianRevivalist', arc)) { if (arc.FSEgyptianRevivalist >= 90) { r.push(`You speak warmly of the state of the new land of the Nile, and express a hope that that most enduring of cultures shall endure again.`); } else if (arc.FSEgyptianRevivalist >= 40) { r.push(`You ask that your citizens will support the beauty of ancient Egypt.`); } - } else if (arc.FSEdoRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSEdoRevivalist', arc)) { if (arc.FSEdoRevivalist >= 90) { r.push(`You speak warmly of the state of the new land of Amaterasu, and express a hope that honor and virtue shall never cease their advance towards perfection.`); } else if (arc.FSEdoRevivalist >= 40) { r.push(`You ask that your citizens will support the honor and beauty of Edo culture.`); } - } else if (arc.FSArabianRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSArabianRevivalist', arc)) { if (arc.FSArabianRevivalist >= 90) { r.push(`You speak warmly of the state of the new Caliphate, and express a hope that its prosperity shall continue to encompass more people each day.`); } else if (arc.FSArabianRevivalist >= 40) { r.push(`You ask that your citizens will continue to enjoy the good works of the new Caliphate.`); } - } else if (arc.FSChineseRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSChineseRevivalist', arc)) { if (arc.FSChineseRevivalist >= 90) { r.push(`You speak warmly of the state of the Middle Kingdom, and express a hope that it will continue to be worthy of the Mandate of Heaven.`); } else if (arc.FSChineseRevivalist >= 40) { r.push(`You ask that your citizens will continue to support your pursuit of the Mandate of Heaven.`); } - } else if (arc.FSAntebellumRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSAntebellumRevivalist', arc)) { if (arc.FSAntebellumRevivalist >= 90) { r.push(`You speak warmly of the state of the magnificent new Southron society that you have built together, and express a hope that it's strength will never again falter. `); } else if (arc.FSAntebellumRevivalist >= 40) { r.push(`You ask that your citizens will support the beauty of the American South and to uphold it's God-given principles.`); } } - if (arc.FSChattelReligionist !== "unset") { + if (FutureSocieties.isActive('FSChattelReligionist', arc)) { if (arc.FSChattelReligionist >= 90) { r.push(`You speak warmly of the spiritual state of the arcology, and express a hope that enjoyment of the pleasure of creation through the holy office of sexual slavery will be perpetual.`); } else if (arc.FSChattelReligionist >= 40) { r.push(`You ask that your citizens will continue to support the new faith by regularly fucking their sex slaves.`); } } - if (arc.FSIntellectualDependency !== "unset") { + if (FutureSocieties.isActive('FSIntellectualDependency', arc)) { if (arc.FSIntellectualDependency >= 90) { r.push(`You almost lose track of time rhapsodizing about bimbos and their bottomless appetite for sex, but it's not like your citizens ever tire of the subject.`); } else if (arc.FSIntellectualDependency >= 40) { r.push(`You ask your citizens to help a horny bimbo ease their stress tonight.`); } - } else if (arc.FSSlaveProfessionalism !== "unset") { + } else if (FutureSocieties.isActive('FSSlaveProfessionalism', arc)) { if (arc.FSSlaveProfessionalism >= 90) { r.push(`You speak in depth of the benefits of a keen mind in a skilled slave and before long the crowd has sparked a discussion on the topic.`); } else if (arc.FSSlaveProfessionalism >= 40) { r.push(`You ask that your citizens stop and have a conversation with a slave every now and then. They may be surprised.`); } } - if (arc.FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist', arc)) { if (arc.FSDegradationist >= 90) { r.push(`You speak warmly of the degraded state of the arcology's slaves, and express a hope that your citizens will remain vigilant on this matter.`); } else if (arc.FSDegradationist >= 40) { r.push(`You ask that your citizens will continue to be inventive in coming up with new ways to degrade sex slaves.`); } - } else if (arc.FSPaternalist !== "unset") { + } else if (FutureSocieties.isActive('FSPaternalist', arc)) { if (arc.FSPaternalist >= 90) { r.push(`You speak warmly of the creditable state of the arcology's slaves, and express a hope that their improvement will never stop.`); } else if (arc.FSPaternalist >= 40) { r.push(`You ask that your citizens will make an effort to leave at least one slave happier tonight than she was this morning.`); } } - if (arc.FSYouthPreferentialist !== "unset") { + if (FutureSocieties.isActive('FSYouthPreferentialist', arc)) { if (arc.FSYouthPreferentialist >= 90) { r.push(`You almost lose track of time rhapsodizing about young girls, but it's not like your citizens ever tire of the subject.`); } else if (arc.FSYouthPreferentialist >= 40) { r.push(`You rhapsodize about how wonderful sex with a tight young girl is, and encourage citizens who haven't done so to give it a try.`); } - } else if (arc.FSMaturityPreferentialist !== "unset") { + } else if (FutureSocieties.isActive('FSMaturityPreferentialist', arc)) { if (arc.FSMaturityPreferentialist >= 90) { r.push(`You almost lose track of time rhapsodizing about mature women, but it's not like your citizens ever tire of the subject.`); } else if (arc.FSMaturityPreferentialist >= 40) { r.push(`You rhapsodize about how wonderful sex with a mature woman is, and encourage citizens who haven't done so to give it a try.`); } } - if (arc.FSPetiteAdmiration !== "unset") { + if (FutureSocieties.isActive('FSPetiteAdmiration', arc)) { if (arc.FSPetiteAdmiration >= 90) { r.push(`You almost lose track of time rhapsodizing about short slaves, but it's not like your citizens ever tire of the subject.`); } else if (arc.FSPetiteAdmiration >= 40) { r.push(`You rhapsodize about how magical it is to have a slave casually walk up and put their mouth to work without having to kneel down, and encourage citizens who haven't done so to give it a try.`); } - } else if (arc.FSStatuesqueGlorification !== "unset") { + } else if (FutureSocieties.isActive('FSStatuesqueGlorification', arc)) { if (arc.FSStatuesqueGlorification >= 90) { r.push(`You almost lose track of time rhapsodizing about tall women, but it's not like your citizens ever tire of the subject.`); } else if (arc.FSStatuesqueGlorification >= 40) { r.push(`You implore your citizens to not waste their time on the short and instead focus only on the tall.`); } } - if (arc.FSRepopulationFocus !== "unset") { + if (FutureSocieties.isActive('FSRepopulationFocus', arc)) { if (arc.FSRepopulationFocus >= 90) { r.push(`You rhapsodize on the wonderful display of pregnancies you see daily, and affirm that the arcology will continue to be a bastion of the future.`); } else if (arc.FSRepopulationFocus >= 40) { r.push(`You ask that your citizens will make an effort to put a child in at least one of their slaves tonight.`); } - } else if (arc.FSRestart !== "unset") { + } else if (FutureSocieties.isActive('FSRestart', arc)) { if (arc.FSRestart >= 90) { r.push(`You implore your citizens to cease reproducing and accept the Societal Elite as the world's heirs.`); } else if (arc.FSRestart >= 40) { r.push(`You ask that your citizens will make an effort to prevent slave pregnancies.`); } } - if (arc.FSAssetExpansionist !== "unset") { + if (FutureSocieties.isActive('FSAssetExpansionist', arc)) { if (arc.FSAssetExpansionist >= 90) { r.push(`You rhapsodize on the wonderful display of tits and ass you see daily, and affirm that despite this, no boob is ever big enough, and the expansion should never stop.`); } else if (arc.FSAssetExpansionist >= 40) { r.push(`You request that your citizens continue to do their best to expand their slaves' breasts.`); } - } else if (arc.FSSlimnessEnthusiast !== "unset") { + } else if (FutureSocieties.isActive('FSSlimnessEnthusiast', arc)) { if (arc.FSSlimnessEnthusiast >= 90) { r.push(`You rhapsodize on the wonderfully girlish bodies you see daily, and affirm that the arcology will continue to make its own way in slave fashion.`); } else if (arc.FSSlimnessEnthusiast >= 40) { r.push(`You request that your citizens continue to do their best to keep their slaves fit and slim.`); } } - if (arc.FSTransformationFetishist !== "unset") { + if (FutureSocieties.isActive('FSTransformationFetishist', arc)) { if (arc.FSTransformationFetishist >= 90) { r.push(`You note some of the most interesting transformations you've seen in the arcology, and hold them up as examples of surgical inventiveness.`); } else if (arc.FSTransformationFetishist >= 40) { r.push(`You advocate for continued research and development into new ways to surgically transform slaves.`); } - } else if (arc.FSBodyPurist !== "unset") { + } else if (FutureSocieties.isActive('FSBodyPurist', arc)) { if (arc.FSBodyPurist >= 90) { r.push(`You note your approval of the arcology's progress in achieving slave beauty without polluting slave bodies, and hope it will never stop.`); } else if (arc.FSBodyPurist >= 40) { r.push(`You advocate for continued research and development into less invasive ways of altering slaves' bodies.`); } } - if (arc.FSGenderRadicalist !== "unset") { + if (FutureSocieties.isActive('FSGenderRadicalist', arc)) { if (arc.FSGenderRadicalist >= 90) { r.push(`You review your arcology's near-perfect eagerness to treat every slave like the girl she is with approval.`); } else if (arc.FSGenderRadicalist >= 40) { r.push(`You argue for continued progress towards a society that is willing to accept anyone who sucks dick or takes a buttfuck as a girl.`); } - } else if (arc.FSGenderFundamentalist !== "unset") { + } else if (FutureSocieties.isActive('FSGenderFundamentalist', arc)) { if (arc.FSGenderFundamentalist >= 90) { r.push(`You review your arcology's refinement of old world gender mores into a future populated by beautiful slave women with approval.`); } else if (arc.FSGenderFundamentalist >= 40) { r.push(`You argue for continued progress towards a society that maintains all the best parts of old world gender mores.`); } } - if (arc.FSPhysicalIdealist !== "unset") { + if (FutureSocieties.isActive('FSPhysicalIdealist', arc)) { if (arc.FSPhysicalIdealist >= 90) { r.push(`You wax poetic on the physical achievements of your arcology, but caution your citizens that perfection in this area is impossible: one must always strive.`); } else if (arc.FSPhysicalIdealist >= 40) { r.push(`You review some recent physical achievements by notable slaves, compliment their owners, and express a hope for continued physical development.`); } - } else if (arc.FSHedonisticDecadence !== "unset") { + } else if (FutureSocieties.isActive('FSHedonisticDecadence', arc)) { if (arc.FSHedonisticDecadence >= 90) { r.push(`You implore your citizens to sit back with a nice cold drink, a big plate of their favorite foods, and a perfectly plush slave${girlU} between their legs.`); } else if (arc.FSHedonisticDecadence >= 40) { r.push(`You ask your citizens to relax and take a load off, to enjoy life while they have the chance.`); } } - if (arc.FSSupremacist !== "unset") { + if (FutureSocieties.isActive('FSSupremacist', arc)) { if (arc.FSSupremacist >= 90) { r.push(`You express confidence in the state of the ${arc.FSSupremacistRace} race in your arcology, and express the hope that it will serve as a worldwide model.`); } else if (arc.FSSupremacist >= 40) { r.push(`You compliment the ${arc.FSSupremacistRace} citizens who have done the most work to exalt their race over others.`); } } - if (arc.FSSubjugationist !== "unset") { + if (FutureSocieties.isActive('FSSubjugationist', arc)) { if (arc.FSSubjugationist >= 90) { r.push(`You mention the state of the ${arc.FSSubjugationistRace} race here with approval, but ask your citizens to continue to support you here, since vigilance will never be unnecessary.`); } else if (arc.FSSubjugationist >= 40) { r.push(`You commend your citizens for their attention to subjugation of the ${arc.FSSubjugationistRace} race, and exhort them to greater efforts there.`); } } - if (arc.FSPastoralist !== "unset") { + if (FutureSocieties.isActive('FSPastoralist', arc)) { if (arc.FSPastoralist >= 90) { r.push(`You communicate your pride in the state of cow husbandry in your arcology, and hope that its global cachet for quality will continue to grow.`); } else if (arc.FSPastoralist >= 40) { diff --git a/src/events/scheduled/seNicaeaAnnouncement.js b/src/events/scheduled/seNicaeaAnnouncement.js index f94b6348cf30b35e340c5345439a20d6e2663b9b..708fbcbcb37d9377a76d58dcbf3b8bf1bd55c175 100644 --- a/src/events/scheduled/seNicaeaAnnouncement.js +++ b/src/events/scheduled/seNicaeaAnnouncement.js @@ -2,7 +2,7 @@ App.Events.SENicaeaAnnouncement = class SENicaeaAnnouncement extends App.Events. eventPrerequisites() { return [ () => V.nicaea.held !== 1, - () => V.arcologies[0].FSChattelReligionist !== "unset", + () => FutureSocieties.isActive('FSChattelReligionist'), () => V.arcologies[0].FSChattelReligionist >= V.FSLockinLevel, () => V.nicaea.announced !== 1, () => V.nicaea.eventWeek !== V.week diff --git a/src/events/scheduled/seNicaeaCouncil.js b/src/events/scheduled/seNicaeaCouncil.js index 5b8af802a69930e7563daf6c7d691a0edb4e60a1..c3ef1c5f3074213360db84a2f6e73391795ce797 100644 --- a/src/events/scheduled/seNicaeaCouncil.js +++ b/src/events/scheduled/seNicaeaCouncil.js @@ -2,7 +2,7 @@ App.Events.SENicaeaCouncil = class SENicaeaCouncil extends App.Events.BaseEvent eventPrerequisites() { return [ () => V.nicaea.held !== 1, - () => V.arcologies[0].FSChattelReligionist !== "unset", + () => FutureSocieties.isActive('FSChattelReligionist'), () => V.nicaea.involvement >= 0, () => V.nicaea.eventWeek !== V.week ]; diff --git a/src/events/scheduled/seNicaeaPreperation.js b/src/events/scheduled/seNicaeaPreperation.js index ee5f163ede5ed4e20d301f1124c824bccffd8b7c..cdf09395099c768a6046593e32597337c46e7d41 100644 --- a/src/events/scheduled/seNicaeaPreperation.js +++ b/src/events/scheduled/seNicaeaPreperation.js @@ -2,7 +2,7 @@ App.Events.SENicaeaPreparation = class SENicaeaPreparation extends App.Events.Ba eventPrerequisites() { return [ () => V.nicaea.held !== 1, - () => V.arcologies[0].FSChattelReligionist !== "unset", + () => FutureSocieties.isActive('FSChattelReligionist'), () => V.nicaea.preparation === 1, () => V.nicaea.eventWeek !== V.week ]; @@ -93,4 +93,3 @@ App.Events.SENicaeaPreparation = class SENicaeaPreparation extends App.Events.Ba } } }; - diff --git a/src/events/scheduled/sePlayerBirth.js b/src/events/scheduled/sePlayerBirth.js index 43fad3e0b64887cb279e72c4950bc6653a43f7f2..c24928ae8961870065ceafbdf650026cd9c3084e 100644 --- a/src/events/scheduled/sePlayerBirth.js +++ b/src/events/scheduled/sePlayerBirth.js @@ -106,7 +106,7 @@ App.Events.SEPlayerBirth = class SEPlayerBirth extends App.Events.BaseEvent { let r = new SpacedTextAccumulator(node); - if ((elite > 0 || self > 0) && V.arcologies[0].FSRestart !== "unset") { /* for simplicity's sake, not going to allow other embryos to be added during an elite pregnancy */ + if ((elite > 0 || self > 0) && FutureSocieties.isActive('FSRestart')) { /* for simplicity's sake, not going to allow other embryos to be added during an elite pregnancy */ r.push(`Since you are heavily pregnant with`); if (elite + self >= 2) { r.push(`children`); @@ -964,13 +964,13 @@ App.Events.SEPlayerBirth = class SEPlayerBirth extends App.Events.BaseEvent { V.failedElite += 200; } else if (V.arcologies[0].FSChattelReligionistLaw === 1) { r.push(`Rumors spread that The Prophet gave birth to a slave's ${(curBabies > 1) ? "children" : "child"}.`); - if (V.arcologies[0].FSSupremacist !== "unset") { + if (FutureSocieties.isActive('FSSupremacist')) { if (pb.race !== V.arcologies[0].FSSupremacistRace) { r.push(`Word is that your child${curBabies > 1 ? `ren were` : `was`} not ${V.arcologies[0].FSSupremacistRace}. As The Prophet saw fit to bear such a child, society views it as a sign to <span class="red">reject ${V.arcologies[0].FSSupremacistRace} supremacy.</span>`); V.arcologies[0].FSSupremacist -= 120; } } - if (V.arcologies[0].FSSubjugationist !== "unset") { + if (FutureSocieties.isActive('FSSubjugationist')) { if (pb.race === V.arcologies[0].FSSubjugationistRace) { r.push(`In addition, The Prophet's womb bore ${V.arcologies[0].FSSubjugationistRace} ${(curBabies > 1) ? "children" : "a child"}, surely a sign to <span class="red">reject ${V.arcologies[0].FSSubjugationistRace} subjugation.</span>`); V.arcologies[0].FSSubjugationist -= 120; @@ -979,13 +979,13 @@ App.Events.SEPlayerBirth = class SEPlayerBirth extends App.Events.BaseEvent { } else { r.push(`Rumors spread that your child${curBabies > 1 ? `ren were` : `was`} fathered by a slave, <span class="red">harming your lasting reputation.</span>`); V.PC.degeneracy += 20; - if (V.arcologies[0].FSSupremacist !== "unset") { + if (FutureSocieties.isActive('FSSupremacist')) { if (pb.race !== V.arcologies[0].FSSupremacistRace) { r.push(`Furthermore, word is that your child${curBabies > 1 ? `ren were` : `was`} not ${V.arcologies[0].FSSupremacistRace}, <span class="red">further hurting your lasting reputation.</span>`); V.PC.degeneracy += 10; } } - if (V.arcologies[0].FSSubjugationist !== "unset") { + if (FutureSocieties.isActive('FSSubjugationist')) { if (pb.race === V.arcologies[0].FSSubjugationistRace) { r.push(`In addition, there is a nasty rumor that you gave birth to ${V.arcologies[0].FSSubjugationistRace} ${(curBabies > 1) ? "children" : "a child"}, <span class="red">devastating your lasting reputation.</span>`); V.PC.degeneracy += 50; diff --git a/src/events/scheduled/seRaiding.js b/src/events/scheduled/seRaiding.js index 94c071588054cabd5a8f5d83f223c12f2b4173d5..29255c816505a4d1f5b098bb69f5d11ef1d42d0c 100644 --- a/src/events/scheduled/seRaiding.js +++ b/src/events/scheduled/seRaiding.js @@ -996,9 +996,9 @@ App.Events.SERaiding = class SERaiding extends App.Events.BaseEvent { if (targetEscape > MercCapture) { r.push(`The ${V.mercenariesTitle} clash with the politician's security detail amidst a maelstrom of terrified civilians and the confrontation drags out for some time. By the time your ${V.mercenariesTitle} can advance, they discover that the politician has already been evacuated.`); } else if (raidEscape === 1) { - r.push(`With their security detail defeated and their crowd of supporters offering no protection, the politician tries to take up one of ${his} fallen protector's pistols to defend ${himself}. Unfortunately for ${him} and for your mercenaries, the politician has a staggeringly poor understanding of firearms and manages to shoot themselves in the face when they discharge the weapon. With the politician dead, there is little your ${V.mercenariesTitle} can do but exit the venue.`); + r.push(`With ${his} security detail defeated and ${his} crowd of supporters offering no protection, the politician tries to take up one of ${his} fallen protectors' pistols to defend ${himself}. Unfortunately for ${him} and for your mercenaries, the politician has a staggeringly poor understanding of firearms and manages to shoot ${himself} in the face when ${he} discharges the weapon. With the politician dead, there is little your ${V.mercenariesTitle} can do but exit the venue.`); } else { - r.push(`With their security detail defeated and their crowd of supporters offering no protection, the politician promptly surrenders in the hopes that they won't be harmed and is escorted to the waiting VTOL. The politician spends the VTOL ride quietly, only breaking ${his} silence to ask your ${V.mercenariesTitle} about where ${he} is being brought and why. When they do not answer ${he} simply fusses with ${his} outfit, as if headed to an important interview.`); + r.push(`With ${his} security detail defeated and ${his} crowd of supporters offering no protection, the politician promptly surrenders in the hopes that ${he} won't be harmed and is escorted to the waiting VTOL. The politician spends the VTOL ride quietly, only breaking ${his} silence to ask your ${V.mercenariesTitle} about where ${he} is being brought and why. When they do not answer ${he} simply fusses with ${his} outfit, as if headed to an important interview.`); newSlave(slave); // skip New Slave Intro } @@ -1020,7 +1020,7 @@ App.Events.SERaiding = class SERaiding extends App.Events.BaseEvent { } else if (raidEscape === 1) { r.push(`When the ${V.mercenariesTitle} break down the door to the shut-in's shack, they are met with a terrible stench of dust and decay. Judging by the body hanging limply from the banisters, the shut-in took ${his} own life some time ago.`); } else { - r.push(`When your ${V.mercenariesTitle} break down the door to the shut-in's shack, they are met with a surprised and somewhat unkempt ${woman} staring at them. Despite ${his} lack of social interaction, they know better than to argue with a small army of armed ${V.mercenariesTitle} and quietly accepts being escorted back to the waiting VTOL. The shut-in spends the VTOL ride sitting quietly in ${his} seat. Confused by ${his} silence, your ${V.mercenariesTitle} attempt to engage ${him} in conversation but are granted no response.`); + r.push(`When your ${V.mercenariesTitle} break down the door to the shut-in's shack, they are met with a surprised and somewhat unkempt ${woman} staring at them. Despite ${his} lack of social interaction, ${he} knows better than to argue with a small army of armed ${V.mercenariesTitle} and quietly accepts being escorted back to the waiting VTOL. The shut-in spends the VTOL ride sitting quietly in ${his} seat. Confused by ${his} silence, your ${V.mercenariesTitle} attempt to engage ${him} in conversation but are granted no response.`); newSlave(slave); // skip New Slave Intro } @@ -1042,7 +1042,7 @@ App.Events.SERaiding = class SERaiding extends App.Events.BaseEvent { } else if (raidEscape === 1) { r.push(`When your ${V.mercenariesTitle} corner the investor in the exposition, ${he} seemingly mistakes them for international police intent on taking ${him} in for prior economic crimes. Before ${he} can be subdued, the investor swallows a concealed pill and crumples to the ground dead.`); } else { - r.push(`When your ${V.mercenariesTitle} corner the investor in the exposition, ${he} seemingly mistakes them for international police intent on taking ${him} in for prior economic crimes. ${He} begrudgingly surrenders and is subsequently escorted back to a waiting VTOL. The investor spends the VTOL ride practicing their sales pitches, techniques and speeches. It seems they haven't grasped what their destination is, nor the fate that awaits them upon arrival.`); + r.push(`When your ${V.mercenariesTitle} corner the investor in the exposition, ${he} seemingly mistakes them for international police intent on taking ${him} in for prior economic crimes. ${He} begrudgingly surrenders and is subsequently escorted back to a waiting VTOL. The investor spends the VTOL ride practicing ${his} sales pitches, techniques and speeches. It seems ${he} hasn't grasped what ${his} destination is, nor the fate that awaits ${him} upon arrival.`); newSlave(slave); // skip New Slave Intro } diff --git a/src/events/scheduled/seWedding.js b/src/events/scheduled/seWedding.js index e797b4a9a80dd7aef074d7ec7ae177a31c326272..27f1e120dd838081ddb921098793be91a43c95de 100644 --- a/src/events/scheduled/seWedding.js +++ b/src/events/scheduled/seWedding.js @@ -96,7 +96,7 @@ App.Events.SEWedding = class SEWedding extends App.Events.BaseEvent { r.push(`The ceremony to bind ${fullNamesString} to you as your slave ${solo ? wife : wivesC}`); if (V.weddingPlanned === 3) { // Impregnation ceremony r.push(`and their wombs to you as your private breeding ground is a polite affair which you host in the lower floor of your penthouse.`); - if (V.arcologies[0].FSRestart !== "unset" && (slave1.breedingMark === 0 || V.propOutcome === 0)) { + if (FutureSocieties.isActive('FSRestart') && (slave1.breedingMark === 0 || V.propOutcome === 0)) { r.push(`Barely anyone is there, mostly lower-class citizens, several accompanied by their slaves. Many of your other slaves, that is your slaves who are not being married and fucked pregnant tonight, are present to serve your guests, but are dressed more conservatively than usual. There is a distinct air of unrest in the room, as if the absent Elites' distaste of your actions came in their place.`); } else { r.push(`All the arcology's most prominent citizens are there, most with a favored slave or two and some even with their slave wives. Many of your other slaves, that is your slaves who are not being married and fucked pregnant tonight, are present to serve your guests, but are dressed more conservatively than usual. When assignations between citizen and slave develop, guests are politely encouraged to perform them in side rooms rather than out in view of the main gathering.`); @@ -1255,10 +1255,10 @@ App.Events.SEWedding = class SEWedding extends App.Events.BaseEvent { repX(1250, "event", slave); makeTrinkets(slave); } - if (V.arcologies[0].FSRestart !== "unset" && V.eugenicsFullControl !== 1 && brides.some(b => b.breedingMark === 0 || V.propOutcome === 0)) { + if (FutureSocieties.isActive('FSRestart') && V.eugenicsFullControl !== 1 && brides.some(b => b.breedingMark === 0 || V.propOutcome === 0)) { r.push(`You have <span class="red">infuriated</span> the Societal Elite by this public showing of everything they stand against.`); V.failedElite += 500; - } else if (V.arcologies[0].FSRestart !== "unset" && (brides.some(b => b.breedingMark === 1))) { + } else if (FutureSocieties.isActive('FSRestart') && (brides.some(b => b.breedingMark === 1))) { r.push(`The Societal Elite are <span class="green">very pleased</span> with this public display of their values.`); // TODO: not happy with this sentence V.failedElite -= 250; } diff --git a/src/facilities/ads.js b/src/facilities/ads.js index 9e7134cab6242ccea138884a90d1621d337ee04d..418a978c228c9a205dfcbc50ac242150173c607e 100644 --- a/src/facilities/ads.js +++ b/src/facilities/ads.js @@ -20,9 +20,9 @@ App.Ads.Categories.age = { }, classifyLocalPreference: function() { - if ((V.arcologies[0].FSMaturityPreferentialist !== "unset") && (V.arcologies[0].FSMaturityPreferentialist >= 80)) { + if ((FutureSocieties.isActive('FSMaturityPreferentialist')) && (V.arcologies[0].FSMaturityPreferentialist >= 80)) { return 1; // mature - } else if ((V.arcologies[0].FSYouthPreferentialist !== "unset") && (V.arcologies[0].FSYouthPreferentialist >= 80)) { + } else if ((FutureSocieties.isActive('FSYouthPreferentialist')) && (V.arcologies[0].FSYouthPreferentialist >= 80)) { return -1; // young } return 0; @@ -43,9 +43,9 @@ App.Ads.Categories.assetSize = { }, classifyLocalPreference: function() { - if ((V.arcologies[0].FSAssetExpansionist !== "unset") && (V.arcologies[0].FSAssetExpansionist >= 80)) { + if ((FutureSocieties.isActive('FSAssetExpansionist')) && (V.arcologies[0].FSAssetExpansionist >= 80)) { return 1; // stacked - } else if ((V.arcologies[0].FSSlimnessEnthusiast !== "unset") && (V.arcologies[0].FSSlimnessEnthusiast >= 80)) { + } else if ((FutureSocieties.isActive('FSSlimnessEnthusiast')) && (V.arcologies[0].FSSlimnessEnthusiast >= 80)) { return -1; // slim } return 0; @@ -65,9 +65,9 @@ App.Ads.Categories.assetOrigin = { }, classifyLocalPreference: function() { - if ((V.arcologies[0].FSTransformationFetishist !== "unset") && (V.arcologies[0].FSTransformationFetishist >= 80)) { + if ((FutureSocieties.isActive('FSTransformationFetishist')) && (V.arcologies[0].FSTransformationFetishist >= 80)) { return 1; // implanted - } else if ((V.arcologies[0].FSBodyPurist !== "unset") && (V.arcologies[0].FSBodyPurist >= 80)) { + } else if ((FutureSocieties.isActive('FSBodyPurist')) && (V.arcologies[0].FSBodyPurist >= 80)) { return -1; // natural } return 0; @@ -87,9 +87,9 @@ App.Ads.Categories.mods = { }, classifyLocalPreference: function() { - if ((V.arcologies[0].FSDegradationist !== "unset") && (V.arcologies[0].FSDegradationist >= 80)) { + if ((FutureSocieties.isActive('FSDegradationist')) && (V.arcologies[0].FSDegradationist >= 80)) { return 1; // modded - } else if ((V.arcologies[0].FSBodyPurist !== "unset") && (V.arcologies[0].FSBodyPurist >= 80)) { + } else if ((FutureSocieties.isActive('FSBodyPurist')) && (V.arcologies[0].FSBodyPurist >= 80)) { return -1; // natural } return 0; @@ -109,9 +109,9 @@ App.Ads.Categories.preg = { }, classifyLocalPreference: function() { - if ((V.arcologies[0].FSRepopulationFocus !== "unset") && (V.arcologies[0].FSRepopulationFocus >= 80)) { + if ((FutureSocieties.isActive('FSRepopulationFocus')) && (V.arcologies[0].FSRepopulationFocus >= 80)) { return 1; // pregnant - } else if ((V.arcologies[0].FSRestart !== "unset") && (V.arcologies[0].FSRestart >= 80)) { + } else if ((FutureSocieties.isActive('FSRestart')) && (V.arcologies[0].FSRestart >= 80)) { return -1; // non-pregnant } return 0; @@ -131,9 +131,9 @@ App.Ads.Categories.genitalia = { }, classifyLocalPreference: function() { - if ((V.arcologies[0].FSGenderFundamentalist !== "unset") && (V.arcologies[0].FSGenderFundamentalist >= 80)) { + if ((FutureSocieties.isActive('FSGenderFundamentalist')) && (V.arcologies[0].FSGenderFundamentalist >= 80)) { return 1; // pussies, no dicks - } else if ((V.arcologies[0].FSGenderRadicalist !== "unset") && (V.arcologies[0].FSGenderRadicalist >= 80)) { + } else if ((FutureSocieties.isActive('FSGenderRadicalist')) && (V.arcologies[0].FSGenderRadicalist >= 80)) { return -1; // dicks, pussies optional } return 0; diff --git a/src/facilities/armory/armoryFramework.js b/src/facilities/armory/armoryFramework.js index e5dfab7527cd2b97706b41e97d55924fc63469d7..e434ec34a625404bdaac98bcdda1aa5ded6cd8ae 100644 --- a/src/facilities/armory/armoryFramework.js +++ b/src/facilities/armory/armoryFramework.js @@ -31,7 +31,7 @@ App.Entity.Facilities.BodyguardJob = class extends App.Entity.Facilities.Managin */ checkRequirements(slave) { let r = super.checkRequirements(slave); - if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && V.arcologies[0].FSRestart !== "unset") { + if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && FutureSocieties.isActive('FSRestart')) { r.push(`${slave.slaveName} may not participate in combat.`); } if (slave.indentureRestrictions > 1) { diff --git a/src/facilities/barracks.js b/src/facilities/barracks.js index 1981265b414fa26c200809cba9d365fb263f73ab..847d4f2c8556e47f8b2bf021708a86d8d11cf3a9 100644 --- a/src/facilities/barracks.js +++ b/src/facilities/barracks.js @@ -126,7 +126,7 @@ App.UI.barracks = function() { } = getNonlocalPronouns(V.seeDicks).appendSuffix("U"); r.push(`They're obviously adopting the customs of ${V.arcologies[0].name}.`); let vignette = 0; - if (V.arcologies[0].FSSubjugationist !== "unset" && V.arcologies[0].FSSubjugationistRace) { + if (FutureSocieties.isActive('FSSubjugationist') && V.arcologies[0].FSSubjugationistRace) { r.push(`A mercenary is fingering ${addA(V.arcologies[0].FSSubjugationistRace)} ${girlU}'s`); if (V.seeDicks !== 100) { r.push(`pussy.`); @@ -137,17 +137,17 @@ App.UI.barracks = function() { vignette++; } - if (V.arcologies[0].FSSupremacist !== "unset") { + if (FutureSocieties.isActive('FSSupremacist')) { r.push(`${anotherMerc(vignette)} mercenary, a woman, is being seen to by a multicultural bunch of subhumans of different races. She has one eating her out while two more are rubbing her feet.`); vignette++; } - if (V.arcologies[0].FSGenderRadicalist !== "unset") { + if (FutureSocieties.isActive('FSGenderRadicalist')) { r.push(`${anotherMerc(vignette)} mercenary, who's rather obviously earned enough money to pay for the surgeries and drugs to turn herself into an imposing futanari, is pounding a dickgirl slave.`); vignette++; - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + } else if (FutureSocieties.isActive('FSGenderFundamentalist')) { r.push(`${anotherMerc(vignette)} mercenary is fucking a slave`); - if (V.arcologies[0].FSRestart !== "unset") { + if (FutureSocieties.isActive('FSRestart')) { r.push(`lotus style. His hands are greedily following ${hisU} womanly curves as they bang.`); } else { r.push(`doggy style. He's massaging ${hisU} rounded belly as ${heU} enjoys ${hisU} first foray into motherhood.`); @@ -155,30 +155,30 @@ App.UI.barracks = function() { vignette++; } - if (V.arcologies[0].FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist')) { r.push(`${anotherMerc(vignette)} mercenary is making out with a pretty slave. An old romantic movie is playing on a wallscreen in front of them, forgotten.`); vignette++; - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (FutureSocieties.isActive('FSDegradationist')) { r.push(`${anotherMerc(vignette)} mercenary is using a slave as a footrest as he relaxes. ${HeU} has a huge dildo up ${hisU} ass, and whenever ${heU} moves, he uses a foot to shove it farther inside ${himU}.`); vignette++; } - if (V.arcologies[0].FSIntellectualDependency !== "unset") { + if (FutureSocieties.isActive('FSIntellectualDependency')) { r.push(`${anotherMerc(vignette)} mercenary is player strip poker with a pouting bimbo. ${HeU}'s completely nude and unaware that the game is over, not that the merc minds.`); vignette++; - } else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + } else if (FutureSocieties.isActive('FSSlaveProfessionalism')) { r.push(`${anotherMerc(vignette)} mercenary is practicing assembling and disassembling his sidearm under the learned eyes of his assisting slave. ${HeU} is making sure ${hisU} master is well prepared for the future and stroking his dick each time he does it right.`); vignette++; } - if (V.arcologies[0].FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist')) { r.push(`${yetAnotherMerc(vignette)} mercenary is idly playing with a slave's natural breasts as he watches a wallscreen. He's being gentle and ${heU} doesn't seem to mind.`); vignette++; - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (FutureSocieties.isActive('FSTransformationFetishist')) { r.push(`${yetAnotherMerc(vignette)} mercenary is fucking a bimbo slave doggy style. ${HisU} fake tits are so huge that the motion is making them slap together under ${himU}.`); vignette++; } - if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + if (FutureSocieties.isActive('FSYouthPreferentialist')) { r.push(`${yetAnotherMerc(vignette)} mercenary is getting a blowjob from a young slave. He's playing with ${hisU}`); if (hisU === "her") { r.push(`fresh pussy`); @@ -187,68 +187,68 @@ App.UI.barracks = function() { } r.push(`as ${heU} sucks his dick.`); vignette++; - } else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + } else if (FutureSocieties.isActive('FSMaturityPreferentialist')) { r.push(`${yetAnotherMerc(vignette)} mercenary is getting a massage from a mature slave. ${HeU}'s wearing a towel, but he sneaks a hand back and steals it, freeing ${hisU} heavy breasts.`); vignette++; } - if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + if (FutureSocieties.isActive('FSSlimnessEnthusiast')) { r.push(`${yetAnotherMerc(vignette)} mercenary is getting a lap dance from a lithe slave. ${HeU}'s moving ${hisU} cute butt lower and lower, getting ready to impale ${himselfU} on his raging erection.`); vignette++; - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (FutureSocieties.isActive('FSAssetExpansionist')) { r.push(`${yetAnotherMerc(vignette)} mercenary is almost hidden by a slave he's got in his lap. He has his head buried between ${hisU} monstrous breasts, and it's not clear how he's breathing.`); vignette++; } - if (V.arcologies[0].FSPetiteAdmiration !== "unset") { + if (FutureSocieties.isActive('FSPetiteAdmiration')) { r.push(`${yetAnotherMerc(vignette)} mercenary has a petite slave sitting on a weight bar. Each rep buries ${hisU} butt in his face.`); vignette++; - } else if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { + } else if (FutureSocieties.isActive('FSStatuesqueGlorification')) { r.push(`${yetAnotherMerc(vignette)} mercenary is having sex with a rather tall slave against the lockers. He has to stand on a nearby bench in order to properly penetrate ${himU}.`); vignette++; } - if (V.arcologies[0].FSPastoralist !== "unset") { + if (FutureSocieties.isActive('FSPastoralist')) { r.push(`${yetAnotherMerc(vignette)} mercenary is drinking a slave's milk, straight from the nipple, while idly massaging ${hisU} other breast, bringing out a thin stream of milk.`); vignette++; } - if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (FutureSocieties.isActive('FSPhysicalIdealist')) { r.push(`${yetAnotherMerc(vignette)} mercenary is doing push-ups with a well-endowed slave sitting on his back to add weight. ${HeU}'s counting his reps for him.`); vignette++; - } else if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + } else if (FutureSocieties.isActive('FSHedonisticDecadence')) { r.push(`${yetAnotherMerc(vignette)} mercenary is doing squats with a rather portly slave sitting on his shoulders to add weight. ${HeU} pops a cookie into his mouth with each completed set.`); vignette++; } - if (V.arcologies[0].FSChattelReligionist !== "unset") { + if (FutureSocieties.isActive('FSChattelReligionist')) { r.push(`${yetAnotherMerc(vignette)} mercenary is mounting a praying slave from behind. It doesn't distract ${himU}; ${hisU} quiet devotions become more fervent as he fucks ${himU}.`); vignette++; } - if (V.arcologies[0].FSRepopulationFocus !== "unset") { + if (FutureSocieties.isActive('FSRepopulationFocus')) { r.push(`${yetAnotherMerc(vignette)} mercenary is being ridden by an enormously pregnant slave. He's massaging ${hisU} taut belly as she uses ${hisU} hands to support ${hisU} sore boobs.`); vignette++; - } else if (V.arcologies[0].FSRestart !== "unset") { + } else if (FutureSocieties.isActive('FSRestart')) { r.push(`${yetAnotherMerc(vignette)} mercenary is being serviced by a slave with a visibly smooth crotch. He has a dildo rammed in ${hisU} ass and moves it along with ${hisU} sucking.`); vignette++; } - if (V.arcologies[0].FSRomanRevivalist !== "unset") { + if (FutureSocieties.isActive('FSRomanRevivalist')) { // TODO: - } else if (V.arcologies[0].FSNeoImperialist !== "unset") { + } else if (FutureSocieties.isActive('FSNeoImperialist')) { // TODO: - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSAztecRevivalist')) { // TODO: - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSEgyptianRevivalist')) { // TODO: - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSEdoRevivalist')) { // TODO: - } else if (V.arcologies[0].FSArabianRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSArabianRevivalist')) { // TODO: - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSChineseRevivalist')) { // TODO: - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSAntebellumRevivalist')) { // TODO: } } diff --git a/src/facilities/bodyModification/bodyModification.js b/src/facilities/bodyModification/bodyModification.js index 7cd5944e055b19e30913aecfc95389a553de6dfa..62e3e8c39e42beb684c04353fd8aea40a9effe58 100644 --- a/src/facilities/bodyModification/bodyModification.js +++ b/src/facilities/bodyModification/bodyModification.js @@ -822,7 +822,7 @@ App.UI.bodyModification = function(slave, cheat = false) { selection.append(brand()); el.append(selection); - if (slave.breedingMark === 1 && (V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) { + if (slave.breedingMark === 1 && (V.propOutcome === 0 || V.eugenicsFullControl === 1 || !FutureSocieties.isActive('FSRestart'))) { const r = []; r.push(`${He} has an intricate tattoo on ${his} lower belly that suggests ${he} was made to be bred.`); r.push( diff --git a/src/facilities/cellblock/cellblock.js b/src/facilities/cellblock/cellblock.js index aa72be3cf1f62ce79bc30b0b8dec857d80f63b61..6f7d98d075670478446b99dfcb0dfd0531068582 100644 --- a/src/facilities/cellblock/cellblock.js +++ b/src/facilities/cellblock/cellblock.js @@ -42,7 +42,7 @@ App.Facilities.Cellblock.cellblock = class Cellblock extends App.Facilities.Faci const FS = { "Roman Revivalist": `is designed to resemble the holding pens beneath the old Coliseum. Whenever there's a fight in the arcology, screens in each cell helpfully keep inmates informed of what awaits (otherwise) useless slaves.`, "Neo-Imperialist": `is designed as an ultra high-tech cellblock. Holographic shackles keep slaves locked to rough black cells, kept totally isolated from one another through the complete silence of thick metal walls.`, - "Aztec Revivalist": `is designed to frighten the prisoners to submission. All the cells look to the center of the facility, where a sacrificial altar stands, adorned with ceremonial ${V.arcologies[0].FSPaternalist !== "unset" ? `ropes and penetrators` : `knives, ropes and blunt instruments`}.`, + "Aztec Revivalist": `is designed to frighten the prisoners to submission. All the cells look to the center of the facility, where a sacrificial altar stands, adorned with ceremonial ${FutureSocieties.isActive('FSPaternalist') ? `ropes and penetrators` : `knives, ropes and blunt instruments`}.`, "Egyptian Revivalist": `uses the climate of Egypt as an additional source of discomfort. The air here is hot and dry, and inmates can easily imagine themselves confined in mud brick cells in a baking desert.`, "Edo Revivalist": `is furnished in a severely medieval Japanese style. There is one refinement, but it's of exquisite cruelty. At the end of the hall, there's a fountain with a traditional bamboo boar scarer. As it fills with water, it tips against a stone with a thunk... thunk... thunk... thunk...`, "Arabian Revivalist": `is furnished as imagined Arabian slave pens, all set around a central pillar. This pillar is capped by shackles, so that slaves can be bound by their hands and whipped on the backs, buttocks, and thighs in clear view of all their fellow chattel.`, diff --git a/src/facilities/club/club.js b/src/facilities/club/club.js index 108a814c8a711fb48c64d509a05e29d2da2e6312..707050c2f69c035912fa24d49fc021c73618d2c7 100644 --- a/src/facilities/club/club.js +++ b/src/facilities/club/club.js @@ -163,7 +163,7 @@ App.Facilities.Club.club = class Club extends App.Facilities.Facility { text.push(`A business meeting is just audible from one of the private rooms; only an occasional moan indicates that the businessmen are enjoying a couple of serving girls at the same time.`); break; case "Aztec Revivalist": - text.push(`A muffled ${V.arcologies[0].FSPaternalist !== "unset" ? `moan` : `scream`}, followed by the sounds of liquid gently dripping on the stone floors denote the goings-on in the building.`); + text.push(`A muffled ${FutureSocieties.isActive('FSPaternalist') ? `moan` : `scream`}, followed by the sounds of liquid gently dripping on the stone floors denote the goings-on in the building.`); break; case "Egyptian Revivalist": text.push(`The smell of incense and the sounds of sex are drifting out of the private rooms.`); diff --git a/src/facilities/dairy/dairy.js b/src/facilities/dairy/dairy.js index 2c463fdec1da2f25432ed3d0d156a227e73c11b8..ffbfa57328eec8116ef018b363a03784300573e1 100644 --- a/src/facilities/dairy/dairy.js +++ b/src/facilities/dairy/dairy.js @@ -377,7 +377,7 @@ App.Facilities.Dairy.dairy = class Dairy extends App.Facilities.Facility { cost: 5000 * V.upgradeMultiplierArcology, handler: () => V.PC.skill.engineering += 0.1, prereqs: [ - V.arcologies[0].FSPaternalist === "unset", + !FutureSocieties.isActive('FSPaternalist'), ], }, { diff --git a/src/facilities/dairy/dairyFramework.js b/src/facilities/dairy/dairyFramework.js index f50004d6d362455064c5e334d3abb730e39a164e..28bb46b4be680b6727e5f530c0b89ac23465b840 100644 --- a/src/facilities/dairy/dairyFramework.js +++ b/src/facilities/dairy/dairyFramework.js @@ -52,7 +52,7 @@ App.Entity.Facilities.DairyCowJob = class extends App.Entity.Facilities.Facility if ((slave.indentureRestrictions > 1) && (V.dairyRestraintsSetting > 0)) { r.push(`${slave.slaveName}'s indenture allows only free range milking.`); } - if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && V.arcologies[0].FSRestart !== "unset" && V.dairyRestraintsSetting > 0) { + if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && FutureSocieties.isActive('FSRestart') && V.dairyRestraintsSetting > 0) { r.push(`${slave.slaveName} may only be a free range cow.`); } if ((V.dairyPregSetting > 0) && ((slave.bellyImplant !== -1) || (slave.broodmother !== 0))) { diff --git a/src/facilities/farmyard/shows/farmShowsIncome.js b/src/facilities/farmyard/shows/farmShowsIncome.js index 3c5b619a40f652c638b8472007adc25b9bf3a3aa..ba940e088c3455e18ac4820378790655f7f6a4ee 100644 --- a/src/facilities/farmyard/shows/farmShowsIncome.js +++ b/src/facilities/farmyard/shows/farmShowsIncome.js @@ -34,7 +34,7 @@ App.Facilities.Farmyard.farmShowsIncome = function(slave) { // FS effects - if (arcology.FSSupremacist !== "unset") { + if (FutureSocieties.isActive('FSSupremacist', arcology)) { if (isSuperiorRace(slave)) { if (V.seeBestiality) { cash *= 0.8; @@ -47,7 +47,7 @@ App.Facilities.Farmyard.farmShowsIncome = function(slave) { } } - if (arcology.FSSubjugationist !== "unset") { + if (FutureSocieties.isActive('FSSubjugationist', arcology)) { if (isInferiorRace(slave)) { if (V.seeBestiality) { cash *= 1.2; @@ -60,7 +60,7 @@ App.Facilities.Farmyard.farmShowsIncome = function(slave) { } } - if (arcology.FSRepopulationFocus !== "unset") { + if (FutureSocieties.isActive('FSRepopulationFocus', arcology)) { if (isPreg(slave)) { if (slave.eggType === "human") { cash *= 1.2; @@ -72,7 +72,7 @@ App.Facilities.Farmyard.farmShowsIncome = function(slave) { } } - if (arcology.FSRestart !== "unset") { + if (FutureSocieties.isActive('FSRestart', arcology)) { if (isPreg(slave)) { if (isEliteBreeder(slave)) { if (slave.eggType === "human") { @@ -99,7 +99,7 @@ App.Facilities.Farmyard.farmShowsIncome = function(slave) { } } - if (arcology.FSGenderRadicalist !== "unset") { + if (FutureSocieties.isActive('FSGenderRadicalist', arcology)) { if (slave.genes === "XX") { if (slave.dick > 0) { cash *= 1.2; @@ -111,7 +111,7 @@ App.Facilities.Farmyard.farmShowsIncome = function(slave) { } } - if (arcology.FSGenderFundamentalist !== "unset") { + if (FutureSocieties.isActive('FSGenderFundamentalist', arcology)) { if (isPreg(slave) || App.Data.misc.fakeBellies.includes(slave.bellyAccessory)) { cash *= 1.1; repX(10, "shows"); @@ -130,7 +130,7 @@ App.Facilities.Farmyard.farmShowsIncome = function(slave) { } } - if (arcology.FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist', arcology)) { if (V.seeBestiality) { if (V.policies.bestialityOpenness) { if (slave.devotion > 50) { @@ -154,7 +154,7 @@ App.Facilities.Farmyard.farmShowsIncome = function(slave) { } } - if (arcology.FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist', arcology)) { if (V.seeBestiality) { if (V.farmyardBreeding) { if (V.farmyardRestraints) { @@ -172,7 +172,7 @@ App.Facilities.Farmyard.farmShowsIncome = function(slave) { } } - if (arcology.FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist', arcology)) { if (SlaveStatsChecker.isModded(slave)) { if (heavyMods) { cash *= 0.7; @@ -184,7 +184,7 @@ App.Facilities.Farmyard.farmShowsIncome = function(slave) { } } - if (arcology.FSTransformationFetishist !== "unset") { + if (FutureSocieties.isActive('FSTransformationFetishist', arcology)) { if (SlaveStatsChecker.isModded(slave)) { if (heavyMods) { cash *= 1.3; @@ -196,7 +196,7 @@ App.Facilities.Farmyard.farmShowsIncome = function(slave) { } } - if (arcology.FSYouthPreferentialist !== "unset") { + if (FutureSocieties.isActive('FSYouthPreferentialist', arcology)) { if (isYoung(slave)) { cash *= 1.2; repX(10, "shows"); @@ -206,7 +206,7 @@ App.Facilities.Farmyard.farmShowsIncome = function(slave) { } } - if (arcology.FSMaturityPreferentialist !== "unset") { + if (FutureSocieties.isActive('FSMaturityPreferentialist', arcology)) { if (!isYoung(slave)) { cash *= 1.2; repX(10, "shows"); @@ -216,7 +216,7 @@ App.Facilities.Farmyard.farmShowsIncome = function(slave) { } } - if (arcology.FSSlimnessEnthusiast !== "unset") { + if (FutureSocieties.isActive('FSSlimnessEnthusiast', arcology)) { if (slimLawPass(slave)) { cash *= 1.1; repX(10, "shows"); @@ -227,14 +227,14 @@ App.Facilities.Farmyard.farmShowsIncome = function(slave) { } // FIXME: marked for possible rewrite - if (arcology.FSAssetExpansionist !== "unset") { + if (FutureSocieties.isActive('FSAssetExpansionist', arcology)) { if (isStacked(slave)) { cash *= 1.1; repX(10, "shows"); } } - if (arcology.FSPastoralist !== "unset") { + if (FutureSocieties.isActive('FSPastoralist', arcology)) { if (slave.boobs >= 1000) { cash *= 1.2; repX(10, "shows"); @@ -247,7 +247,7 @@ App.Facilities.Farmyard.farmShowsIncome = function(slave) { } // FIXME: marked for review - if (arcology.FSPhysicalIdealist !== "unset") { + if (FutureSocieties.isActive('FSPhysicalIdealist', arcology)) { if (genderLawPass(slave)) { cash *= 1.1; repX(10, "shows"); @@ -263,7 +263,7 @@ App.Facilities.Farmyard.farmShowsIncome = function(slave) { } } - if (arcology.FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence', arcology)) { if (slave.weight > 10) { cash *= 1.1; } else { @@ -271,7 +271,7 @@ App.Facilities.Farmyard.farmShowsIncome = function(slave) { } } - if (arcology.FSPetiteAdmiration !== "unset") { + if (FutureSocieties.isActive('FSPetiteAdmiration', arcology)) { if (heightPass(slave)) { cash *= 1.1; repX(10, "shows"); @@ -281,7 +281,7 @@ App.Facilities.Farmyard.farmShowsIncome = function(slave) { } } - if (arcology.FSStatuesqueGlorification !== "unset") { + if (FutureSocieties.isActive('FSStatuesqueGlorification', arcology)) { if (heightPass(slave)) { cash *= 1.1; repX(10, "shows"); @@ -354,7 +354,7 @@ App.Facilities.Farmyard.farmShowsIncome = function(slave) { cash *= devotion(cash); if (slave.weight > 30) { - if (arcology.FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence', arcology)) { cash *= 0.8; } // TODO: put this on a scale diff --git a/src/facilities/farmyard/shows/saFarmyardShows.js b/src/facilities/farmyard/shows/saFarmyardShows.js index 4fe5910d4bbdec90ad356b34a822e34838a1795e..8b8be9195bdbfeaee6c3cbd425e01ae7cfe9ae9c 100644 --- a/src/facilities/farmyard/shows/saFarmyardShows.js +++ b/src/facilities/farmyard/shows/saFarmyardShows.js @@ -52,7 +52,7 @@ App.Facilities.Farmyard.putOnShows = function(slave) { function FSEffects() { const text = []; - if (arcology.FSSupremacist !== "unset") { + if (FutureSocieties.isActive('FSSupremacist', arcology)) { if (isSuperiorRace(slave)) { if (V.seeBestiality) { text.push(`Society <span class="reputation dec">disapproves</span> of your allowing a member of the elite race to be degraded in such a fashion, and thus ${he} didn't earn as much.`); @@ -64,7 +64,7 @@ App.Facilities.Farmyard.putOnShows = function(slave) { } } - if (arcology.FSSubjugationist !== "unset") { + if (FutureSocieties.isActive('FSSubjugationist', arcology)) { if (isInferiorRace(slave)) { if (V.seeBestiality) { text.push(`Society <span class="reputation inc">approves</span> of the degradation you submit your ${arcology.FSSubjugationistRace} slaves to, and so ${he} earns you a bit more.`); @@ -79,7 +79,7 @@ App.Facilities.Farmyard.putOnShows = function(slave) { } } - if (arcology.FSRepopulationFocus !== "unset") { + if (FutureSocieties.isActive('FSRepopulationFocus', arcology)) { if (isPreg(slave)) { if (slave.eggType === "human") { text.push(`Society <span class="reputation inc">greatly approves</span> of your having pregnant slaves ${V.seeBestiality ? `have sex` : `put on shows`} with animals.`); @@ -89,7 +89,7 @@ App.Facilities.Farmyard.putOnShows = function(slave) { } } - if (arcology.FSRestart !== "unset") { + if (FutureSocieties.isActive('FSRestart', arcology)) { if (isPreg(slave)) { if (isEliteBreeder(slave)) { if (slave.eggType === "human") { @@ -111,7 +111,7 @@ App.Facilities.Farmyard.putOnShows = function(slave) { } } - if (arcology.FSGenderRadicalist !== "unset") { + if (FutureSocieties.isActive('FSGenderRadicalist', arcology)) { if (slave.dick > 0) { text.push(`${His} patrons <span class="reputation inc">approve</span> of the fact that ${he} has a dick.`); } else { @@ -119,7 +119,7 @@ App.Facilities.Farmyard.putOnShows = function(slave) { } } - if (arcology.FSGenderFundamentalist !== "unset") { + if (FutureSocieties.isActive('FSGenderFundamentalist', arcology)) { if (isPreg(slave) || App.Data.misc.fakeBellies.includes(slave.bellyAccessory)) { text.push(`${His} viewers <span class="reputation inc">approve</span> of the fact that ${he} is sporting a baby bump${App.Data.misc.fakeBellies.includes(slave.bellyAccessory) ? `, even though ${hers} isn't real` : ``}.`); } else { @@ -127,7 +127,7 @@ App.Facilities.Farmyard.putOnShows = function(slave) { } } - if (arcology.FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist', arcology)) { if (V.seeBestiality) { if (V.policies.bestialityOpenness) { text.push(`Your citizens would normally disapprove of your using slaves as toys for your animals, but the policy you enacted encouraging bestiality, combined with some clever, subtle advertising, leads them to see nothing wrong with it.`); @@ -152,7 +152,7 @@ App.Facilities.Farmyard.putOnShows = function(slave) { } } - if (arcology.FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist', arcology)) { if (V.seeBestiality) { if (V.farmyardBreeding) { if (V.farmyardRestraints) { @@ -170,19 +170,19 @@ App.Facilities.Farmyard.putOnShows = function(slave) { } } - if (arcology.FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist', arcology)) { if (SlaveStatsChecker.isModded(slave)) { text.push(`The members of the audience <span class="reputation dec">disapprove</span> that you would use a slave with ${heavyMods ? `such heavy` : ``} modifications to put on shows.`); } } - if (arcology.FSTransformationFetishist !== "unset") { + if (FutureSocieties.isActive('FSTransformationFetishist', arcology)) { if (SlaveStatsChecker.isModded(slave)) { text.push(`The members of the audience <span class="reputation inc">approve</span> that you would use a slave with ${heavyMods ? `such heavy` : ``} modifications to put on shows.`); } } - if (arcology.FSYouthPreferentialist !== "unset") { + if (FutureSocieties.isActive('FSYouthPreferentialist', arcology)) { if (isYoung(slave)) { text.push(`${arcology.name}'s citizens <span class="reputation inc">approve</span> of your using young slaves to put on shows.`); } else { @@ -190,7 +190,7 @@ App.Facilities.Farmyard.putOnShows = function(slave) { } } - if (arcology.FSMaturityPreferentialist !== "unset") { + if (FutureSocieties.isActive('FSMaturityPreferentialist', arcology)) { if (isYoung(slave)) { text.push(`${arcology.name}'s citizens <span class="reputation inc">approve</span> of your using mature slaves to put on shows.`); } else { @@ -198,7 +198,7 @@ App.Facilities.Farmyard.putOnShows = function(slave) { } } - if (arcology.FSSlimnessEnthusiast !== "unset") { + if (FutureSocieties.isActive('FSSlimnessEnthusiast', arcology)) { if (isSlim(slave)) { text.push(`${His} slim body <span class="reputation inc">attracts a wider audience.</span>`); } else { @@ -206,13 +206,13 @@ App.Facilities.Farmyard.putOnShows = function(slave) { } } - if (arcology.FSAssetExpansionist !== "unset") { + if (FutureSocieties.isActive('FSAssetExpansionist', arcology)) { if (isStacked(slave)) { text.push(`Society <span class="reputation inc">approves</span> of the fact that you respect their ideals in using a slave with larger assets.`); } } - if (arcology.FSPastoralist !== "unset") { + if (FutureSocieties.isActive('FSPastoralist', arcology)) { if (slave.boobs >= 1000) { text.push(`The fact that ${slave.slaveName} has such large udders <span class="reputation inc">pleases your citizens.</span>`); } @@ -222,7 +222,7 @@ App.Facilities.Farmyard.putOnShows = function(slave) { } } - if (arcology.FSPhysicalIdealist !== "unset") { + if (FutureSocieties.isActive('FSPhysicalIdealist', arcology)) { if (genderLawPass(slave)) { text.push(`The fact that ${slave.slaveName} has what is considered the ideal form also <span class="reputation inc">helps ${him} attract attention,</span> and so ${he} earns a bit more.`); } else { @@ -230,7 +230,7 @@ App.Facilities.Farmyard.putOnShows = function(slave) { } } - if (arcology.FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence', arcology)) { if (slave.weight > 10) { text.push(`Since ${slave.slaveName} is large enough to please ${arcology.name}'s citizens, ${he} earns slightly more.`); } else { @@ -238,7 +238,7 @@ App.Facilities.Farmyard.putOnShows = function(slave) { } } - if (arcology.FSPetiteAdmiration !== "unset") { + if (FutureSocieties.isActive('FSPetiteAdmiration', arcology)) { if (heightPass(slave)) { text.push(`The fact that you are using such small slaves <span class="reputation inc">pleases your citizens.</span>`); } else { @@ -246,7 +246,7 @@ App.Facilities.Farmyard.putOnShows = function(slave) { } } - if (arcology.FSStatuesqueGlorification !== "unset") { + if (FutureSocieties.isActive('FSStatuesqueGlorification', arcology)) { if (heightPass(slave)) { text.push(`Your citizens <span class="reputation inc">approve</span> of your using such statuesque slaves for putting on shows.`); } else { @@ -341,7 +341,7 @@ App.Facilities.Farmyard.putOnShows = function(slave) { function weight() { if (slave.weight > 30) { - if (arcology.FSHedonisticDecadence === "unset") { + if (!FutureSocieties.isActive('FSHedonisticDecadence', arcology)) { return `Your citizens are not willing to pay as much to see such a fat slave put on shows, so ${he} loses some income.`; } } else if (slave.weight < -30) { diff --git a/src/facilities/implantManufactory.js b/src/facilities/implantManufactory.js index 53834d73056339633a21d5c83e282295ac0cedbe..4c8185cfe81479ab0247d340c34bda82e9595fc8 100644 --- a/src/facilities/implantManufactory.js +++ b/src/facilities/implantManufactory.js @@ -36,7 +36,7 @@ App.UI.implantManufactory = function() { if (V.meshImplants > 0) { App.UI.DOM.appendNewElement("div", node, "The manufactory is capable of producing supportive mesh breast implants."); } else { - upgradeOption(node, 10_000, "plans for supportive mesh breast implants", ["Will allow the construction of organic and supportive mesh breast implants."], + upgradeOption(node, 10_000, "plans for supportive mesh breast implants", ["will allow the construction of organic and supportive mesh breast implants."], 40_000, () => { V.meshImplants = 1; }); } @@ -45,19 +45,19 @@ App.UI.implantManufactory = function() { } if (V.bellyImplants === 0) { - upgradeOption(node, 2000, "schematics for fillable abdominal implants", ["Will allow the construction of fillable abdominal implants for the autosurgery."], + upgradeOption(node, 2000, "schematics for fillable abdominal implants", ["will allow the construction of fillable abdominal implants for the autosurgery."], 30_000, () => { V.bellyImplants = 1; }, "access experimental schematics for fillable abdominal implants"); } else if (V.bellyImplants > 0) { App.UI.DOM.appendNewElement("div", node, "The manufactory is capable of crafting fillable abdominal implants."); if (V.bellyImplants === 1 && V.cervixImplants === 0) { /* show only after belly implants already researched */ /* nanotech like technology much more impressive and costly than simple implant */ - upgradeOption(node, 6000, "schematics for cervix filter micropumps", ["Will allow the construction of cervix filter micropumps for fillable abdominal implants using the autosurgery."], + upgradeOption(node, 6000, "schematics for cervix filter micropumps", ["will allow the construction of cervix filter micropumps for fillable abdominal implants using the autosurgery."], 70_000, () => { V.cervixImplants = 1; }, "access experimental cervix filter micropumps schematics for abdominal implants"); } else if (V.cervixImplants === 1) { App.UI.DOM.appendNewElement("div", node, "The manufactory is capable of crafting cervix filter micropumps for fillable abdominal implants."); - upgradeOption(node, 8_000, "conversion kits for rectal filter micropumps", ["Will allow the construction of the anal equivalent of the cervix micropumps using the autosurgery."], + upgradeOption(node, 8_000, "conversion kits for rectal filter micropumps", ["will allow the construction of the anal equivalent of the cervix micropumps using the autosurgery."], 60_000, () => { V.cervixImplants = 2; }, "obtain conversion kits for rectal filter micropumps" ); @@ -72,7 +72,7 @@ App.UI.implantManufactory = function() { if (V.fertilityImplant === 1) { App.UI.DOM.appendNewElement("div", node, "The manufactory is capable of crafting fertility enhancing implants for ovaries."); } else { - upgradeOption(node, 3_000, "fertility enhancing ovarian implants", ["Will allow the construction of implants that encourage multiple eggs being released during ovulation."], + upgradeOption(node, 3_000, "fertility enhancing ovarian implants", ["will allow the construction of implants that encourage multiple eggs being released during ovulation."], 10_000, () => { V.fertilityImplant = 1; }, "access fertility boosting ovarian implants" ); @@ -84,7 +84,7 @@ App.UI.implantManufactory = function() { if (V.seeHyperPreg === 1 && V.seeExtreme === 1) { if (V.permaPregImplant === 0) { - upgradeOption(node, 4_000, "schematics for an experimental implantable pregnancy generator", ["Will allow the construction of implants that force perpetual pregnancy."], + upgradeOption(node, 4_000, "schematics for an experimental implantable pregnancy generator", ["will allow the construction of implants that force perpetual pregnancy."], 40_000, () => { V.permaPregImplant = 1; }, "access experimental pregnancy generator schematics"); } else if (V.permaPregImplant > 0) { @@ -100,7 +100,7 @@ App.UI.implantManufactory = function() { if (V.prostateImplants !== 1) { upgradeOption(node, 3_000, "plans for ejaculation enhancing prostate implants", - ["Will allow the construction of a prostate implant designed to stimulate fluid production for massive ejaculations. Beware of leaking and dehydration."], + ["will allow the construction of a prostate implant designed to stimulate fluid production for massive ejaculations. Beware of leaking and dehydration."], 30_000, () => { V.prostateImplants = 1; }, "access plans for prostate implants" ); diff --git a/src/facilities/incubator/incubatorInteract.js b/src/facilities/incubator/incubatorInteract.js index 8f0adabf99a22d2b861d81c1e354ca87712a8682..b19b7a8c0f45a60ee6342d63e5240142f6def1e6 100644 --- a/src/facilities/incubator/incubatorInteract.js +++ b/src/facilities/incubator/incubatorInteract.js @@ -13,7 +13,7 @@ App.UI.incubator = function() { const introDiv = App.UI.DOM.appendNewElement("div", el, intro()); const showPC = (V.PC.pregKnown === 1 && - (V.arcologies[0].FSRestart === "unset" || + (!FutureSocieties.isActive('FSRestart') || V.eugenicsFullControl === 1 || (V.PC.pregSource !== -1 && V.PC.pregSource !== -6) )); diff --git a/src/facilities/manage/dispensary.js b/src/facilities/manage/dispensary.js index bd3aceaefe70adc4f3e53403cf84a2c5b1c5d48c..2df6287054a3a68c94926cc4ec3404cdce664e38 100644 --- a/src/facilities/manage/dispensary.js +++ b/src/facilities/manage/dispensary.js @@ -430,12 +430,12 @@ App.UI.dispensary = function() { if (V.arcologies[0].FSHedonisticDecadenceDecoration === 100) { if (V.arcologies[0].FSHedonisticDecadenceResearch === 0) { if (V.rep >= 5000 * pcSkillCheck) { - p.append(upgrade("Purchase recipes for concentrated, shaped slave food", [`Will allow production of solid slave food in various familiar shapes and flavors. Addictive and a little fatty.${(V.arcologies[0].FSDegradationist === "unset" ? "" : " Since your slaves don't deserve luxuries, a modified recipe formulated to cause severe stomach cramps minutes after ingestion will be developed.")}`], () => { V.arcologies[0].FSHedonisticDecadenceResearch = 1; }, 50000 * pcSkillCheck)); + p.append(upgrade("Purchase recipes for concentrated, shaped slave food", [`Will allow production of solid slave food in various familiar shapes and flavors. Addictive and a little fatty.${(!FutureSocieties.isActive('FSDegradationist') ? "" : " Since your slaves don't deserve luxuries, a modified recipe formulated to cause severe stomach cramps minutes after ingestion will be developed.")}`], () => { V.arcologies[0].FSHedonisticDecadenceResearch = 1; }, 50000 * pcSkillCheck)); } else { App.Events.addNode(p, ["You lack the reputation to access the research necessary to purchase concentrated, shaped slave food recipes."], "div", ["note"]); } } else { - let text = `The fabricator has been upgraded to manufacture tasty, extremely addictive, solid slave food in various familiar shapes and flavors. While they look and taste like real food, their consistency is all wrong. Slaves gorging on them are likely to experience steady weight gain.${(V.arcologies[0].FSDegradationist === "unset" ? "" : " Since your slaves don't deserve luxuries, all food crafted will cause severe stomach cramps minutes after ingestion. Coupled with their addictive nature, it ought to be quite torturous.")}`; + let text = `The fabricator has been upgraded to manufacture tasty, extremely addictive, solid slave food in various familiar shapes and flavors. While they look and taste like real food, their consistency is all wrong. Slaves gorging on them are likely to experience steady weight gain.${(!FutureSocieties.isActive('FSDegradationist') ? "" : " Since your slaves don't deserve luxuries, all food crafted will cause severe stomach cramps minutes after ingestion. Coupled with their addictive nature, it ought to be quite torturous.")}`; if (V.arcologies[0].FSSlimnessEnthusiast > 50 && V.arcologies[0].FSHedonisticDecadenceDietResearch === 0) { p.append(upgrade("Purchase diet recipes", ["Will prevent rampant weight gain from ruining your slim slaves."], () => { V.arcologies[0].FSHedonisticDecadenceDietResearch = 1; }, 10000 * pcSkillCheck, text)); } else if (V.arcologies[0].FSHedonisticDecadenceDietResearch === 1) { @@ -443,7 +443,7 @@ App.UI.dispensary = function() { } } } else if (V.arcologies[0].FSHedonisticDecadenceResearch === 1) { - let text = `The fabricator has been upgraded to manufacture tasty, extremely addictive, solid slave food in various familiar shapes and flavors. While they look and taste like real food, their consistency is all wrong. Slaves gorging on them are likely to experience steady weight gain.${V.arcologies[0].FSDegradationist === "unset" ? "" : "Since your slaves don't deserve luxuries, all food crafted will cause severe stomach cramps minutes after ingestion. Coupled with their addictive nature, it ought to be quite torturous."}`; + let text = `The fabricator has been upgraded to manufacture tasty, extremely addictive, solid slave food in various familiar shapes and flavors. While they look and taste like real food, their consistency is all wrong. Slaves gorging on them are likely to experience steady weight gain.${!FutureSocieties.isActive('FSDegradationist') ? "" : "Since your slaves don't deserve luxuries, all food crafted will cause severe stomach cramps minutes after ingestion. Coupled with their addictive nature, it ought to be quite torturous."}`; if (V.arcologies[0].FSHedonisticDecadenceDietResearch === 0) { p.append(upgrade("Purchase diet recipes", [`Will prevent rampant unwanted weight gain from ruining your ${V.arcologies[0].FSSlimnessEnthusiast > 20 ? "slim " : ""}slaves.`], () => { V.arcologies[0].FSHedonisticDecadenceDietResearch = 1; }, 10000 * pcSkillCheck)); } else if (V.arcologies[0].FSHedonisticDecadenceDietResearch === 1) { diff --git a/src/facilities/nursery/utils/nurseryUtils.js b/src/facilities/nursery/utils/nurseryUtils.js index 7240d517b2f56b2e21aa0bdfd110963ff4121a18..c39ab57df7b85a92864a25d604c3799d33daf46a 100644 --- a/src/facilities/nursery/utils/nurseryUtils.js +++ b/src/facilities/nursery/utils/nurseryUtils.js @@ -410,7 +410,7 @@ App.Facilities.Nursery.nameChild = function nameChild(child) { r += `<br>`; r += App.UI.passageLink(`Have your PA assign ${him} a random name`, "Nursery Workaround", `${App.UI.replace("#naming", `${newChildName(child)}<br>${V.assistant.name} registers the new ${girl} as "${child.slaveName}" in your registry.`)}`); - if (arcology.FSPastoralist !== "unset") { + if (FutureSocieties.isActive('FSPastoralist', arcology)) { if (child.lactation > 0) { r += `<br> <<link "Have your PA assign ${him} a random cow name">> @@ -432,7 +432,7 @@ App.Facilities.Nursery.nameChild = function nameChild(child) { <</replace>> <</link>>`; } - if (arcology.FSChattelReligionist !== "unset") { + if (FutureSocieties.isActive('FSChattelReligionist', arcology)) { r += `<br> <<link "Have your PA assign ${him} a random devotional name">> <<replace "#naming">>`; @@ -442,7 +442,7 @@ App.Facilities.Nursery.nameChild = function nameChild(child) { <</replace>> <</link>>`; } - if (arcology.FSRomanRevivalist !== "unset") { + if (FutureSocieties.isActive('FSRomanRevivalist', arcology)) { r += `<br> <<link "Have your PA assign ${him} a random Roman name">> <<replace "#naming">>`; @@ -451,7 +451,7 @@ App.Facilities.Nursery.nameChild = function nameChild(child) { r += `${V.assistant.name} registers the new ${girl} as "${child.slaveName}" in your registry. <</replace>> <</link>>`; - } else if (arcology.FSAztecRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSAztecRevivalist', arcology)) { r += `<br> <<link "Have your PA assign ${him} a random Aztec name">> <<replace "#naming">>`; @@ -460,7 +460,7 @@ App.Facilities.Nursery.nameChild = function nameChild(child) { r += `${V.assistant.name} registers the new ${girl} as "${child.slaveName}" in your registry. <</replace>> <</link>>`; - } else if (arcology.FSEgyptianRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSEgyptianRevivalist', arcology)) { r += `<br> <<link "Have your PA assign ${him} a random ancient Egyptian name">> <<replace "#naming">>`; @@ -469,7 +469,7 @@ App.Facilities.Nursery.nameChild = function nameChild(child) { r += `${V.assistant.name} registers the new ${girl} as "${child.slaveName}" in your registry. <</replace>> <</link>>`; - } else if (arcology.FSEdoRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSEdoRevivalist', arcology)) { r += `<br> <<link "Have your PA assign ${him} a random feudal Japanese name">> <<replace "#naming">>`; @@ -479,7 +479,7 @@ App.Facilities.Nursery.nameChild = function nameChild(child) { <</replace>> <</link>>`; } - if (arcology.FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist', arcology)) { r += `<br> <<link "Have your PA assign ${him} a degrading name">> <<replace "#naming">>`; @@ -828,7 +828,7 @@ App.Facilities.Nursery.nurserySort = function nurserySort() { r += `<i>You have no pregnant slave bearing eligible children</i>`; } - if (PC.pregKnown && (arcology.FSRestart === "unset" || V.eugenicsFullControl || (PC.pregSource !== -1 && PC.pregSource !== -6))) { + if (PC.pregKnown && (!FutureSocieties.isActive('FSRestart', arcology) || V.eugenicsFullControl || (PC.pregSource !== -1 && PC.pregSource !== -6))) { const WL = PC.womb.length; let reservedIncubator = WombReserveCount(PC, "incubator"); diff --git a/src/facilities/organFarmPassage.js b/src/facilities/organFarmPassage.js index 0bb0073c71ff4185e7610098a736f300b81afd0a..2f7980c117ad92771c762e79000d0d88345ae87f 100644 --- a/src/facilities/organFarmPassage.js +++ b/src/facilities/organFarmPassage.js @@ -61,13 +61,13 @@ App.UI.organFarm = function() { } else if (V.rep > 10000 * PCSkillCheck) { if (V.organFarmUpgrade === 2) { upgradeOption(node, 10_000, "Upgrade the organ farm to the cutting edge model", - ["Will allow the organ farm to rapidly grow organs without risk to the implantee's health."], + ["will allow the organ farm to rapidly grow organs without risk to the implantee's health."], 150_000, () => { V.organFarmUpgrade = 3; }, "" ); } else if (V.organFarmUpgrade === 1) { upgradeOption(node, 10_000, "Upgrade the organ farm with an experimental growth accelerator", - ["Will allow the organ farm to quickly grow organs. Implanted organs may cause health issues."], + ["will allow the organ farm to quickly grow organs. Implanted organs may cause health issues."], 75_000, () => { V.organFarmUpgrade = 2; }, "" ); @@ -78,12 +78,23 @@ App.UI.organFarm = function() { App.UI.DOM.appendNewElement("div", node, "The organ farm is capable of growing fertile ovaries for postmenopausal slaves."); } else { upgradeOption(node, 10_000, "Purchase designs for cloning fertile ovaries for menopausal slaves", - ["Will allow the growth of younger, fertile ovaries for menopausal slaves. Restored fertility will only last for a couple years at most."], + ["will allow the growth of younger, fertile ovaries for menopausal slaves. Restored fertility will only last for a couple years at most."], 30_000, () => { V.youngerOvaries = 1; }, "access designs for cloning fertile ovaries for menopausal slaves" ); } + if (V.immortalOvaries > 0) { + App.UI.DOM.appendNewElement("div", node, "The organ farm is capable of growing genetically modified ovaries that will never undergo menopause."); + } else if (V.immortalityFormula > 0 && V.youngerOvaries > 0) { + upgradeOption(node, 10_000, "Fund research into applying the immortality formula to ovaries", + ["will allow the growth of genetically modified ovaries that continually regenerate their ovarian follicles, thus never undergoing menopause. As long as the body remains young, it shall remain fertile."], + 1_000_000, () => { V.immortalOvaries = 1; }, + "fund additional fertility-focused research into the immortality project" + ); + } else if (V.immortalityFormula > 0) { + appendNote("You must acquire the designs to clone younger ovaries before you can research ovary immortality.", node); + } // invisible without immortality formula if (V.asexualReproduction === 1) { App.UI.DOM.appendNewElement("div", node, "The organ farm is capable of growing modified ovary pairs capable of self-fertilization."); @@ -120,7 +131,7 @@ App.UI.organFarm = function() { if (V.arcologies[0].FSGenderRadicalistDecoration === 100) { if (V.arcologies[0].FSGenderRadicalistResearch === 0) { upgradeOption(node, 10_000, "Fund research into developing male pregnancy methods", - ["Will allow cloning and production of anal uteri and ovaries."], + ["will allow cloning and production of anal uteri and ovaries."], 50_000, () => { V.arcologies[0].FSGenderRadicalistResearch = 1; }, "access the research necessary to develop anal uteri and ovaries" ); diff --git a/src/facilities/pit/fights/0_lethalRandom.js b/src/facilities/pit/fights/0_lethalRandom.js index a5320f29d2585d525eb3b2917a966f30ec26dd81..5f9464b579ae325909e1423729b6d5b1dbc41191 100644 --- a/src/facilities/pit/fights/0_lethalRandom.js +++ b/src/facilities/pit/fights/0_lethalRandom.js @@ -55,13 +55,13 @@ App.Facilities.Pit.Fights.LR1v1 = class extends App.Facilities.Pit.Fights.BaseFi r.push(`The attendees line the rim of the pit, betting and arguing, nervous and excited by the close prospect of watching a slave die.`); } - if (V.arcologies[0].FSRomanRevivalist !== "unset") { + if (FutureSocieties.isActive('FSRomanRevivalist')) { r.push(`They `, App.UI.DOM.makeElement("span", `passionately approve`, ['reputation', 'inc']), ` of your hosting lethal combat between slaves; this advances ideas from antiquity about what public events should be.`); repX(20 * V.FSSingleSlaveRep * (V.arcologies[0].FSRomanRevivalist / V.FSLockinLevel), "pit"); V.arcologies[0].FSRomanRevivalist += (0.4 * V.FSSingleSlaveRep); - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSAztecRevivalist')) { r.push(`They `, App.UI.DOM.makeElement("span", `approve`, ['reputation', 'inc']), ` of your hosting lethal combat; this advances ideas that blood must flow as it did in ancient times.`); diff --git a/src/facilities/pit/pit.js b/src/facilities/pit/pit.js index 0293c2f0d636c2ee2ba3c6fa30407d04101ef182..7129b4f79e7a520d65a62d18390b4460bf173e93 100644 --- a/src/facilities/pit/pit.js +++ b/src/facilities/pit/pit.js @@ -128,21 +128,21 @@ App.Facilities.Pit.pit = function() { function decorations() { const chattelReligionist = () => { const text = [`is a large, modern arena decorated with frescoes of two fictional slaves reaching the afterlife. On the upper walls near the seatings, the obedient slave blissfully follow ${V.seeDicks < 100 ? `her` : `his`} master through`]; - if (V.arcologies[0].FSRomanRevivalist !== "unset") { + if (FutureSocieties.isActive('FSRomanRevivalist')) { text.push(`Elysian Fields' gates, Pluto's chthonic arcology, while on the walls of the fighting area, the disobedient one is sentenced to suffer in a hellish-looking old world city named Tartarus.`); - } else if (V.arcologies[0].FSNeoImperialist !== "unset") { + } else if (FutureSocieties.isActive('FSNeoImperialist')) { text.push(`Heaven's gates, God's celestial arcology, while on the wall of the fighting area, the disobedient one is dragged by demonlike raiders down to Hell.`); - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSEgyptianRevivalist')) { text.push(`Aaru's gates, Osiris' celestial arcology, while on the wall of the fighting area, the disobedient one, whose heart is heavier than the feather of Maat, is eaten by Ammit, the devourer of souls.`); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSEdoRevivalist')) { text.push(`Takamagahara's gates, Amaterasu's celestial arcology, while on the wall of the fighting area, the disobedient one is tortured in Jigoku by oni-like raiders.`); - } else if (V.arcologies[0].FSArabianRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSArabianRevivalist')) { text.push(`Jannah's gates, Allah's celestial arcology, while on the wall of the fighting area, the disobedient one is thrown by two angels into Jahannam for the awaiting ifrit-like raiders.`); - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSChineseRevivalist')) { text.push(`Tian's gates, Jade Emperor's arcology, while on the wall of the fighting area, the disobedient one is tortured in Diyu by yaoguai-like raiders.`); - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSAztecRevivalist')) { text.push(`Tonatiuhtlán's gates, TÅnatiuh's celestial arcology, to accompany the sun during the morning, while on the wall of the fighting area, the disobedient one is sent to MictlÄn to suffer through many challenges.`); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSAntebellumRevivalist')) { text.push(`Heaven's gates, God's celestial arcology, while on the wall of the fighting area, the disobedient one falls to Hell, where lakes of fire burn for eternity.`); } else { text.push(`Paradise's gates, Allslaver's celestial arcology, while on the wall of the fighting area, the disobedient one is sentenced to survive in the Wasteland of the Freedom Trickster.`); diff --git a/src/facilities/pit/pitFramework.js b/src/facilities/pit/pitFramework.js index 93e6447668df07de10d27dbd93c7aca02ef7b2ba..240ce9f1293da727afe14e9f2a68b2f92481e835 100644 --- a/src/facilities/pit/pitFramework.js +++ b/src/facilities/pit/pitFramework.js @@ -30,7 +30,7 @@ App.Entity.Facilities.PitFighterJob = class extends App.Entity.Facilities.Facili */ checkRequirements(slave) { let r = super.checkRequirements(slave); - if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && V.arcologies[0].FSRestart !== "unset") { + if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && FutureSocieties.isActive('FSRestart')) { r.push(`${slave.slaveName} may not participate in combat.`); } if (slave.indentureRestrictions > 1) { diff --git a/src/facilities/surgery/analyzePlayerPregnancy.js b/src/facilities/surgery/analyzePlayerPregnancy.js index 72bd5a65d48094d0d8cbaa3a41d0a6c66598045d..01805f21e286a16cd75ff66dfb26a6447f0e6e0e 100644 --- a/src/facilities/surgery/analyzePlayerPregnancy.js +++ b/src/facilities/surgery/analyzePlayerPregnancy.js @@ -90,7 +90,7 @@ App.UI.analyzePCPregnancy = function() { App.UI.DOM.appendNewElement("h2", node, "Deep scan"); App.UI.DOM.appendNewElement("p", node, analyzePregnancies(V.PC, false)); if (V.surgeryUpgrade === 1) { - if (V.PC.womb.filter(fetus => (fetus.age < 4 && (V.arcologies[0].FSRestart === "unset" || V.eugenicsFullControl === 1 || V.propOutcome === 0 || (fetus.fatherID !== -1 && fetus.fatherID !== -6)))).length > 1) { + if (V.PC.womb.filter(fetus => (fetus.age < 4 && (!FutureSocieties.isActive('FSRestart') || V.eugenicsFullControl === 1 || V.propOutcome === 0 || (fetus.fatherID !== -1 && fetus.fatherID !== -6)))).length > 1) { linkArray.push(App.UI.DOM.link( "Offload all your ova into an empty womb", () => { diff --git a/src/facilities/surgery/analyzePregnancy.js b/src/facilities/surgery/analyzePregnancy.js index b11fe13ecfef94a57d13a41e23979515a3b2c1aa..36c4e455df9575b99fecd11d3ca9cf9ea3bfa12f 100644 --- a/src/facilities/surgery/analyzePregnancy.js +++ b/src/facilities/surgery/analyzePregnancy.js @@ -137,7 +137,7 @@ globalThis.analyzePregnancies = function(mother, cheat) { App.UI.DOM.appendNewElement("div", el, `Reserved: ${fetus.reserve}`); } - if (fetus.age < 4 && (V.arcologies[0].FSRestart === "unset" || V.eugenicsFullControl === 1 || mother.breedingMark === 0 || V.propOutcome === 0 || (fetus.fatherID !== -1 && fetus.fatherID !== -6)) || cheat) { + if (fetus.age < 4 && (!FutureSocieties.isActive('FSRestart') || V.eugenicsFullControl === 1 || mother.breedingMark === 0 || V.propOutcome === 0 || (fetus.fatherID !== -1 && fetus.fatherID !== -6)) || cheat) { option = terminateOvum(); if (V.surgeryUpgrade === 1) { option.addButton( @@ -391,7 +391,7 @@ App.UI.analyzePregnancy = function() { App.UI.DOM.appendNewElement("h2", node, "Deep scan"); App.UI.DOM.appendNewElement("p", node, analyzePregnancies(slave, false)); if (V.surgeryUpgrade === 1) { - if (slave.womb.filter(fetus => (fetus.age < 4 && (V.arcologies[0].FSRestart === "unset" || V.eugenicsFullControl === 1 || slave.breedingMark === 0 || V.propOutcome === 0 || (fetus.fatherID !== -1 && fetus.fatherID !== -6)))).length > 1) { + if (slave.womb.filter(fetus => (fetus.age < 4 && (!FutureSocieties.isActive('FSRestart') || V.eugenicsFullControl === 1 || slave.breedingMark === 0 || V.propOutcome === 0 || (fetus.fatherID !== -1 && fetus.fatherID !== -6)))).length > 1) { App.UI.DOM.appendNewElement("div", node, App.UI.DOM.link( "Transplant all ova", () => { diff --git a/src/facilities/surgery/surgeryPassageExtreme.js b/src/facilities/surgery/surgeryPassageExtreme.js index beddba504298236343a68298b6bef82bcbffb18a..6da775a9aa77e0f8e2e3f61fae96e1c3da6e346a 100644 --- a/src/facilities/surgery/surgeryPassageExtreme.js +++ b/src/facilities/surgery/surgeryPassageExtreme.js @@ -29,7 +29,7 @@ App.UI.surgeryPassageExtreme = function(slave, refresh, cheat = false) { const linkArray = []; if (slave.fuckdoll === 0) { r.push(`${He} is a normal sex slave, not a living sex toy.`); - if (slave.indentureRestrictions < 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) { + if (slave.indentureRestrictions < 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || !FutureSocieties.isActive('FSRestart'))) { linkArray.push(App.Medicine.Surgery.makeLink( new App.Medicine.Surgery.Procedures.Fuckdoll(slave), refresh, cheat)); @@ -54,7 +54,7 @@ App.UI.surgeryPassageExtreme = function(slave, refresh, cheat = false) { } else if (slave.fetish === Fetish.MINDBROKEN) { r.push(`${His} mind is gone; ${he} has either been chemically lobotomized, or has lost ${his} mind due to extreme abuse.`); } - if (slave.indentureRestrictions < 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) { + if (slave.indentureRestrictions < 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || !FutureSocieties.isActive('FSRestart'))) { if (slave.fetish !== Fetish.MINDBROKEN) { linkArray.push(App.Medicine.Surgery.makeLink( new App.Medicine.Surgery.Procedures.Mindbreak(slave), diff --git a/src/facilities/surgery/surgeryPassageLower.js b/src/facilities/surgery/surgeryPassageLower.js index 115f2eb04bfa63fa6ee5a92289a929a96c41f735..32d770418c9aa377bf11a8984a67730f03586b13 100644 --- a/src/facilities/surgery/surgeryPassageLower.js +++ b/src/facilities/surgery/surgeryPassageLower.js @@ -255,7 +255,7 @@ App.UI.surgeryPassageLower = function(slave, refresh, cheat = false) { if (slave.ovaries !== 0 || slave.mpreg !== 0) { if (slave.preg > -2 && slave.preg < 1) { - if (slave.indentureRestrictions < 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) { + if (slave.indentureRestrictions < 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || !FutureSocieties.isActive('FSRestart'))) { linkArray.push(App.Medicine.Surgery.makeLink( new App.Medicine.Surgery.Procedures.Sterilize(slave), refresh, cheat)); @@ -322,7 +322,7 @@ App.UI.surgeryPassageLower = function(slave, refresh, cheat = false) { App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices"); } - if (slave.indentureRestrictions < 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) { + if (slave.indentureRestrictions < 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || !FutureSocieties.isActive('FSRestart'))) { r = []; linkArray = []; if (slave.ovaries === 1) { @@ -385,7 +385,7 @@ App.UI.surgeryPassageLower = function(slave, refresh, cheat = false) { } } else if (slave.indentureRestrictions > 0) { App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]); - } else if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && V.arcologies[0].FSRestart !== "unset") { + } else if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && FutureSocieties.isActive('FSRestart')) { App.UI.DOM.appendNewElement("div", el, `${He} is protected from extreme surgery`, ["choices", "note"]); } else if (isFertile(slave) && slave.ovaryAge <= 46) { r.push(`${He} could be made into a broodmother.`); @@ -456,14 +456,14 @@ App.UI.surgeryPassageLower = function(slave, refresh, cheat = false) { r.push(`It's possible to remove either and leave ${him} sexually functional.`); } if (slave.vagina > -1) { - if (slave.indentureRestrictions < 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) { + if (slave.indentureRestrictions < 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || !FutureSocieties.isActive('FSRestart'))) { linkArray.push(App.Medicine.Surgery.makeLink( new App.Medicine.Surgery.Procedures.VaginaRemoval(slave), refresh, cheat)); } } - if (slave.indentureRestrictions < 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) { + if (slave.indentureRestrictions < 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || !FutureSocieties.isActive('FSRestart'))) { if (slave.vagina === -1 && slave.dick !== 0) { linkArray.push(App.Medicine.Surgery.makeLink( new App.Medicine.Surgery.Procedures.MaletoFemale(slave), diff --git a/src/facilities/surgery/surgeryPassageUpper.js b/src/facilities/surgery/surgeryPassageUpper.js index 889db8ac3895f1917c652100547205d349ae64df..90516494e74dd9b855a354e0d91fe55f813fa4de 100644 --- a/src/facilities/surgery/surgeryPassageUpper.js +++ b/src/facilities/surgery/surgeryPassageUpper.js @@ -384,7 +384,7 @@ App.UI.surgeryPassageUpper = function(slave, refresh, cheat = false) { } } if (slave.waist >= -95 && slave.waist < -75 && V.seeExtreme === 1) { - if (slave.indentureRestrictions < 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) { + if (slave.indentureRestrictions < 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || !FutureSocieties.isActive('FSRestart'))) { linkArray.push(App.Medicine.Surgery.makeLink( new App.Medicine.Surgery.Procedures.Ribs(slave), refresh, cheat)); @@ -438,7 +438,7 @@ App.UI.surgeryPassageUpper = function(slave, refresh, cheat = false) { App.Events.addNode(el, r, "div"); if (slave.indentureRestrictions >= 2) { App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]); - } else if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && V.arcologies[0].FSRestart !== "unset") { + } else if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && FutureSocieties.isActive('FSRestart')) { App.UI.DOM.appendNewElement("div", el, `You are forbidden from affecting ${his} fertility`, ["choices", "note"]); } else if (slave.preg > 0 || slave.inflation > 0 || slave.broodmother > 0) { App.UI.DOM.appendNewElement("div", el, `${He} is unable to support an abdominal implant at this time`, ["choices", "note"]); diff --git a/src/futureSocieties/aztec/slaveSacrificeLife.js b/src/futureSocieties/aztec/slaveSacrificeLife.js index 49426f3af06e6ae3d945ba828195c3ece1bc5b7e..40c6fa81d5babff0164fb9f3ea7cc0339549c02e 100644 --- a/src/futureSocieties/aztec/slaveSacrificeLife.js +++ b/src/futureSocieties/aztec/slaveSacrificeLife.js @@ -54,7 +54,7 @@ App.UI.SlaveInteract.aztecSlaveSacrificeLife = function(sacrifice) { } repX(activeSlaveRepSacrifice, "futureSocieties"); - if (V.arcologies[0].FSAztecRevivalist !== "unset" && V.arcologies[0].FSAztecRevivalist < 100) { + if (FutureSocieties.isActive('FSAztecRevivalist') && V.arcologies[0].FSAztecRevivalist < 100) { V.arcologies[0].FSAztecRevivalist++; } V.slavesSacrificedThisWeek = (V.slavesSacrificedThisWeek || 0) + 1; diff --git a/src/futureSocieties/aztec/slaveSacrificePenance.js b/src/futureSocieties/aztec/slaveSacrificePenance.js index bcce423d1e077d4fe4c1934ec785b6e204cfdc1e..c25e2851c1f48051a55a929d710fe9527170c3f7 100644 --- a/src/futureSocieties/aztec/slaveSacrificePenance.js +++ b/src/futureSocieties/aztec/slaveSacrificePenance.js @@ -605,7 +605,7 @@ App.UI.SlaveInteract.aztecSlaveSacrificePenance = function(sacrifice) { sacrifice.trust -= 3; r.push(`The lack of food, sleep and the constant arousal with the chastity belt made ${him} <span class="trust dec">trust you less</span> and <span class="devotion dec">hate you more.</span>`); } - if (V.arcologies[0].FSAztecRevivalist !== "unset" && V.arcologies[0].FSAztecRevivalist < 100) { + if (FutureSocieties.isActive('FSAztecRevivalist') && V.arcologies[0].FSAztecRevivalist < 100) { V.arcologies[0].FSAztecRevivalist += 1; } V.slavesSacrificedThisWeek = (V.slavesSacrificedThisWeek || 0) + 1; diff --git a/src/futureSocieties/fsPassage.js b/src/futureSocieties/fsPassage.js index 6c4ef000d0e41f7f67ed741d2be43032ebbe5831..4a827f25451566ce855d65d9585c6c0bcab898b2 100644 --- a/src/futureSocieties/fsPassage.js +++ b/src/futureSocieties/fsPassage.js @@ -1,5 +1,6 @@ App.UI.fsPassage = function() { const arc = V.arcologies[0]; + const arcInfo = new App.Utils.Arcology(arc); V.FSReminder = 0; const FSCredits = FutureSocieties.availCredits(); setup(); @@ -39,82 +40,82 @@ App.UI.fsPassage = function() { */ function setup() { if (V.rival.FS.name === "") { - if (arc.FSSubjugationist !== "unset") { + if (arcInfo.fsActive('FSSubjugationist')) { V.rival.FS.name = "Racial Subjugationism"; V.rival.FS.race = arc.FSSubjugationistRace; } - if (arc.FSSupremacist !== "unset") { + if (arcInfo.fsActive('FSSupremacist')) { V.rival.FS.name = "Racial Supremacism"; V.rival.FS.race = arc.FSSupremacistRace; } - if (arc.FSGenderRadicalist !== "unset") { + if (arcInfo.fsActive('FSGenderRadicalist')) { V.rival.FS.name = "Gender Radicalism"; - } else if (arc.FSGenderFundamentalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderFundamentalist')) { V.rival.FS.name = "Gender Fundamentalism"; } - if (arc.FSRepopulationFocus !== "unset") { + if (arcInfo.fsActive('FSRepopulationFocus')) { V.rival.FS.name = "Repopulation Focus"; - } else if (arc.FSRestart !== "unset") { + } else if (arcInfo.fsActive('FSRestart')) { V.rival.FS.name = "Eugenics"; } - if (arc.FSPaternalist !== "unset") { + if (arcInfo.fsActive('FSPaternalist')) { V.rival.FS.name = "Paternalism"; - } else if (arc.FSDegradationist !== "unset") { + } else if (arcInfo.fsActive('FSDegradationist')) { V.rival.FS.name = "Degradationism"; } - if (arc.FSBodyPurist !== "unset") { + if (arcInfo.fsActive('FSBodyPurist')) { V.rival.FS.name = "Body Purism"; - } else if (arc.FSTransformationFetishist !== "unset") { + } else if (arcInfo.fsActive('FSTransformationFetishist')) { V.rival.FS.name = "Transformation Fetishism"; } - if (arc.FSYouthPreferentialist !== "unset") { + if (arcInfo.fsActive('FSYouthPreferentialist')) { V.rival.FS.name = "Youth Preferentialism"; - } else if (arc.FSMaturityPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSMaturityPreferentialist')) { V.rival.FS.name = "Maturity Preferentialism"; } - if (arc.FSSlimnessEnthusiast !== "unset") { + if (arcInfo.fsActive('FSSlimnessEnthusiast')) { V.rival.FS.name = "Slimness Enthusiasm"; - } else if (arc.FSAssetExpansionist !== "unset") { + } else if (arcInfo.fsActive('FSAssetExpansionist')) { V.rival.FS.name = "Asset Expansionism"; } - if (arc.FSPastoralist !== "unset") { + if (arcInfo.fsActive('FSPastoralist')) { V.rival.FS.name = "Pastoralism"; - } else if (arc.FSCummunism !== "unset") { + } else if (arcInfo.fsActive('FSCummunism')) { V.rival.FS.name = "Cummunism"; } - if (arc.FSHedonisticDecadence !== "unset") { + if (arcInfo.fsActive('FSHedonisticDecadence')) { V.rival.FS.name = "Hedonistic Decadence"; - } else if (arc.FSPhysicalIdealist !== "unset") { + } else if (arcInfo.fsActive('FSPhysicalIdealist')) { V.rival.FS.name = "Physical Idealism"; } - if (arc.FSIntellectualDependency !== "unset") { + if (arcInfo.fsActive('FSIntellectualDependency')) { V.rival.FS.name = "Intellectual Dependency"; - } else if (arc.FSSlaveProfessionalism !== "unset") { + } else if (arcInfo.fsActive('FSSlaveProfessionalism')) { V.rival.FS.name = "Slave Professionalism"; } - if (arc.FSPetiteAdmiration !== "unset") { + if (arcInfo.fsActive('FSPetiteAdmiration')) { V.rival.FS.name = "Petite Admiration"; - } else if (arc.FSStatuesqueGlorification !== "unset") { + } else if (arcInfo.fsActive('FSStatuesqueGlorification')) { V.rival.FS.name = "Statuesque Glorification"; } - if (arc.FSChattelReligionist !== "unset") { + if (arcInfo.fsActive('FSChattelReligionist')) { V.rival.FS.name = "Chattel Religionism"; - } else if (arc.FSNull !== "unset") { + } else if (arcInfo.fsActive('FSNull')) { V.rival.FS.name = "Multiculturalism"; } - if (arc.FSRomanRevivalist !== "unset") { + if (arcInfo.fsActive('FSRomanRevivalist')) { V.rival.FS.name = "Roman Revivalism"; - } else if (arc.FSNeoImperialist !== "unset") { + } else if (arcInfo.fsActive('FSNeoImperialist')) { V.rival.FS.name = "Neo-Imperialism"; - } else if (arc.FSAztecRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAztecRevivalist')) { V.rival.FS.name = "Aztec Revivalism"; - } else if (arc.FSEgyptianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEgyptianRevivalist')) { V.rival.FS.name = "Egyptian Revivalism"; - } else if (arc.FSEdoRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEdoRevivalist')) { V.rival.FS.name = "Edo Revivalism"; - } else if (arc.FSArabianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSArabianRevivalist')) { V.rival.FS.name = "Arabian Revivalism"; - } else if (arc.FSChineseRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSChineseRevivalist')) { V.rival.FS.name = "Chinese Revivalism"; } } @@ -137,7 +138,7 @@ App.UI.fsPassage = function() { function FSPerception() { const el = new DocumentFragment(); for (const FS of App.Data.FutureSociety.playerFSNames) { - if (arc[FS] !== "unset") { + if (arc[FS] !== null) { App.UI.DOM.appendNewElement("div", el, FutureSocieties.arcSupport(FS, arc)); } } @@ -170,6 +171,9 @@ App.UI.fsPassage = function() { if (V.FSSpending > 10000) { App.UI.DOM.appendNewElement("div", el, `Spending more than ${cashFormat(10000)} weekly is a waste`, "note"); } + if (App.FSConformance.anyVectorsDefined()) { + App.Events.addNode(el, [App.UI.DOM.passageLink("Check own slaves conformance", "Slave FS Conformance")]); + } return el; } @@ -178,7 +182,7 @@ App.UI.fsPassage = function() { el.id = "mass"; const linkArray = []; - if (arc.FSChattelReligionist !== "unset") { + if (arcInfo.fsActive('FSChattelReligionist')) { linkArray.push( App.UI.DOM.link( "Give all your slaves devotional names", @@ -192,7 +196,7 @@ App.UI.fsPassage = function() { ); } - if (arc.FSPastoralist !== "unset") { + if (arcInfo.fsActive('FSPastoralist')) { linkArray.push( App.UI.DOM.link( "Give all your lactating slaves cow names", @@ -208,7 +212,7 @@ App.UI.fsPassage = function() { ); } - if (arc.FSIntellectualDependency !== "unset") { + if (arcInfo.fsActive('FSIntellectualDependency')) { linkArray.push( App.UI.DOM.link( "Give all your idiotic slaves stripper names", @@ -224,7 +228,7 @@ App.UI.fsPassage = function() { ); } - if (arc.FSRomanRevivalist !== "unset") { + if (arcInfo.fsActive('FSRomanRevivalist')) { linkArray.push( App.UI.DOM.link( "Rename all your slaves according to Roman custom", @@ -237,7 +241,7 @@ App.UI.fsPassage = function() { } ) ); - } else if (arc.FSAztecRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAztecRevivalist')) { linkArray.push( App.UI.DOM.link( "Rename all your slaves according to ancient Aztec custom", @@ -250,7 +254,7 @@ App.UI.fsPassage = function() { } ) ); - } else if (arc.FSEgyptianRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEgyptianRevivalist')) { linkArray.push( App.UI.DOM.link( "Rename all your slaves according to ancient Egyptian custom", @@ -263,7 +267,7 @@ App.UI.fsPassage = function() { } ) ); - } else if (arc.FSEdoRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSEdoRevivalist')) { linkArray.push( App.UI.DOM.link( "Rename all your slaves according to feudal Japanese custom", @@ -276,7 +280,7 @@ App.UI.fsPassage = function() { } ) ); - } else if (arc.FSAntebellumRevivalist !== "unset") { + } else if (arcInfo.fsActive('FSAntebellumRevivalist')) { linkArray.push( App.UI.DOM.link( "Rename all your slaves according to old Southern custom", @@ -290,7 +294,7 @@ App.UI.fsPassage = function() { ) ); } - if (arc.FSDegradationist !== "unset") { + if (arcInfo.fsActive('FSDegradationist')) { linkArray.push( App.UI.DOM.link( "Rename all your slaves according to Degradationist custom", @@ -304,7 +308,7 @@ App.UI.fsPassage = function() { ); } - if (arc.FSPaternalist !== "unset") { + if (arcInfo.fsActive('FSPaternalist')) { linkArray.push( App.UI.DOM.link( "Rename your obedient slaves according to Paternalist custom", @@ -328,7 +332,7 @@ App.UI.fsPassage = function() { ); } - if (arc.FSIntellectualDependency !== "unset") { + if (arcInfo.fsActive('FSIntellectualDependency')) { linkArray.push( App.UI.DOM.link( "Give all your slaves simple bimbo names", @@ -429,7 +433,7 @@ App.UI.fsPassage = function() { /* Race */ p = document.createElement("p"); r = []; - if (arc.FSSupremacist !== "unset") { + if (arcInfo.fsActive('FSSupremacist')) { r.push(pursuit()); r.push(`${arc.FSSupremacistRace} superiority.`); r.push(activeFS("FSSupremacist")); @@ -466,7 +470,7 @@ App.UI.fsPassage = function() { } App.Events.addNode(p, r, "div"); r = []; - if (arc.FSSubjugationist !== "unset") { + if (arcInfo.fsActive('FSSubjugationist')) { r.push(pursuit()); r.push(`${arc.FSSubjugationistRace} inferiority.`); r.push(activeFS("FSSubjugationist")); @@ -508,8 +512,8 @@ App.UI.fsPassage = function() { if (V.seePreg !== 0) { p = document.createElement("p"); r = []; - if (arc.FSRestart === "unset") { - if (arc.FSRepopulationFocus !== "unset") { + if (!arcInfo.fsActive('FSRestart')) { + if (arcInfo.fsActive('FSRepopulationFocus')) { r.push(pursuit()); r.push(`the belief that mass breeding will save humanity.`); r.push(activeFS("FSRepopulationFocus", ["boughtItem.clothing.maternityLingerie", "boughtItem.clothing.maternityDress", "boughtItem.clothing.belly"])); @@ -535,8 +539,8 @@ App.UI.fsPassage = function() { } App.Events.addNode(p, r, "div"); r = []; - if (arc.FSRepopulationFocus === "unset") { - if (arc.FSRestart !== "unset") { + if (!arcInfo.fsActive('FSRepopulationFocus')) { + if (arcInfo.fsActive('FSRestart')) { if (arc.FSRestartDecoration !== 100) { r.push(pursuit()); r.push(`Eugenics.`); @@ -574,8 +578,8 @@ App.UI.fsPassage = function() { /* Pro vs Dependant */ p = document.createElement("p"); r = []; - if (arc.FSSlaveProfessionalism === "unset") { - if (arc.FSIntellectualDependency !== "unset") { + if (!arcInfo.fsActive('FSSlaveProfessionalism')) { + if (arcInfo.fsActive('FSIntellectualDependency')) { r.push(pursuit()); r.push(`intellectual dependency, a belief that slaves should be airheaded, horny and fully dependent on their owners.`); r.push(activeFS("FSIntellectualDependency", ["boughtItem.clothing.bimbo"])); @@ -599,8 +603,8 @@ App.UI.fsPassage = function() { } App.Events.addNode(p, r, "div"); r = []; - if (arc.FSIntellectualDependency === "unset") { - if (arc.FSSlaveProfessionalism !== "unset") { + if (!arcInfo.fsActive('FSIntellectualDependency')) { + if (arcInfo.fsActive('FSSlaveProfessionalism')) { r.push(pursuit()); r.push(`slave professionalism, a focus on smart, refined, altogether perfect slaves.`); r.push(activeFS("FSSlaveProfessionalism", ["boughtItem.clothing.courtesan"])); @@ -629,8 +633,8 @@ App.UI.fsPassage = function() { p = document.createElement("p"); r = []; if (V.seeDicks !== 0 || V.makeDicks === 1) { - if (arc.FSGenderFundamentalist === "unset") { - if (arc.FSGenderRadicalist !== "unset") { + if (!arcInfo.fsActive('FSGenderFundamentalist')) { + if (arcInfo.fsActive('FSGenderRadicalist')) { r.push(pursuit()); r.push(`a radical redefinition of gender that identifies powerful people as male, and everyone else as female.`); r.push(activeFS("FSGenderRadicalist")); @@ -655,8 +659,8 @@ App.UI.fsPassage = function() { } App.Events.addNode(p, r, "div"); r = []; - if (arc.FSGenderRadicalist === "unset") { - if (arc.FSGenderFundamentalist !== "unset") { + if (!arcInfo.fsActive('FSGenderRadicalist')) { + if (arcInfo.fsActive('FSGenderFundamentalist')) { r.push(pursuit()); r.push(`gender traditionalism, including a societal preference for feminine slaves ${(V.seePreg !== 0) ? ` and support for slave pregnancy` : ``}.`); r.push(activeFS("FSGenderFundamentalist", ["boughtItem.clothing.bunny"])); @@ -688,8 +692,8 @@ App.UI.fsPassage = function() { /* Deg vs Paternalist */ p = document.createElement("p"); r = []; - if (arc.FSDegradationist === "unset") { - if (arc.FSPaternalist !== "unset") { + if (!arcInfo.fsActive('FSDegradationist')) { + if (arcInfo.fsActive('FSPaternalist')) { r.push(pursuit()); r.push(`a vision of slave improvement, including slaves' health, mental well-being, and education.`); r.push(activeFS("FSPaternalist", ["boughtItem.clothing.conservative"])); @@ -713,8 +717,8 @@ App.UI.fsPassage = function() { } App.Events.addNode(p, r, "div"); r = []; - if (arc.FSPaternalist === "unset") { - if (arc.FSDegradationist !== "unset") { + if (!arcInfo.fsActive('FSPaternalist')) { + if (arcInfo.fsActive('FSDegradationist')) { r.push(pursuit()); r.push(`slave degradation, a belief that slaves are not human and should not be treated decently.`); r.push(activeFS("FSDegradationist", ["boughtItem.clothing.chains"])); @@ -742,8 +746,8 @@ App.UI.fsPassage = function() { /* TF vs Purist */ p = document.createElement("p"); r = []; - if (arc.FSTransformationFetishist === "unset") { - if (arc.FSBodyPurist !== "unset") { + if (!arcInfo.fsActive('FSTransformationFetishist')) { + if (arcInfo.fsActive('FSBodyPurist')) { r.push(pursuit()); r.push(`societal disapproval of implant surgery.`); r.push(activeFS("FSBodyPurist")); @@ -767,8 +771,8 @@ App.UI.fsPassage = function() { } App.Events.addNode(p, r, "div"); r = []; - if (arc.FSBodyPurist === "unset") { - if (arc.FSTransformationFetishist !== "unset") { + if (!arcInfo.fsActive('FSBodyPurist')) { + if (arcInfo.fsActive('FSTransformationFetishist')) { r.push(pursuit()); r.push(`societal fetishization of implant surgery.`); r.push(activeFS("FSTransformationFetishist")); @@ -796,8 +800,8 @@ App.UI.fsPassage = function() { /* Maturity vs Youth */ p = document.createElement("p"); r = []; - if (arc.FSMaturityPreferentialist === "unset") { - if (arc.FSYouthPreferentialist !== "unset") { + if (!arcInfo.fsActive('FSMaturityPreferentialist')) { + if (arcInfo.fsActive('FSYouthPreferentialist')) { r.push(pursuit()); r.push(`an accentuated societal preference for younger slaves.`); r.push(activeFS("FSYouthPreferentialist")); @@ -830,8 +834,8 @@ App.UI.fsPassage = function() { } App.Events.addNode(p, r, "div"); r = []; - if (arc.FSYouthPreferentialist === "unset") { - if (arc.FSMaturityPreferentialist !== "unset") { + if (!arcInfo.fsActive('FSYouthPreferentialist')) { + if (arcInfo.fsActive('FSMaturityPreferentialist')) { r.push(pursuit()); r.push(`a societal preference for older women.`); r.push(activeFS("FSMaturityPreferentialist")); @@ -866,8 +870,8 @@ App.UI.fsPassage = function() { /* Statuesque vs Petite */ p = document.createElement("p"); r = []; - if (arc.FSStatuesqueGlorification === "unset") { - if (arc.FSPetiteAdmiration !== "unset") { + if (!arcInfo.fsActive('FSStatuesqueGlorification')) { + if (arcInfo.fsActive('FSPetiteAdmiration')) { r.push(pursuit()); r.push(`an accentuated societal preference for short slaves.`); r.push(activeFS("FSPetiteAdmiration")); @@ -891,8 +895,8 @@ App.UI.fsPassage = function() { } App.Events.addNode(p, r, "div"); r = []; - if (arc.FSPetiteAdmiration === "unset") { - if (arc.FSStatuesqueGlorification !== "unset") { + if (!arcInfo.fsActive('FSPetiteAdmiration')) { + if (arcInfo.fsActive('FSStatuesqueGlorification')) { r.push(pursuit()); r.push(`a societal fixation on tallness.`); r.push(activeFS("FSStatuesqueGlorification")); @@ -920,8 +924,8 @@ App.UI.fsPassage = function() { /* Expand vs Slim */ p = document.createElement("p"); r = []; - if (arc.FSAssetExpansionist === "unset") { - if (arc.FSSlimnessEnthusiast !== "unset") { + if (!arcInfo.fsActive('FSAssetExpansionist')) { + if (arcInfo.fsActive('FSSlimnessEnthusiast')) { r.push(App.UI.DOM.makeElement("span", "You are supporting", "bold")); r.push(`enthusiasm for slaves with girlish figures.`); r.push(activeFS("FSSlimnessEnthusiast")); @@ -945,8 +949,8 @@ App.UI.fsPassage = function() { } App.Events.addNode(p, r, "div"); r = []; - if (arc.FSSlimnessEnthusiast === "unset") { - if (arc.FSAssetExpansionist !== "unset") { + if (!arcInfo.fsActive('FSSlimnessEnthusiast')) { + if (arcInfo.fsActive('FSAssetExpansionist')) { r.push(pursuit()); r.push(`societal hunger for huge assets.`); r.push(activeFS("FSAssetExpansionist")); @@ -973,7 +977,7 @@ App.UI.fsPassage = function() { /* Milking stands alone */ r = []; - if (arc.FSPastoralist !== "unset") { + if (arcInfo.fsActive('FSPastoralist')) { r.push(pursuit()); r.push(`societal normalization of slave milking.`); r.push(activeFS("FSPastoralist", ["boughtItem.clothing.western"])); @@ -999,8 +1003,8 @@ App.UI.fsPassage = function() { /* Physical Idealist vs Hedonist */ p = document.createElement("p"); r = []; - if (arc.FSHedonisticDecadence === "unset") { - if (arc.FSPhysicalIdealist !== "unset") { + if (!arcInfo.fsActive('FSHedonisticDecadence')) { + if (arcInfo.fsActive('FSPhysicalIdealist')) { r.push(pursuit()); r.push(`societal reverence for the idealized human form, including height, health and muscle.`); r.push(activeFS("FSPhysicalIdealist", ["boughtItem.clothing.oil"])); @@ -1024,8 +1028,8 @@ App.UI.fsPassage = function() { } App.Events.addNode(p, r, "div"); r = []; - if (arc.FSPhysicalIdealist === "unset") { - if (arc.FSHedonisticDecadence !== "unset") { + if (!arcInfo.fsActive('FSPhysicalIdealist')) { + if (arcInfo.fsActive('FSHedonisticDecadence')) { r.push(pursuit()); r.push(`societal normalization of overindulgence and immediate gratification. Be it food, drink, sex, drugs or whatever one's desire may be.`); r.push(activeFS("FSHedonisticDecadence")); @@ -1053,8 +1057,8 @@ App.UI.fsPassage = function() { /* Chattel religionist vs Multicultural */ p = document.createElement("p"); r = []; - if (arc.FSNull === "unset") { - if (arc.FSChattelReligionist !== "unset") { + if (!arcInfo.fsActive('FSNull')) { + if (arcInfo.fsActive('FSChattelReligionist')) { r.push(pursuit()); r.push(`a new strain of religion that emphasizes the slaveholding portions of religious history.`); r.push(activeFS("FSChattelReligionist", ["boughtItem.clothing.habit"])); @@ -1078,8 +1082,8 @@ App.UI.fsPassage = function() { } App.Events.addNode(p, r, "div"); r = []; - if (arc.FSChattelReligionist === "unset") { - if (arc.FSNull !== "unset") { + if (!arcInfo.fsActive('FSChattelReligionist')) { + if (arcInfo.fsActive('FSNull')) { const freedomArray = [`You are permitting`]; if (arc.FSNull <= 25) { freedomArray.push(`basic`); @@ -1094,7 +1098,7 @@ App.UI.fsPassage = function() { r.push(`cultural freedom in your arcology.`); } if (V.FSCreditCount === 4) { - if (arc.FSNull !== "unset") { + if (arcInfo.fsActive('FSNull')) { r.push(activeFS("FSChattelReligionist")); if (arc.FSNull <= 25) { r.push(abandonRel()); @@ -1112,7 +1116,7 @@ App.UI.fsPassage = function() { } } } else if (V.FSCreditCount === 6) { - if (arc.FSNull !== "unset") { + if (arcInfo.fsActive('FSNull')) { if (arc.FSNull <= 20) { r.push(abandonRel()); } else { @@ -1129,7 +1133,7 @@ App.UI.fsPassage = function() { } } } else if (V.FSCreditCount === 7) { - if (arc.FSNull !== "unset") { + if (arcInfo.fsActive('FSNull')) { if (arc.FSNull <= 20) { r.push(abandonRel()); } else { @@ -1146,7 +1150,7 @@ App.UI.fsPassage = function() { } } } else { - if (arc.FSNull !== "unset") { + if (arcInfo.fsActive('FSNull')) { if (arc.FSNull <= 20) { r.push(abandonRel()); } else { @@ -1171,7 +1175,7 @@ App.UI.fsPassage = function() { return App.UI.DOM.link( "Withdraw", () => { - if (arc.FSNull !== "unset") { + if (arcInfo.fsActive('FSNull')) { arc.FSNull -= num; } App.UI.reload(); @@ -1192,7 +1196,7 @@ App.UI.fsPassage = function() { function advanceRel(num) { const f = new DocumentFragment(); f.append(App.UI.DOM.link("Advance", () => { - if (arc.FSNull !== "unset") { + if (arcInfo.fsActive('FSNull')) { arc.FSNull += num; } App.UI.reload(); @@ -1214,203 +1218,192 @@ App.UI.fsPassage = function() { /* Revival section */ p = document.createElement("p"); r = []; - if ((arc.FSAztecRevivalist === "unset") && (arc.FSEgyptianRevivalist === "unset") && (arc.FSEdoRevivalist === "unset") && (arc.FSArabianRevivalist === "unset") && (arc.FSChineseRevivalist === "unset") && (arc.FSNeoImperialist === "unset") && (arc.FSAntebellumRevivalist === "unset")) { - if (arc.FSRomanRevivalist !== "unset") { - r.push(pursuit()); - r.push(`a vision of a new Rome.`); - r.push(activeFS("FSRomanRevivalist", ["boughtItem.clothing.toga"])); + + // at most one revivalist FS can be active + const activeRevivalFS = arcInfo.revivalSociety(); + + if (activeRevivalFS === RevivalSociety.ROMAN) { + r.push(pursuit()); + r.push(`a vision of a new Rome.`); + r.push(activeFS("FSRomanRevivalist", ["boughtItem.clothing.toga"])); + } else if (activeRevivalFS === null) { + if (FSCredits > 0) { + r.push( + App.UI.DOM.link( + "Roman Revivalism", + () => { + arc.FSRomanRevivalist = 4; + App.UI.reload(); + } + ) + ); + r.push(`is a vision of a new Rome.`); + r.push(evaluation("FSRomanRevivalist")); } else { - if (FSCredits > 0) { - r.push( - App.UI.DOM.link( - "Roman Revivalism", - () => { - arc.FSRomanRevivalist = 4; - App.UI.reload(); - } - ) - ); - r.push(`is a vision of a new Rome.`); - r.push(evaluation("FSRomanRevivalist")); - } else { - /* <span class="note"><span style="font-weight:Bold">Roman Revivalism:</span> a vision of a new Rome.</span>*/ - } + /* <span class="note"><span style="font-weight:Bold">Roman Revivalism:</span> a vision of a new Rome.</span>*/ } } App.Events.addNode(p, r, "div"); r = []; - if ((arc.FSAztecRevivalist === "unset") && (arc.FSEgyptianRevivalist === "unset") && (arc.FSEdoRevivalist === "unset") && (arc.FSArabianRevivalist === "unset") && (arc.FSChineseRevivalist === "unset") && (arc.FSRomanRevivalist === "unset") && (arc.FSAntebellumRevivalist === "unset")) { - if (arc.FSNeoImperialist !== "unset") { - r.push(pursuit()); - r.push(`a vision of a new Imperial Society.`); - r.push(activeFS("FSNeoImperialist", ["boughtItem.clothing.imperialarmor", "boughtItem.clothing.imperialsuit"])); + + if (activeRevivalFS === RevivalSociety.NEO_IMPERIAL) { + r.push(pursuit()); + r.push(`a vision of a new Imperial Society.`); + r.push(activeFS("FSNeoImperialist", ["boughtItem.clothing.imperialarmor", "boughtItem.clothing.imperialsuit"])); + } else if (activeRevivalFS === null){ + if (FSCredits > 0) { + r.push( + App.UI.DOM.link( + "Neo-Imperialism", + () => { + arc.FSNeoImperialist = 4; + App.UI.reload(); + } + ) + ); + r.push(`is a vision of a new Imperial society, integrating high technology and old-world culture under the iron fist of your absolute rule.`); + r.push(evaluation("FSNeoImperialist")); } else { - if (FSCredits > 0) { - r.push( - App.UI.DOM.link( - "Neo-Imperialism", - () => { - arc.FSNeoImperialist = 4; - App.UI.reload(); - } - ) - ); - r.push(`is a vision of a new Imperial society, integrating high technology and old-world culture under the iron fist of your absolute rule.`); - r.push(evaluation("FSNeoImperialist")); - } else { - /* <span class="note"><span style="font-weight:Bold">Neo-Imperialism:</span> a vision of a new Imperial Society, integrating high technology and old-world culture under the iron fist of your absolute rule.</span>*/ - } + /* <span class="note"><span style="font-weight:Bold">Neo-Imperialism:</span> a vision of a new Imperial Society, integrating high technology and old-world culture under the iron fist of your absolute rule.</span>*/ } } App.Events.addNode(p, r, "div"); r = []; - if ((arc.FSRomanRevivalist === "unset") && (arc.FSEgyptianRevivalist === "unset") && (arc.FSEdoRevivalist === "unset") && (arc.FSArabianRevivalist === "unset") && (arc.FSChineseRevivalist === "unset") && (arc.FSNeoImperialist === "unset") && (arc.FSAntebellumRevivalist === "unset")) { - if (arc.FSAztecRevivalist !== "unset") { - r.push(pursuit()); - r.push(`a vision of a new Aztec Empire.`); - r.push(activeFS("FSAztecRevivalist", ["boughtItem.clothing.huipil"])); + if (activeRevivalFS === RevivalSociety.AZTEC) { + r.push(pursuit()); + r.push(`a vision of a new Aztec Empire.`); + r.push(activeFS("FSAztecRevivalist", ["boughtItem.clothing.huipil"])); + } else if (activeRevivalFS === null){ + if (FSCredits > 0) { + r.push( + App.UI.DOM.link( + "Aztec Revivalism", + () => { + arc.FSAztecRevivalist = 4; + App.UI.reload(); + } + ) + ); + r.push(`is a vision of a new Aztec Empire.`); + r.push(evaluation("FSAztecRevivalist")); } else { - if (FSCredits > 0) { - r.push( - App.UI.DOM.link( - "Aztec Revivalism", - () => { - arc.FSAztecRevivalist = 4; - App.UI.reload(); - } - ) - ); - r.push(`is a vision of a new Aztec Empire.`); - r.push(evaluation("FSAztecRevivalist")); - } else { - /* <span class="note"><span style="font-weight:Bold">Aztec Revivalism:</span> a vision of a new Aztec Empire.</span>*/ - } + /* <span class="note"><span style="font-weight:Bold">Aztec Revivalism:</span> a vision of a new Aztec Empire.</span>*/ } } App.Events.addNode(p, r, "div"); r = []; - if ((arc.FSRomanRevivalist === "unset") && (arc.FSAztecRevivalist === "unset") && (arc.FSEdoRevivalist === "unset") && (arc.FSArabianRevivalist === "unset") && (arc.FSChineseRevivalist === "unset") && (arc.FSNeoImperialist === "unset") && (arc.FSAntebellumRevivalist === "unset")) { - if (arc.FSEgyptianRevivalist !== "unset") { - r.push(pursuit()); - r.push(`a vision of Pharaoh's Egypt.`); - r.push(activeFS("FSEgyptianRevivalist", ["boughtItem.clothing.egypt"])); + if (activeRevivalFS === RevivalSociety.EGYPTIAN) { + r.push(pursuit()); + r.push(`a vision of Pharaoh's Egypt.`); + r.push(activeFS("FSEgyptianRevivalist", ["boughtItem.clothing.egypt"])); + } else if (activeRevivalFS === null){ + if (FSCredits > 0) { + r.push( + App.UI.DOM.link( + "Egyptian Revivalism", + () => { + arc.FSEgyptianRevivalist = 4 + arc.FSEgyptianRevivalistInterest; + arc.FSEgyptianRevivalistIncestPolicy = 0; + App.UI.reload(); + } + ) + ); + r.push(`is a vision of a Pharaoh's Egypt.`); + r.push(evaluation("FSEgyptianRevivalist")); } else { - if (FSCredits > 0) { - r.push( - App.UI.DOM.link( - "Egyptian Revivalism", - () => { - arc.FSEgyptianRevivalist = 4 + arc.FSEgyptianRevivalistInterest; - arc.FSEgyptianRevivalistIncestPolicy = 0; - App.UI.reload(); - } - ) - ); - r.push(`is a vision of a Pharaoh's Egypt.`); - r.push(evaluation("FSEgyptianRevivalist")); - } else { - /* <span class="note"><span style="font-weight:Bold">Egyptian Revivalism:</span> a vision of Pharaoh's Egypt.</span>*/ - } + /* <span class="note"><span style="font-weight:Bold">Egyptian Revivalism:</span> a vision of Pharaoh's Egypt.</span>*/ } } App.Events.addNode(p, r, "div"); r = []; - if ((arc.FSRomanRevivalist === "unset") && (arc.FSAztecRevivalist === "unset") && (arc.FSEgyptianRevivalist === "unset") && (arc.FSArabianRevivalist === "unset") && (arc.FSChineseRevivalist === "unset") && (arc.FSNeoImperialist === "unset") && (arc.FSAntebellumRevivalist === "unset")) { - if (arc.FSEdoRevivalist !== "unset") { - r.push(pursuit()); - r.push(`a vision of Edo Japan.`); - r.push(activeFS("FSEdoRevivalist", ["boughtItem.clothing.kimono"])); + if (activeRevivalFS === RevivalSociety.EDO) { + r.push(pursuit()); + r.push(`a vision of Edo Japan.`); + r.push(activeFS("FSEdoRevivalist", ["boughtItem.clothing.kimono"])); + } else if (activeRevivalFS === null){ + if (FSCredits > 0) { + r.push( + App.UI.DOM.link( + "Edo Revivalism", + () => { + arc.FSEdoRevivalist = 4; + App.UI.reload(); + } + ) + ); + r.push(`is a vision of Edo Japan.`); + r.push(evaluation("FSEdoRevivalist")); } else { - if (FSCredits > 0) { - r.push( - App.UI.DOM.link( - "Edo Revivalism", - () => { - arc.FSEdoRevivalist = 4; - App.UI.reload(); - } - ) - ); - r.push(`is a vision of Edo Japan.`); - r.push(evaluation("FSEdoRevivalist")); - } else { - /* <span class="note"><span style="font-weight:Bold">Edo Revivalism:</span> a vision of Edo Japan.</span>*/ - } + /* <span class="note"><span style="font-weight:Bold">Edo Revivalism:</span> a vision of Edo Japan.</span>*/ } } App.Events.addNode(p, r, "div"); r = []; - if ((arc.FSRomanRevivalist === "unset") && (arc.FSAztecRevivalist === "unset") && (arc.FSEgyptianRevivalist === "unset") && (arc.FSEdoRevivalist === "unset") && (arc.FSChineseRevivalist === "unset") && (arc.FSNeoImperialist === "unset") && (arc.FSAntebellumRevivalist === "unset")) { - if (arc.FSArabianRevivalist !== "unset") { - r.push(pursuit()); - r.push(`a vision of the Sultanate of old.`); - r.push(activeFS("FSArabianRevivalist", ["boughtItem.clothing.harem"])); + if (activeRevivalFS === RevivalSociety.ARABIAN) { + r.push(pursuit()); + r.push(`a vision of the Sultanate of old.`); + r.push(activeFS("FSArabianRevivalist", ["boughtItem.clothing.harem"])); + } else if (activeRevivalFS === null){ + if (FSCredits > 0) { + r.push( + App.UI.DOM.link( + "Arabian Revivalism", + () => { + arc.FSArabianRevivalist = 4; + App.UI.reload(); + } + ) + ); + r.push(`is a vision of the Sultanate of old.`); + r.push(evaluation("FSArabianRevivalist")); } else { - if (FSCredits > 0) { - r.push( - App.UI.DOM.link( - "Arabian Revivalism", - () => { - arc.FSArabianRevivalist = 4; - App.UI.reload(); - } - ) - ); - r.push(`is a vision of the Sultanate of old.`); - r.push(evaluation("FSArabianRevivalist")); - } else { - /* <span class="note"><span style="font-weight:Bold">Arabian Revivalism:</span> a vision of the Sultanate of old.</span>*/ - } + /* <span class="note"><span style="font-weight:Bold">Arabian Revivalism:</span> a vision of the Sultanate of old.</span>*/ } } App.Events.addNode(p, r, "div"); r = []; - if ((arc.FSRomanRevivalist === "unset") && (arc.FSAztecRevivalist === "unset") && (arc.FSEgyptianRevivalist === "unset") && (arc.FSEdoRevivalist === "unset") && (arc.FSArabianRevivalist === "unset") && (arc.FSNeoImperialist === "unset") && (arc.FSAntebellumRevivalist === "unset")) { - if (arc.FSChineseRevivalist !== "unset") { - r.push(pursuit()); - r.push(`a vision of ancient China.`); - r.push(activeFS("FSChineseRevivalist", ["boughtItem.clothing.qipao"])); + if (activeRevivalFS === RevivalSociety.CHINESE) { + r.push(pursuit()); + r.push(`a vision of ancient China.`); + r.push(activeFS("FSChineseRevivalist", ["boughtItem.clothing.qipao"])); + } else if (activeRevivalFS === null){ + if (FSCredits > 0) { + r.push( + App.UI.DOM.link( + "Chinese Revivalism", + () => { + arc.FSChineseRevivalist = 4; + App.UI.reload(); + } + ) + ); + r.push(`is a vision of ancient China.`); + r.push(evaluation("FSChineseRevivalist")); } else { - if (FSCredits > 0) { - r.push( - App.UI.DOM.link( - "Chinese Revivalism", - () => { - arc.FSChineseRevivalist = 4; - App.UI.reload(); - } - ) - ); - r.push(`is a vision of ancient China.`); - r.push(evaluation("FSChineseRevivalist")); - } else { - /* <span class="note"><span style="font-weight:Bold">Chinese Revivalism:</span> a vision of ancient China.</span>*/ - } + /* <span class="note"><span style="font-weight:Bold">Chinese Revivalism:</span> a vision of ancient China.</span>*/ } } App.Events.addNode(p, r, "div"); r = []; - if ((arc.FSRomanRevivalist === "unset") && (arc.FSAztecRevivalist === "unset") && (arc.FSEgyptianRevivalist === "unset") && (arc.FSEdoRevivalist === "unset") && (arc.FSArabianRevivalist === "unset") && (arc.FSChineseRevivalist === "unset") && (arc.FSNeoImperialist === "unset")) { - if (arc.FSAntebellumRevivalist !== "unset") { - r.push(pursuit()); - r.push(`a vision of the Antebellum South.`); - r.push(activeFS("FSAntebellumRevivalist", ["boughtItem.clothing.antebellum"])); + if (activeRevivalFS === RevivalSociety.ANTEBELLUM) { + r.push(pursuit()); + r.push(`a vision of the Antebellum South.`); + r.push(activeFS("FSAntebellumRevivalist", ["boughtItem.clothing.antebellum"])); + } else if (activeRevivalFS === null){ + if (FSCredits > 0) { + r.push( + App.UI.DOM.link( + "Antebellum Revivalism", + () => { + arc.FSAntebellumRevivalist = 4; + App.UI.reload(); + } + ) + ); + r.push(`is a vision of the Antebellum South.`); + r.push(evaluation("FSAntebellumRevivalist")); } else { - if (FSCredits > 0) { - r.push( - App.UI.DOM.link( - "Antebellum Revivalism", - () => { - arc.FSAntebellumRevivalist = 4; - App.UI.reload(); - } - ) - ); - r.push(`is a vision of the Antebellum South.`); - r.push(evaluation("FSAntebellumRevivalist")); - } else { - /* <span class="note"><span style="font-weight:Bold">Antebellum South:</span> a vision of the Antebellum South.</span>*/ - } + /* <span class="note"><span style="font-weight:Bold">Antebellum South:</span> a vision of the Antebellum South.</span>*/ } } App.Events.addNode(p, r, "div"); diff --git a/src/futureSocieties/futureSociety.js b/src/futureSocieties/futureSociety.js index d8f650f7797fc5d25d4306898c1b5a4e93532b5d..5179e55c847722da14a4ec327df1c7cc558ae0c2 100644 --- a/src/futureSocieties/futureSociety.js +++ b/src/futureSocieties/futureSociety.js @@ -29,6 +29,9 @@ globalThis.FutureSocieties = (function() { arcSupport: arcSupport, researchAvailable, isActive, + policyActive, + advance, + humanVector, }; /** get the list of FSes active for a particular arcology @@ -36,7 +39,7 @@ globalThis.FutureSocieties = (function() { * @returns {FC.FutureSociety[]} */ function activeFSes(arcology) { - return App.Data.FutureSociety.fsNames.filter((fs) => Number.isFinite(arcology[fs])); + return App.Data.FutureSociety.fsNames.filter((fs) => arcology[fs] !== null); } /** call as FutureSocieties.activeCount(arcology) @@ -52,11 +55,9 @@ globalThis.FutureSocieties = (function() { * @param {number} progress */ function applyBroadProgress(arcologyID, progress) { - /** @type {FC.ArcologyState} */ const arcology = V.arcologies[arcologyID]; for (const fs of activeFSes(arcology)) { if (fs !== "FSNull") { // does not progress this way - // @ts-ignore // Because of activeFSes() we know it cannot be "unset", the only valid non numeric value. arcology[fs] += progress; } } @@ -71,7 +72,6 @@ globalThis.FutureSocieties = (function() { for (const fs of activeFSes(arcology)) { if (fs !== "FSNull") { // no conventional progress if (arcology[fs] > V.FSLockinLevel) { - // @ts-ignore // Because of activeFSes() we know it cannot be "unset", the only valid non numeric value. arcology.influenceBonus += arcology[fs] - V.FSLockinLevel; arcology[fs] = V.FSLockinLevel; } @@ -82,18 +82,14 @@ globalThis.FutureSocieties = (function() { /** returns an array of FSes which the arcology has developed enough to influence others * call as FutureSocieties.influenceSources(arcologyID) * @param {number} arcologyID + * @returns {FC.FutureSociety[]} */ function influenceSources(arcologyID) { - let fses = []; const arcology = V.arcologies[arcologyID]; - for (const fs of activeFSes(arcology)) { - if (fs !== "FSNull") { // no influence from Multiculturalism? - if (arcology[fs] > 60) { - fses.push(fs); - } - } - } - return fses; + return activeFSes(arcology).reduce((acc, fs) => { + if (fs !== 'FSNull' && arcology[fs] > 60) { acc.push(fs); } + return acc; + }, []); } /** determines whether two named FSes are naturally conflicting or not @@ -153,9 +149,9 @@ globalThis.FutureSocieties = (function() { */ function diplomaticFSes(arc1, arc2) { /** @type {FC.FutureSociety[]} */ - let shared = []; + const shared = []; /** @type {FC.FutureSociety[][]} */ - let conflicting = []; + const conflicting = []; const arc1FSes = activeFSes(arc1); const arc2FSes = activeFSes(arc2); // find ordinary shared and conflicting FSes @@ -169,26 +165,26 @@ globalThis.FutureSocieties = (function() { } } // special cases: racial FSes might be conflicting even when shared - if (shared.contains("FSSupremacist")) { + if (shared.includes("FSSupremacist")) { // a different race is supreme if (arc1.FSSupremacistRace !== arc2.FSSupremacistRace) { shared.delete("FSSupremacist"); conflicting.push(["FSSupremacist", "FSSupremacist"]); } // subjugating the supreme race - if (arc2FSes.contains("FSSubjugationist") && arc2.FSSubjugationistRace === arc1.FSSupremacistRace) { + if (arc2FSes.includes("FSSubjugationist") && arc2.FSSubjugationistRace === arc1.FSSupremacistRace) { shared.delete("FSSupremacist"); conflicting.push(["FSSupremacist", "FSSubjugationist"]); } } - if (shared.contains("FSSubjugationist")) { + if (shared.includes("FSSubjugationist")) { // subjugating a different race if (arc1.FSSubjugationistRace !== arc2.FSSubjugationistRace) { shared.delete("FSSubjugationist"); conflicting.push(["FSSubjugationist", "FSSubjugationist"]); } // believe the subjugated race is supreme - if (arc2FSes.contains("FSSupremacist") && arc2.FSSupremacistRace === arc1.FSSubjugationistRace) { + if (arc2FSes.includes("FSSupremacist") && arc2.FSSupremacistRace === arc1.FSSubjugationistRace) { shared.delete("FSSubjugationist"); conflicting.push(["FSSubjugationist", "FSSupremacist"]); } @@ -234,9 +230,8 @@ globalThis.FutureSocieties = (function() { if (fs !== "FSNull") { // exempt for some reason? if (arc[fs] < jsRandom(10, 150)) { purged.push(fs); - arc[fs] = "unset"; + arc[fs] = null; } else { - // @ts-ignore // Because of activeFSes() we know it cannot be "unset", the only valid non numeric value. arc[fs] -= 10; } } @@ -261,19 +256,19 @@ globalThis.FutureSocieties = (function() { if (FS === "FSSupremacist" || FS === "FSSubjugationist") { FSLaw += "ME"; } if (FS !== "FSNull") { arcology[FSDecoration] = 20; } - arcology[FS] = "unset"; + arcology[FS] = null; switch (FS) { case "FSPaternalist": arcology[FSLaw] = 0; arcology[FSSMR] = 0; - if (_.get(V, "SecExp.edicts")) { + if (V?.SecExp?.edicts) { V.SecExp.edicts.slaveWatch = 0; } break; case "FSDegradationist": arcology[FSLaw] = 0; arcology[FSSMR] = 0; - if (_.get(V, "SecExp.edicts")) { + if (V?.SecExp?.edicts) { V.SecExp.edicts.defense.liveTargets = 0; } break; @@ -289,7 +284,7 @@ globalThis.FutureSocieties = (function() { case "FSSupremacist": arcology[FSLaw] = 0; arcology[FSSMR] = 0; - if (_.get(V, "SecExp.edicts")) { + if (V?.SecExp?.edicts) { V.SecExp.edicts.defense.noSubhumansInArmy = 0; } break; @@ -306,7 +301,7 @@ globalThis.FutureSocieties = (function() { arcology.FSPhysicalIdealistLaw = 0; arcology.FSPhysicalIdealistSMR = 0; arcology.FSPhysicalIdealistStrongFat = 0; - if (_.get(V, "SecExp.edicts")) { + if (V?.SecExp?.edicts) { V.SecExp.edicts.defense.martialSchool = 0; } break; @@ -321,7 +316,7 @@ globalThis.FutureSocieties = (function() { arcology.FSChattelReligionistLaw2 = 0; arcology.FSChattelReligionistSMR = 0; arcology.FSChattelReligionistCreed = 0; - if (_.get(V, "SecExp.edicts")) { + if (V?.SecExp?.edicts) { V.SecExp.edicts.subsidyChurch = 0; } break; @@ -329,7 +324,7 @@ globalThis.FutureSocieties = (function() { arcology[FSLaw] = 0; arcology[FSSMR] = 0; V.universalRulesChildrenBecomeBreeders = 0; - if (_.get(V, "SecExp.edicts")) { + if (V?.SecExp?.edicts) { V.SecExp.edicts.defense.pregExemption = 0; } break; @@ -337,7 +332,7 @@ globalThis.FutureSocieties = (function() { arcology[FSLaw] = 0; arcology[FSSMR] = 0; arcology.FSRestartResearch = 0; // not really research at all; reset breeding program - if (_.get(V, "SecExp.edicts")) { + if (V?.SecExp?.edicts) { V.SecExp.edicts.defense.eliteOfficers = 0; } V.propOutcome = 0; @@ -402,7 +397,7 @@ globalThis.FutureSocieties = (function() { function calcFSCredits() { const arcology = V.arcologies[0]; let activeFS = activeCount(arcology); - if (typeof arcology.FSNull === 'number' && arcology.FSNull > 0) { // multiculturalism is accounted for separately + if (arcology.FSNull > 0) { // multiculturalism is accounted for separately activeFS -= 1; // already counted once, remove that one and count investments instead if (V.FSCreditCount === 4) { activeFS += arcology.FSNull / 25; @@ -446,12 +441,12 @@ globalThis.FutureSocieties = (function() { // nothing to do } else if (activeFS === undefined) { // eslint-disable-next-line no-console - console.log(`Error: ${facility.nameCaps} decoration is ${facility.decoration}`); + console.error(`Error: ${facility.nameCaps} decoration is ${facility.decoration}`); facility.decoration = "standard"; } else if (!Number.isFinite(V.arcologies[0][activeFS])) { - if (V.arcologies[0][activeFS] !== "unset") { + if (FutureSocieties.isActive(activeFS)) { // eslint-disable-next-line no-console - console.log(`Error: $arcologies[0].${activeFS} is ${V.arcologies[0][activeFS]}`); + console.error(`Error: $arcologies[0].${activeFS} is ${V.arcologies[0][activeFS]}`); } facility.decoration = "standard"; } @@ -471,8 +466,6 @@ globalThis.FutureSocieties = (function() { const arc = V.arcologies[0]; if (FSProp && Number.isFinite(arc[FSProp])) { - /** @type {number} */ - // @ts-ignore // We know this is true because of Number.isFinite() const n = arc[FSProp]; arc[FSProp] = Math.clamp(n + magnitude * V.FSSingleSlaveRep, 0, 100); } @@ -523,301 +516,215 @@ globalThis.FutureSocieties = (function() { /** * * @param {FC.FutureSociety} FS - * @param {*} [arc] + * @param {FC.ArcologyState} [arc] */ function arcSupport(FS, arc = V.arcologies[0]) { - const arcSupportMap = new Map([ - [ - "FSSupremacist", - [ + /** + * @param {FC.FutureSociety} fs + * @param {FC.ArcologyState} arc + * @returns {string[]} + */ + const arcSupportTexts = (fs, arc) => { + switch (fs) { + case "FSSupremacist": return [ `${arc.name} believes implicitly in ${arc.FSSupremacistRace} superiority.`, `${arc.name} agrees strongly with ${arc.FSSupremacistRace} superiority.`, `${arc.name} is sympathetic to ${arc.FSSupremacistRace} superiority.`, `${arc.name} is unconvinced of ${arc.FSSupremacistRace} superiority.` - ] - ], - [ - "FSSubjugationist", - [ + ]; + case "FSSubjugationist": return [ `${arc.name} believes implicitly in the inferiority of ${arc.FSSubjugationistRace} people.`, `${arc.name} agrees strongly with the inferiority of ${arc.FSSubjugationistRace} people.`, `${arc.name} is sympathetic to the inferiority of ${arc.FSSubjugationistRace} people.`, `${arc.name} is unconvinced of the inferiority of ${arc.FSSubjugationistRace} people.` - ] - ], - [ - "FSRepopulationFocus", - [ + ]; + case "FSRepopulationFocus": return [ `${arc.name} believes implicitly that all women should be pregnant.`, `${arc.name} agrees strongly that all women should be pregnant.`, `${arc.name} is sympathetic to the idea that all women should be pregnant.`, `${arc.name} is unconvinced that all women should be pregnant.`, - ] - ], - [ - "FSRestart", - [ + ]; + case "FSRestart": return [ `${arc.name} believes implicitly that only the elite should reproduce.`, `${arc.name} agrees strongly that only the elite should reproduce.`, `${arc.name} is sympathetic to the idea only the elite should reproduce.`, `${arc.name} is unconvinced that only the elite should reproduce.` - ] - ], - [ - "FSIntellectualDependency", - [ + ]; + case "FSIntellectualDependency": return [ `${arc.name} believes implicitly that all slaves should be mentally dependant on their owner.`, `${arc.name} agrees strongly that all slaves should be bimbos.`, `${arc.name} is sympathetic to the idea that slaves should be dumb and horny.`, `${arc.name} is unconvinced that all slaves should be morons.` - ] - ], - [ - "FSSlaveProfessionalism", - [ + ]; + case "FSSlaveProfessionalism": return [ `${arc.name} believes implicitly that slaves should be masters of the sexual arts.`, `${arc.name} agrees strongly with slavery as a profession.`, `${arc.name} is sympathetic to the notion of slavery as a profession.`, `${arc.name} is unconvinced that slaves should be highly intelligent.` - ] - ], - [ - "FSGenderRadicalist", - [ + ]; + case "FSGenderRadicalist": return [ `${arc.name} believes implicitly in the need to redefine gender around power.`, `${arc.name} agrees strongly with the need to redefine gender around power.`, `${arc.name} is sympathetic to the need to redefine gender around power.`, `${arc.name} is unconvinced of the need to redefine gender around power.` - ] - ], - [ - "FSGenderFundamentalist", - [ + ]; + case "FSGenderFundamentalist": return [ `${arc.name} believes implicitly in the need to preserve traditional gender roles.`, `${arc.name} agrees strongly with the need to preserve traditional gender roles.`, `${arc.name} is sympathetic to the need to preserve traditional gender roles.`, `${arc.name} is unconvinced of the need to preserve traditional gender roles.` - ] - ], - [ - "FSPaternalist", - [ + ]; + case "FSPaternalist": return [ `${arc.name} believes implicitly in the vision of a well-bred race of slaves.`, `${arc.name} agrees strongly with the vision of a well-bred race of slaves.`, `${arc.name} is sympathetic to the vision of a well-bred race of slaves.`, `${arc.name} is unconvinced of the vision of a well-bred race of slaves.` - ] - ], - [ - "FSDegradationist", - [ + ]; + case "FSDegradationist": return [ `${arc.name} believes implicitly that slaves are not human and should be thoroughly degraded.`, `${arc.name} agrees strongly with the idea that slaves are not human and should be thoroughly degraded.`, `${arc.name} is sympathetic to the proposition that slaves are not human and should be thoroughly degraded.`, `${arc.name} is unconvinced that slaves are not human and should be thoroughly degraded.` - ] - ], - [ - "FSBodyPurist", - [ + ]; + case "FSBodyPurist": return [ `${arc.name} believes implicitly in the unattractive nature of implants.`, `${arc.name} agrees strongly with the unattractive nature of implants.`, `${arc.name} is sympathetic to the unattractive nature of implants.`, `${arc.name} is unconvinced of the unattractive nature of implants.` - ] - ], - [ - "FSTransformationFetishist", - [ + ]; + case "FSTransformationFetishist": return [ `${arc.name} passionately fetishizes implants.`, `${arc.name} strongly fetishizes implants.`, `${arc.name} fetishizes implants.`, `${arc.name} is beginning to fetishize implants.` - ] - ], - [ - "FSMaturityPreferentialist", - [ + ]; + case "FSMaturityPreferentialist": return [ `${arc.name} is passionately enthusiastic for older ladies.`, `${arc.name} is very enthusiastic for older ladies.`, `${arc.name} is enthusiastic for older ladies.`, `${arc.name} is beginning to be enthusiastic for older ladies.` - ] - ], - [ - "FSYouthPreferentialist", - [ + ]; + case "FSYouthPreferentialist": return [ `${arc.name} is passionately enthusiastic for young women.`, `${arc.name} is very enthusiastic for young women.`, `${arc.name} is enthusiastic for young women.`, `${arc.name} is beginning to be enthusiastic for young women.` - ] - ], - [ - "FSPetiteAdmiration", - [ + ]; + case "FSPetiteAdmiration": return [ `${arc.name} is passionately enthusiastic for short slaves.`, `${arc.name} is very enthusiastic for short slaves.`, `${arc.name} is enthusiastic for short slaves.`, `${arc.name} is beginning to be enthusiastic for short slaves.` - ] - ], - [ - "FSStatuesqueGlorification", - [ + ]; + case "FSStatuesqueGlorification": return [ `${arc.name} believes implicitly that the tall are superior.`, `${arc.name} agrees strongly with the idea that the tall are superior.`, `${arc.name} is sympathetic to the idea that the tall are superior.`, `${arc.name} is unconvinced that the tall are superior.` - ] - ], - [ - "FSSlimnessEnthusiast", - [ + ]; + case "FSSlimnessEnthusiast": return [ `${arc.name} is passionately enthusiastic about slim slaves with girlish figures.`, `${arc.name} is very enthusiastic about slim slaves with girlish figures.`, `${arc.name} is enthusiastic about slim slaves with girlish figures.`, `${arc.name} is beginning to be enthusiastic about slim slaves with girlish figures.` - ] - ], - [ - "FSAssetExpansionist", - [ + ]; + case "FSAssetExpansionist": return [ `${arc.name} believes implicitly that all tits and asses should be bigger.`, `${arc.name} agrees strongly with the idea that all tits and asses should be bigger.`, `${arc.name} is sympathetic to the idea that all tits and asses should be bigger.`, `${arc.name} is unconvinced that all tits and asses should be bigger.` - ] - ], - [ - "FSPastoralist", - [ + ]; + case "FSPastoralist": return [ `${arc.name} believes implicitly that slaves should be milked.`, `${arc.name} agrees strongly with the idea that slaves should be milked.`, `${arc.name} is sympathetic to the idea that slaves should be milked.`, `${arc.name} is unconvinced that slaves should be milked.` - ] - ], - [ - "FSPhysicalIdealist", - [ + ]; + case "FSPhysicalIdealist": return [ `${arc.name} believes implicitly that all slaves should be tall and strong.`, `${arc.name} agrees strongly with the idea that all slaves should be tall and strong.`, `${arc.name} is sympathetic to the idea that all slaves should be tall and strong.`, `${arc.name} is unconvinced that all slaves should be tall and strong.` - ] - ], - [ - "FSHedonisticDecadence", - [ + ]; + case "FSHedonisticDecadence": return [ `${arc.name} believes implicitly that all slaves should be soft and laid-back.`, `${arc.name} agrees strongly with the idea that all slaves should be soft and laid-back.`, `${arc.name} is sympathetic to the idea that all slaves should be soft and laid-back.`, `${arc.name} is unconvinced that all slaves should be soft and laid-back.` - ] - ], - [ - "FSChattelReligionist", - [ + ]; + case "FSChattelReligionist": return [ `${arc.name} believes implicitly in a version of religion that emphasizes slaveholding traditions.`, `${arc.name} agrees strongly with a version of religion that emphasizes slaveholding traditions.`, `${arc.name} is sympathetic to a version of religion that emphasizes slaveholding traditions.`, `${arc.name} is unconvinced of a version of religion that emphasizes slaveholding traditions.` - - ] - ], - [ - "FSNull", - [ + ]; + case "FSNull": return [ `${arc.name} is committed to affording its citizens absolute cultural freedom.`, `${arc.name} is committed to affording its citizens great cultural freedom.`, `${arc.name} is committed to affording its citizens considerable cultural freedom.`, `${arc.name} is committed to affording its citizens basic cultural freedom.` - ] - ], - [ - "FSRomanRevivalist", - [ + ]; + case "FSRomanRevivalist": return [ `${arc.name} believes implicitly that it is the new Rome.`, `${arc.name} agrees strongly with your project to build the new Rome.`, `${arc.name} is sympathetic to your project to build the new Rome.`, `${arc.name} is unconvinced of the wisdom of your project to build the new Rome.` - ] - ], - [ - "FSNeoImperialist", - [ + ]; + case "FSNeoImperialist": return [ `${arc.name} believes implicitly that your arcology is truly a new Imperial Society.`, `${arc.name} agrees strongly with your project to build a new Imperial Society.`, `${arc.name} is sympathetic to your project to build a new Imperial Society.`, `${arc.name} is unconvinced of the wisdom of your project to build a new Imperial Society.` - ] - ], - [ - "FSAntebellumRevivalist", - [ + ]; + case "FSAntebellumRevivalist": return [ `${arc.name} believes implicitly that your arcology is truly a new Antebellum South.`, `${arc.name} agrees strongly with your project to build a new Antebellum South.`, `${arc.name} is sympathetic to your project to build a new Antebellum South.`, `${arc.name} is unconvinced of the wisdom of your project to build a new Antebellum South.` - ] - ], - [ - "FSAztecRevivalist", - [ + ]; + case "FSAztecRevivalist": return [ `${arc.name} believes implicitly that it is the new Aztec Empire.`, `${arc.name} agrees strongly with your project to build the new Aztec Empire.`, `${arc.name} is sympathetic to your project to build the new Aztec Empire.`, `${arc.name} is unconvinced of the wisdom of your project to build the new Aztec Empire.` - ] - ], - [ - "FSEgyptianRevivalist", - [ + ]; + case "FSEgyptianRevivalist": return [ `${arc.name} believes implicitly that it is the land of the Pharaohs, reborn.`, `${arc.name} agrees strongly with your project to build a new land of the Pharaohs.`, `${arc.name} is sympathetic to your project to build a new land of the Pharaohs.`, `${arc.name} is unconvinced of the wisdom of your project to build a new land of the Pharaohs.` - ] - ], - [ - "FSEdoRevivalist", - [ + ]; + case "FSEdoRevivalist": return [ `${arc.name} believes implicitly that it is the land of the Shogun, reborn.`, `${arc.name} agrees strongly with your project to build a new Edo Japan.`, `${arc.name} is sympathetic to your project to build a new Edo Japan.`, `${arc.name} is unconvinced of the wisdom of your project to build a new Edo Japan.` - ] - ], - [ - "FSArabianRevivalist", - [ + ]; + case "FSArabianRevivalist": return [ `${arc.name} believes implicitly that it is ancient Baghdad reborn.`, `${arc.name} agrees strongly with your project to build a new Sultanate.`, `${arc.name} is sympathetic to your project to build a new Sultanate.`, `${arc.name} is unconvinced of the wisdom of your project to build a new Sultanate.` - ] - ], - [ - "FSChineseRevivalist", - [ + ]; + case "FSChineseRevivalist": return [ `${arc.name} believes implicitly that possesses the Mandate of Heaven.`, `${arc.name} agrees strongly with your pursuit of the Mandate of Heaven.`, `${arc.name} is sympathetic to your pursuit of the Mandate of Heaven.`, `${arc.name} is unconvinced of the wisdom of your pursuit of the Mandate of Heaven.` - ] - ], - ]); - if (arc[FS] !== "unset") { + ]; + } + }; + + if (isActive(FS, arc)) { if (arc[FS] >= V.FSLockinLevel) { - return arcSupportMap.get(FS)[0]; + return arcSupportTexts(FS, arc)[0]; } else if (arc[FS] >= V.FSLockinLevel * 0.6) { - return arcSupportMap.get(FS)[1]; + return arcSupportTexts(FS, arc)[1]; } else if (arc[FS] >= V.FSLockinLevel * 0.3) { - return arcSupportMap.get(FS)[2]; + return arcSupportTexts(FS, arc)[2]; } else { - return arcSupportMap.get(FS)[3]; + return arcSupportTexts(FS, arc)[3]; } } } @@ -829,16 +736,72 @@ globalThis.FutureSocieties = (function() { * @returns {boolean} */ function researchAvailable(fs, arcology) { - return (arcology || V.arcologies[0])[`FS${fs}Research`] === 1; + return (arcology ?? V.arcologies[0])[`FS${fs}Research`] === 1; } /** - * Checks if the given FS active (i.e. not "unset") + * Checks if the given FS active (i.e. not null) * @param {FC.FutureSociety} fs * @param {FC.ArcologyState} [arcology] Arcology to test, defaults to the PC's arcology * @returns {boolean} */ function isActive(fs, arcology) { - return (arcology || V.arcologies[0])[fs] !== "unset"; + return (arcology ?? V.arcologies[0])[fs] !== null; + } + + /** + * Tests if the given FS law is active (> 0) and optionally equals to the given value. + * For the law to be active, the respective fs policy needs to be active as well. + * @template {FC.FutureSociety} FS + * @param {FS} fs + * @param {FC.FutureSocietyIdMap[FS]['policy']} law + * @param {number} [value] + * @param {FC.ArcologyState} [arcology] Arcology to test, defaults to the PC's arcology + * @returns {boolean} + */ + function policyActive(fs, law, value, arcology){ + const arc = arcology ?? V.arcologies[0]; + return arc[fs] !== null && (value ? arc[`${fs}${law}`] === value : arc[`${fs}${law}`] > 0); + } + + /** + * Change future society value bt the given amount, if the society is active + * @param {FC.FutureSociety} fs + * @param {number} amount + * @param {FC.ArcologyState} [arcology] Arcology to test, defaults to the PC's arcology + * @returns {number|null} modified society value + */ + function advance(fs, amount, arcology) { + const arc = arcology ?? V.arcologies[0]; + if (!FutureSocieties.isActive(fs, arc)) { return null; } + return arc[fs] += amount; + } + + /** + * Returns numeric value for one of the active FS policies pair, or null when both are inactive + * @param {FC.FSHumanDevelopmentVector} vector the vector to test + * @param {FC.ArcologyState} [arcology] Arcology to test, defaults to the PC's arcology + * @returns {number|null} The number is positive or negative according to comments for FSHumanDevelopmentVector + */ + function humanVector(vector, arcology) { + const arc = arcology ?? V.arcologies[0]; + /** + * @param {FC.FSPolicyValue} positiveFS + * @param {FC.FSPolicyValue} negativeFS + * @returns {FC.FSPolicyValue} + */ + const select = (positiveFS, negativeFS) => positiveFS !== null ? positiveFS : (negativeFS !== null ? -negativeFS : null); + + switch (vector) { + case FSHumanVector.AGE: return select(arc.FSMaturityPreferentialist, arc.FSYouthPreferentialist); + case FSHumanVector.HEIGHT: return select(arc.FSStatuesqueGlorification, arc.FSPetiteAdmiration); + case FSHumanVector.WEIGHT: return select(arc.FSHedonisticDecadence, arc.FSPhysicalIdealist); + case FSHumanVector.MODIFICATIONS: return select(arc.FSTransformationFetishist, arc.FSBodyPurist); + case FSHumanVector.ASSETS: return select(arc.FSAssetExpansionist, arc.FSSlimnessEnthusiast); + case FSHumanVector.INTELLIGENCE: return select(arc.FSSlaveProfessionalism, arc.FSIntellectualDependency); + case FSHumanVector.GENDER: return select(arc.FSGenderRadicalist, arc.FSGenderFundamentalist); + case FSHumanVector.BREEDING: return select(arc.FSRepopulationFocus, arc.FSRestart); + case FSHumanVector.LIFE_QUALITY: return select(arc.FSPaternalist, arc.FSDegradationist); + } } })(); diff --git a/src/gui/Encyclopedia/encyclopediaFutureSocities.js b/src/gui/Encyclopedia/encyclopediaFutureSocities.js index 9e05c32e7480050efb92aa4a85524d6625f5de2d..02aedca990135a2f7c031c86bb7e2eb16bc5e158 100644 --- a/src/gui/Encyclopedia/encyclopediaFutureSocities.js +++ b/src/gui/Encyclopedia/encyclopediaFutureSocities.js @@ -271,7 +271,6 @@ App.Encyclopedia.addArticle("Chattel Religionism", function() { App.Encyclopedia.addArticle("Multiculturalism", function() { const t = new DocumentFragment(); App.Events.addNode(t, [App.UI.DOM.makeElement("span", "Multiculturalism", ["bold"]), - "is a future society model which approves of", "is a future society model which advances differently than other models: it is improved by the investment of more future society model slots, which can be withdrawn individually if desired.", "No other advancement occurs and all benefits at each level are available instantly."], "div"); App.Events.addNode(t, ["Each week provides free", diff --git a/src/gui/options/options.js b/src/gui/options/options.js index 0dbac803f6079c1d3523d07d9b74c8d21e13c6b8..25c85674de2035f64eeceb455297bc76d10705e6 100644 --- a/src/gui/options/options.js +++ b/src/gui/options/options.js @@ -1119,6 +1119,28 @@ App.Intro.contentAndFlavor = function(isIntro) { return el; }; +/** + * @param {InstanceType<App.UI.OptionsGroup>} options + */ +App.UI.aiPromptingOptions = function(options) { + options.addOption("AI style prompting", "aiStyle") + .addValueList([ + ["Photorealistic", 1], + ["Anime/Hentai", 2], + ["Custom", 0] + ]); + if (V.aiStyle === 0) { + options.addOption("AI custom style positive prompt", "aiCustomStylePos").showTextBox({large: true, forceString: true}) + .addComment("Include desired LoRA triggers (<code><lora:LowRA:0.5></code>) and general style prompts relevant to your chosen model ('<code>hand drawn, dark theme, black background</code>'), but no slave-specific prompts"); + options.addOption("AI custom style negative prompt", "aiCustomStyleNeg").showTextBox({large: true, forceString: true}) + .addComment("Include undesired general style prompts relevant to your chosen model ('<code>greyscale, photography, forest, low camera angle</code>'), but no slave-specific prompts"); + } else if (V.aiStyle === 1) { + options.addComment("For best results, use an appropriately-trained photorealistic base model, such as MajicMIX or Life Like Diffusion."); + } else if (V.aiStyle === 2) { + options.addComment("For best results, use an appropriately-trained hentai base model, such as Hassaku."); + } +}; + App.UI.artOptions = function() { const el = new DocumentFragment(); let options = new App.UI.OptionsGroup(); @@ -1236,22 +1258,7 @@ App.UI.artOptions = function() { options.addComment("This is highly experimental. Please follow the setup instructions below."); options.addCustom(App.UI.DOM.stableDiffusionInstallationGuide("Stable Diffusion Installation Guide")); options.addOption("API URL", "aiApiUrl").showTextBox().addComment("The URL of the Automatic 1111 Stable Diffusion API."); - options.addOption("AI style prompting", "aiStyle") - .addValueList([ - ["Photorealistic", 1], - ["Anime/Hentai", 2], - ["Custom", 0] - ]); - if (V.aiStyle === 0) { - options.addOption("AI custom style positive prompt", "aiCustomStylePos").showTextBox({large: true, forceString: true}) - .addComment("Include desired LoRA triggers (<code><lora:LowRA:0.5></code>) and general style prompts relevant to your chosen model ('<code>hand drawn, dark theme, black background</code>'), but no slave-specific prompts"); - options.addOption("AI custom style negative prompt", "aiCustomStyleNeg").showTextBox({large: true, forceString: true}) - .addComment("Include undesired general style prompts relevant to your chosen model ('<code>greyscale, photography, forest, low camera angle</code>'), but no slave-specific prompts"); - } else if (V.aiStyle === 1) { - options.addComment("For best results, use an appropriately-trained photorealistic base model, such as MajicMIX or Life Like Diffusion."); - } else if (V.aiStyle === 2) { - options.addComment("For best results, use an appropriately-trained hentai base model, such as Hassaku."); - } + App.UI.aiPromptingOptions(options); options.addOption("Sampling Method", "aiSamplingMethod").showTextBox() .addComment(`The sampling method used by AI. You can query ${V.aiApiUrl}/sdapi/v1/samplers to see the list of available samplers.`); options.addOption("CFG Scale", "aiCfgScale").showTextBox() @@ -1271,17 +1278,50 @@ App.UI.artOptions = function() { options.addOption("Upscaling method", "aiUpscaler").showTextBox() .addComment(`The method used for upscaling the image. You can query ${V.aiApiUrl}/sdapi/v1/upscalers to see the list of available upscalers.`); } + options.addCustomOption("Cache database management") + .addButton("Purge all images", async () => { + await App.Art.GenAI.imageDB.clear(); + }) + .addButton("Regenerate images for all slaves", () => { + // run DURING the passage change, to avoid both the interrupt and reloading twice + const oldHandler = App.Utils.PassageSwitchHandler.get(); + App.Utils.PassageSwitchHandler.set(() => { + if (oldHandler) { + oldHandler(); + } + const lockID = LoadScreen.lock(); + const waitMessage = $(`<div class="endweek-titleblock"><div class="endweek-maintitle">Regenerating images for ${V.slaves.length} slaves...</div></div>`); + $("#init-screen").append(waitMessage); + const generator = new App.Art.GenAI.StableDiffusionClient(); + Promise + .all(V.slaves.map(s => generator.updateSlave(s))) + .finally(() => { + LoadScreen.unlock(lockID); + waitMessage.remove(); + }); + }); + }) + .addComment(`Current cache size: <span id="cacheCount">Please wait...</span> images. The cache database is shared between games.`); + App.Art.GenAI.imageDB.count().then((result) => { + $("#cacheCount").empty().append(result.toString()); + }); } - - options.addOption("PA avatar art is", "seeAvatar") + } else { // custom images only + options.addOption("Show suggested AI prompts in Customize tab", "aiCustomImagePrompts") .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); + if (V.aiCustomImagePrompts) { + App.UI.aiPromptingOptions(options); + } + } - options.addOption("Slave images in lists are", "seeSummaryImages") - .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); + options.addOption("PA avatar art is", "seeAvatar") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); - options.addOption("Slave images in the weekly report are", "seeReportImages") - .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); - } + options.addOption("Slave images in lists are", "seeSummaryImages") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); + + options.addOption("Slave images in the weekly report are", "seeReportImages") + .addValue("Enabled", 1).on().addValue("Disabled", 0).off(); } el.append(options.render()); diff --git a/src/interaction/policies/changeLanguage.js b/src/interaction/policies/changeLanguage.js index c40db04d02bf4f8e9f8fff709b6ca1f7c0556391..1c70d6ed7d646f57945d836378ddd735f0617b62 100644 --- a/src/interaction/policies/changeLanguage.js +++ b/src/interaction/policies/changeLanguage.js @@ -29,7 +29,7 @@ App.Arcology.changeLanguage = function() { } for (const [FSname, FSprops] of Object.entries(App.Data.FutureSociety.records)) { - if (FSprops.language && V.arcologies[0][FSname] !== "unset") { + if (FSprops.language && FutureSocieties.isActive(FSname)) { revivalist = {language: FSprops.language, name: FSprops.noun}; languageList.add(FSprops.language); } diff --git a/src/interaction/sellSlave.js b/src/interaction/sellSlave.js index 312c848dc19c804a625fc1853b2040a4b28e6968..819db07bb0de65ba32f0e033f44e44984930260f 100644 --- a/src/interaction/sellSlave.js +++ b/src/interaction/sellSlave.js @@ -59,7 +59,7 @@ App.Interact.sellSlave = function(slave) { cost *= 1.5; } - if (slave.breedingMark === 1 && V.propOutcome === 1 && V.arcologies[0].FSRestart !== "unset") { + if (slave.breedingMark === 1 && V.propOutcome === 1 && FutureSocieties.isActive('FSRestart')) { t.push(`Since you are selling a breeding slave, ${he} will be sent to auction before other members of the Societal Elite.`); } else if (slave.geneticQuirks.progeria === 2 && slave.physicalAge >= 45) { t.push(`With ${his} advanced progeria, it would be a waste of time to have ${him} appraised. You have to cast a wide net to find a buyer, and the meager offering presented may be the most you'll get for ${him}.`); @@ -420,7 +420,7 @@ App.Interact.sellSlave = function(slave) { t.push(`${He} has a behavioral flaw, which is a minor negative.`); } } - if (slave.sexualFlaw === "breeder" && V.arcologies[0].FSRepopulationFocus !== "unset") { + if (slave.sexualFlaw === "breeder" && FutureSocieties.isActive('FSRepopulationFocus')) { t.push(`${He} is obsessed with breeding, which will make ${him} very popular in your arcology.`); } else if (slave.sexualFlaw !== "none") { if (slave.behavioralFlaw === "none") { @@ -573,7 +573,7 @@ App.Interact.sellSlave = function(slave) { } } - if (slave.pubertyXY === 0 && slave.physicalAge >= V.potencyAge && V.arcologies[0].FSGenderRadicalist === "unset" && slave.balls > 0) { + if (slave.pubertyXY === 0 && slave.physicalAge >= V.potencyAge && !FutureSocieties.isActive('FSGenderRadicalist') && slave.balls > 0) { t.push(`${He} never went through male puberty, that's a plus.`); } @@ -847,7 +847,7 @@ App.Interact.sellSlave = function(slave) { /** @type {Map<string, slaveBuyerData>}*/ let buyers; - if (slave.breedingMark === 1 && V.propOutcome === 1 && V.arcologies[0].FSRestart !== "unset") { + if (slave.breedingMark === 1 && V.propOutcome === 1 && FutureSocieties.isActive('FSRestart')) { buyers = new Map([[ "elite auction", { @@ -1865,7 +1865,7 @@ App.Interact.sellSlave = function(slave) { ["teaching trainer", { cost: 1.1, offerDesc: `from a slave trainer that specializes in educating slaves and reselling them at a profit.`, - get requirements() { return (V.arcologies[0].FSDegradationist === "unset" && slave.intelligenceImplant < 15); }, + get requirements() { return (!FutureSocieties.isActive('FSDegradationist') && slave.intelligenceImplant < 15); }, percentOdds: 60, get completeSale() { const r = []; @@ -1886,7 +1886,7 @@ App.Interact.sellSlave = function(slave) { ["implanting trainer", { cost: 1.1, offerDesc: `from a slave trainer that specializes in filling slaves with implants before resale.`, - get requirements() { return (V.arcologies[0].FSBodyPurist === "unset" && slave.boobsImplant === 0); }, + get requirements() { return (!FutureSocieties.isActive('FSBodyPurist') && slave.boobsImplant === 0); }, percentOdds: 60, get completeSale() { const r = []; @@ -1907,7 +1907,7 @@ App.Interact.sellSlave = function(slave) { ["purifying trainer", { cost: 1.1, offerDesc: `from a slave trainer that specializes in fixing slaves who have been surgically ruined with overimplantation.`, - get requirements() { return (V.arcologies[0].FSTransformationFetishist === "unset" && slave.boobsImplant > 0); }, + get requirements() { return (!FutureSocieties.isActive('FSTransformationFetishist') && slave.boobsImplant > 0); }, percentOdds: 60, get completeSale() { const r = []; @@ -1928,7 +1928,7 @@ App.Interact.sellSlave = function(slave) { ["slimming trainer", { cost: 1.1, offerDesc: `from a slave trainer that specializes in slimming down fat slaves to appeal to buyers who prefer slim ${girl}s.`, - get requirements() { return (V.arcologies[0].FSAssetExpansionist === "unset" && slave.boobs > 600 && slave.butt > 3 && slave.weight > 10); }, + get requirements() { return (!FutureSocieties.isActive('FSAssetExpansionist') && slave.boobs > 600 && slave.butt > 3 && slave.weight > 10); }, percentOdds: 60, get completeSale() { const r = []; @@ -1949,7 +1949,7 @@ App.Interact.sellSlave = function(slave) { ["broadening trainer", { cost: 1.1, offerDesc: `from a slave trainer that specializes in improving slaves with disappointing assets; they prefer pharmaceutical means but are not averse to surgical intervention if necessary.`, - get requirements() { return (V.arcologies[0].FSSlimnessEnthusiast === "unset" && slave.boobs < 600 && slave.butt < 3 && slave.weight < -10); }, + get requirements() { return (!FutureSocieties.isActive('FSSlimnessEnthusiast') && slave.boobs < 600 && slave.butt < 3 && slave.weight < -10); }, percentOdds: 60, get completeSale() { const r = []; @@ -1991,7 +1991,7 @@ App.Interact.sellSlave = function(slave) { ["clipping trainer", { cost: 1.1, offerDesc: `from a slave trainer that specializes in feminizing imperfect shemales; an orchiectomy is invariably their first step.`, - get requirements() { return (V.arcologies[0].FSGenderFundamentalist === "unset" && slave.balls > 0 && slave.boobs < 500); }, + get requirements() { return (!FutureSocieties.isActive('FSGenderFundamentalist') && slave.balls > 0 && slave.boobs < 500); }, percentOdds: 60, get completeSale() { const r = []; @@ -2012,7 +2012,7 @@ App.Interact.sellSlave = function(slave) { ["reassignment trainer", { cost: 1.1, offerDesc: `from a slave trainer that specializes in creating proper slave women from raw material that falls short of that ideal but has potential anyway.`, - get requirements() { return (V.arcologies[0].FSGenderRadicalist === "unset" && slave.dick > 0 && cost > 10000); }, + get requirements() { return (!FutureSocieties.isActive('FSGenderRadicalist') && slave.dick > 0 && cost > 10000); }, percentOdds: 60, get completeSale() { const r = []; @@ -2205,7 +2205,7 @@ App.Interact.sellSlave = function(slave) { ["stuffer chef", { cost: 1.1, offerDesc: `from a chef that likes stuffing more than just turkeys.`, - get requirements() { return (V.arcologies[0].FSSlimnessEnthusiast !== "unset" && slave.weight < 10 && slave.muscles < 10 && slave.belly === 0 && slave.preg < 1); }, + get requirements() { return (FutureSocieties.isActive('FSSlimnessEnthusiast') && slave.weight < 10 && slave.muscles < 10 && slave.belly === 0 && slave.preg < 1); }, percentOdds: 80, get completeSale() { const r = []; @@ -2443,7 +2443,7 @@ App.Interact.sellSlave = function(slave) { ["cheap brothel", { cost: 1.1, offerDesc: `from a cheap brothel chain that operates a franchise on a lower level of the arcology.`, - get requirements() { return (V.arcologies[0].FSPaternalist === "unset" && cost < 10000); }, + get requirements() { return (!FutureSocieties.isActive('FSPaternalist') && cost < 10000); }, percentOdds: 50, get completeSale() { const r = []; @@ -2464,7 +2464,7 @@ App.Interact.sellSlave = function(slave) { ["factory farm", { cost: 1.1, offerDesc: `from a factory farm notorious for extracting every drop of value from its slaves' bodies.`, - get requirements() { return (V.arcologies[0].FSPaternalist === "unset" && cost < 20000 && slave.boobsImplant === 0); }, + get requirements() { return (!FutureSocieties.isActive('FSPaternalist') && cost < 20000 && slave.boobsImplant === 0); }, percentOdds: 50, get completeSale() { const r = []; @@ -2492,7 +2492,7 @@ App.Interact.sellSlave = function(slave) { ["arcade", { cost: 1.1, offerDesc: `from a sex arcade that maintains good service quality by rapidly cycling new slaves through their facilities.`, - get requirements() { return (V.arcologies[0].FSPaternalist === "unset" && cost < 5000); }, + get requirements() { return (!FutureSocieties.isActive('FSPaternalist') && cost < 5000); }, percentOdds: 50, get completeSale() { const r = []; @@ -2513,7 +2513,7 @@ App.Interact.sellSlave = function(slave) { ["volume breeder", { cost: 1.1, offerDesc: `from a high-volume breeding operation interested in ${him} mostly for ${his} healthy, functional womb.`, - get requirements() { return (V.seePreg !== 0 && V.arcologies[0].FSPaternalist === "unset" && cost < 10000 && slave.health.condition > 40 && slave.ovaries === 1 && isFertile(slave)); }, + get requirements() { return (V.seePreg !== 0 && FutureSocieties.isActive('FSPaternalist') && cost < 10000 && slave.health.condition > 40 && slave.ovaries === 1 && isFertile(slave)); }, percentOdds: 50, get completeSale() { const r = []; @@ -2534,7 +2534,7 @@ App.Interact.sellSlave = function(slave) { ["nice brothel", { cost: 1.1, offerDesc: `from a group of partners that run a handsome brothel off the promenade.`, - get requirements() { return (V.arcologies[0].FSDegradationist === "unset" && cost > 20000); }, + get requirements() { return (!FutureSocieties.isActive('FSDegradationist') && cost > 20000); }, percentOdds: 50, get completeSale() { const r = []; @@ -2555,7 +2555,7 @@ App.Interact.sellSlave = function(slave) { ["free range", { cost: 0.8, offerDesc: `from a free-range farm that pays for the high costs of high quality livestock care by aggressively marketing its cruelty-free products.`, - get requirements() { return (V.arcologies[0].FSDegradationist === "unset" && cost < 50000 && slave.boobsImplant === 0 && slave.health.condition > 40); }, + get requirements() { return (!FutureSocieties.isActive('FSDegradationist') && cost < 50000 && slave.boobsImplant === 0 && slave.health.condition > 40); }, percentOdds: 50, get completeSale() { const r = []; diff --git a/src/interaction/siCustom.js b/src/interaction/siCustom.js index 1dae4e72c53d249c514b8cb04b78c47225d40820..ac0fd2b8469eb77fba0615bcdc27746521c5975d 100644 --- a/src/interaction/siCustom.js +++ b/src/interaction/siCustom.js @@ -196,17 +196,17 @@ App.UI.SlaveInteract.custom = function(slave, refresh) { )); } - if (V.arcologies[0].FSPastoralist !== "unset") { + if (FutureSocieties.isActive('FSPastoralist')) { if (slave.lactation > 0) { linkArray.push(chooseThreeNames(`Choose a random cow name for ${him}`, App.Data.misc.cowSlaveNames)); } } - if (V.arcologies[0].FSIntellectualDependency !== "unset") { + if (FutureSocieties.isActive('FSIntellectualDependency')) { if (slave.intelligence + slave.intelligenceImplant < -10) { linkArray.push(chooseThreeNames(`Give ${him} a random stripper given name`, App.Data.misc.bimboSlaveNames)); } } - if (V.arcologies[0].FSChattelReligionist !== "unset") { + if (FutureSocieties.isActive('FSChattelReligionist')) { linkArray.push(chooseThreeNames(`Give ${him} a random devotional given name`, App.Data.misc.chattelReligionistSlaveNames)); } if (slave.race === "catgirl") { @@ -365,7 +365,7 @@ App.UI.SlaveInteract.custom = function(slave, refresh) { ); } } - if (V.arcologies[0].FSRomanRevivalist !== "unset") { + if (FutureSocieties.isActive('FSRomanRevivalist')) { linkArray.push( App.UI.DOM.link( `Give ${him} a random full Roman name`, @@ -376,7 +376,7 @@ App.UI.SlaveInteract.custom = function(slave, refresh) { } ) ); - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSAztecRevivalist')) { linkArray.push( App.UI.DOM.link( `Give ${him} a random full Aztec name`, @@ -387,7 +387,7 @@ App.UI.SlaveInteract.custom = function(slave, refresh) { } ) ); - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSEgyptianRevivalist')) { linkArray.push( App.UI.DOM.link( `Give ${him} a random full ancient Egyptian name`, @@ -398,7 +398,7 @@ App.UI.SlaveInteract.custom = function(slave, refresh) { } ) ); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSEdoRevivalist')) { linkArray.push( App.UI.DOM.link( `Give ${him} a random full feudal Japanese name`, @@ -409,7 +409,7 @@ App.UI.SlaveInteract.custom = function(slave, refresh) { } ) ); - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSChineseRevivalist')) { linkArray.push( App.UI.DOM.link( `Give ${him} a random full Ancient Chinese name`, @@ -420,7 +420,7 @@ App.UI.SlaveInteract.custom = function(slave, refresh) { } ) ); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSAntebellumRevivalist')) { linkArray.push( App.UI.DOM.link( `Give ${him} a random full old Southern name`, @@ -449,6 +449,9 @@ App.UI.SlaveInteract.custom = function(slave, refresh) { } function updateName(slave, {oldName: oldName, oldSurname: oldSurname}) { + let genepoolRec = V.genePool.find(s => s.ID === slave.ID); + genepoolRec.slaveName = slave.slaveName; + genepoolRec.slaveSurname = slave.slaveSurname; App.UI.SlaveInteract.rename(slave, {oldName: oldName, oldSurname: oldSurname}); refresh(); } @@ -708,8 +711,8 @@ App.UI.SlaveInteract.custom = function(slave, refresh) { )); } - // Debug information for AI art - if (V.imageChoice === 6 && V.debugMode === 1) { + // Debug information for AI art, or prompt suggestions for custom images + if ((V.imageChoice === 6 && V.debugMode === 1) || (V.seeCustomImagesOnly && V.aiCustomImagePrompts)) { frag.append(genAIPrompt()); } return frag; diff --git a/src/interaction/siPhysicalRegimen.js b/src/interaction/siPhysicalRegimen.js index d2e2a5e0154f046eaafa3be56dc548d59cd92be0..040d0dd8c9b0b303c8dee3513be77c3803645c1f 100644 --- a/src/interaction/siPhysicalRegimen.js +++ b/src/interaction/siPhysicalRegimen.js @@ -147,7 +147,7 @@ App.UI.SlaveInteract.physicalRegimen = function(slave, refresh) { // Fertility fertility.push({text: `Fertility`, updateSlave: {drugs: `fertility drugs`}}); - if (V.seeHyperPreg === 1 && slave.indentureRestrictions < 1 && V.superFertilityDrugs === 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) { + if (V.seeHyperPreg === 1 && slave.indentureRestrictions < 1 && V.superFertilityDrugs === 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || !FutureSocieties.isActive('FSRestart'))) { fertility.push({text: `Fertility+`, updateSlave: {drugs: `super fertility drugs`}}); } @@ -213,7 +213,7 @@ App.UI.SlaveInteract.physicalRegimen = function(slave, refresh) { } // Hormones - if (V.precociousPuberty === 1 && V.pubertyHormones === 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) { + if (V.precociousPuberty === 1 && V.pubertyHormones === 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || !FutureSocieties.isActive('FSRestart'))) { if ((slave.ovaries === 1 || slave.mpreg === 1) && slave.pubertyXX === 0) { hormones.push({text: `Female injections`, updateSlave: {drugs: `female hormone injections`}}); } @@ -488,7 +488,7 @@ App.UI.SlaveInteract.physicalRegimen = function(slave, refresh) { [], "csec" )); - } else if (slave.preg > 0 && slave.breedingMark === 1 && V.propOutcome === 1 && V.arcologies[0].FSRestart !== "unset" && V.eugenicsFullControl !== 1 && (slave.pregSource === -1 || slave.pregSource === -6)) { + } else if (slave.preg > 0 && slave.breedingMark === 1 && V.propOutcome === 1 && FutureSocieties.isActive('FSRestart') && V.eugenicsFullControl !== 1 && (slave.pregSource === -1 || slave.pregSource === -6)) { note += "You are forbidden from aborting an Elite child"; } else if (slave.preg > 0) { linkArray.push(App.UI.DOM.link( @@ -512,7 +512,7 @@ App.UI.SlaveInteract.physicalRegimen = function(slave, refresh) { slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || - V.arcologies[0].FSRestart === "unset" + !FutureSocieties.isActive('FSRestart') ) && slave.indentureRestrictions < 1 && slave.broodmother === 0 && @@ -786,7 +786,7 @@ App.UI.SlaveInteract.physicalRegimen = function(slave, refresh) { function breederEligibility() { const el = document.createElement("div"); - if (V.propOutcome === 1 && V.arcologies[0].FSRestart !== "unset") { + if (V.propOutcome === 1 && FutureSocieties.isActive('FSRestart')) { if (slave.breedingMark === 0 && slave.fuckdoll === 0 && slave.eggType === "human" && isFertile(slave) && slave.preg <= 0) { el.classList.add("choices"); el.append( diff --git a/src/interaction/siWardrobe.js b/src/interaction/siWardrobe.js index 8a1180cc3ab1a48a32beb722af656e2bb710feee..c53e388c5ea0820e24d423c40c820eed9e9148b6 100644 --- a/src/interaction/siWardrobe.js +++ b/src/interaction/siWardrobe.js @@ -702,7 +702,7 @@ App.UI.SlaveInteract.wardrobe = function(slave, contentRefresh) { const linkArray = []; for (const name of optionsArray) { const object = App.Data.chastity.get(name); - if (object && object.fs && object.fs.unlocks && V.arcologies[0][object.fs.unlocks] === "unset") { // Really simple requirements check here since FS is the only way to unlock chastity options + if (object && object.fs && object.fs.unlocks && FutureSocieties.isActive(object.fs.unlocks)) { // Really simple requirements check here since FS is the only way to unlock chastity options continue; } if (object.updateSlave.chastityPenis && slave.dick === 0) { diff --git a/src/interaction/siWork.js b/src/interaction/siWork.js index 55ce310c005fe9e7052b6126e65e8a5420fac7f6..48a03c0bf4db8c1cc1765efd8a61f630232bcf8a 100644 --- a/src/interaction/siWork.js +++ b/src/interaction/siWork.js @@ -690,7 +690,7 @@ App.UI.SlaveInteract.work = function(slave, refresh) { goto: `Aztec Slave Sacrifice Penance`, note: `This will gain you ${activeSlaveRepSacrifice} reputation`, });*/ - if (V.arcologies[0].FSPaternalist === "unset" && (slave.breedingMark === 0 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) { + if (!FutureSocieties.isActive('FSPaternalist') && (slave.breedingMark === 0 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || !FutureSocieties.isActive('FSRestart'))) { sexOptions.push({ text: `Sacrifice ${him} on the altar`, goto: `Aztec Slave Sacrifice Life`, diff --git a/src/interaction/universalRules.js b/src/interaction/universalRules.js index 5f06e810f149d7760c92d3cf0c05a2672c93caae..3e175d5e9bfb0e9d234d33312bdd634f842e1ebf 100644 --- a/src/interaction/universalRules.js +++ b/src/interaction/universalRules.js @@ -155,7 +155,7 @@ App.UI.universalRules = function() { if (V.arcologies[0].FSEdoRevivalist > 20) { option.addValue(`Japanese`, 5); } - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { option.addValue(`Degrading`, 6); } if (V.arcologies[0].FSPaternalist >= 20) { @@ -167,6 +167,9 @@ App.UI.universalRules = function() { if (V.arcologies[0].FSPastoralist >= 20) { option.addValue(`Pastoralist`, 9); } + if (V.arcologies[0].FSAntebellumRevivalist > 20) { + option.addValue('Antebellum', 10); + } } } frag.append(options.render()); diff --git a/src/js/DefaultRules.js b/src/js/DefaultRules.js index cf8dcff6e262a16fb487e59a5bcc7ecf3614c3ab..2266bf4ed6841144916e6c80a02030e8591afb05 100644 --- a/src/js/DefaultRules.js +++ b/src/js/DefaultRules.js @@ -476,21 +476,21 @@ globalThis.DefaultRules = function(slave) { break; case "long dildo": - if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && V.arcologies[0].FSRestart !== "unset") { + if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && FutureSocieties.isActive('FSRestart')) { message(`Breeding regulations forbid the use of cervix penetrating dildos on marked slaves, so the virgin ${slave.slaveName} has been given a standard length dildo for ${his} pussy.`, sourceRecord.virginAccessory); slave.vaginalAccessory = "dildo"; } break; case "long, large dildo": - if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && V.arcologies[0].FSRestart !== "unset") { + if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && FutureSocieties.isActive('FSRestart')) { message(`Breeding regulations forbid the use of cervix penetrating dildos on marked slaves, so the virgin ${slave.slaveName} has been given a standard length large dildo for ${his} pussy.`, sourceRecord.virginAccessory); slave.vaginalAccessory = "large dildo"; } break; case "long, huge dildo": - if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && V.arcologies[0].FSRestart !== "unset") { + if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && FutureSocieties.isActive('FSRestart')) { message(`Breeding regulations forbid the use of cervix penetrating dildos on marked slaves, so the virgin ${slave.slaveName} has been given a standard length huge dildo for ${his} pussy.`, sourceRecord.virginAccessory); slave.vaginalAccessory = "huge dildo"; } else { @@ -537,21 +537,21 @@ globalThis.DefaultRules = function(slave) { break; case "long dildo": - if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && V.arcologies[0].FSRestart !== "unset") { + if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && FutureSocieties.isActive('FSRestart')) { message(`Breeding regulations forbid the use of cervix penetrating dildos on marked slaves, so the virgin ${slave.slaveName} has been given a standard length dildo for ${his} pussy.`, sourceRecord.aVirginAccessory); slave.vaginalAccessory = "dildo"; } break; case "long, large dildo": - if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && V.arcologies[0].FSRestart !== "unset") { + if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && FutureSocieties.isActive('FSRestart')) { message(`Breeding regulations forbid the use of cervix penetrating dildos on marked slaves, so the virgin ${slave.slaveName} has been given a standard length large dildo for ${his} pussy.`, sourceRecord.aVirginAccessory); slave.vaginalAccessory = "large dildo"; } break; case "long, huge dildo": - if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && V.arcologies[0].FSRestart !== "unset") { + if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && FutureSocieties.isActive('FSRestart')) { message(`Breeding regulations forbid the use of cervix penetrating dildos on marked slaves, so the virgin ${slave.slaveName} has been given a standard length huge dildo for ${his} pussy.`, sourceRecord.aVirginAccessory); slave.vaginalAccessory = "huge dildo"; } else { @@ -598,21 +598,21 @@ globalThis.DefaultRules = function(slave) { } case "long dildo": - if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && V.arcologies[0].FSRestart !== "unset") { + if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && FutureSocieties.isActive('FSRestart')) { message(`Breeding regulations forbid the use of cervix penetrating dildos on marked slaves, so ${slave.slaveName} has been given a standard length dildo for ${his} pussy.`, sourceRecord.vaginalAccessory); slave.vaginalAccessory = "dildo"; } break; case "long, large dildo": - if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && V.arcologies[0].FSRestart !== "unset") { + if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && FutureSocieties.isActive('FSRestart')) { message(`Breeding regulations forbid the use of cervix penetrating dildos on marked slaves, so ${slave.slaveName} has been given a standard length large dildo for ${his} pussy.`, sourceRecord.vaginalAccessory); slave.vaginalAccessory = "large dildo"; } break; case "long, huge dildo": - if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && V.arcologies[0].FSRestart !== "unset") { + if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && FutureSocieties.isActive('FSRestart')) { message(`Breeding regulations forbid the use of cervix penetrating dildos on marked slaves, so ${slave.slaveName} has been given a standard length huge dildo for ${his} pussy.`, sourceRecord.vaginalAccessory); slave.vaginalAccessory = "huge dildo"; } else { @@ -854,21 +854,21 @@ globalThis.DefaultRules = function(slave) { break; case "long plug": - if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && V.arcologies[0].FSRestart !== "unset") { + if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && FutureSocieties.isActive('FSRestart')) { message(`Breeding regulations forbid the use of anal plugs that can damage a growing fetus on marked slaves, so the anal virgin ${slave.slaveName} has been given a standard length plug for ${his} anus.`, sourceRecord.aVirginButtplug); slave.buttplug = "plug"; } break; case "long, large plug": - if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && V.arcologies[0].FSRestart !== "unset") { + if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && FutureSocieties.isActive('FSRestart')) { message(`Breeding regulations forbid the use of anal plugs that can damage a growing fetus on marked slaves, so the anal virgin ${slave.slaveName} has been given a standard length large plug for ${his} anus.`, sourceRecord.aVirginButtplug); slave.buttplug = "large plug"; } break; case "long, huge plug": - if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && V.arcologies[0].FSRestart !== "unset") { + if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && FutureSocieties.isActive('FSRestart')) { message(`Breeding regulations forbid the use of anal plugs that can damage a growing fetus on marked slaves, so the anal virgin ${slave.slaveName} has been given a standard length huge plug for ${his} anus.`, sourceRecord.aVirginButtplug); slave.buttplug = "huge plug"; } else { @@ -915,21 +915,21 @@ globalThis.DefaultRules = function(slave) { break; case "long plug": - if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && V.arcologies[0].FSRestart !== "unset") { + if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && FutureSocieties.isActive('FSRestart')) { message(`Breeding regulations forbid the use of anal plugs that can damage a growing fetus on marked slaves, so ${slave.slaveName} has been given a standard length plug for ${his} anus.`, sourceRecord.buttplug); slave.buttplug = "plug"; } break; case "long, large plug": - if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && V.arcologies[0].FSRestart !== "unset") { + if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && FutureSocieties.isActive('FSRestart')) { message(`Breeding regulations forbid the use of anal plugs that can damage a growing fetus on marked slaves, so ${slave.slaveName} has been given a standard length large plug for ${his} anus.`, sourceRecord.buttplug); slave.buttplug = "large plug"; } break; case "long, huge plug": - if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && V.arcologies[0].FSRestart !== "unset") { + if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && FutureSocieties.isActive('FSRestart')) { message(`Breeding regulations forbid the use of anal plugs that can damage a growing fetus on marked slaves, so ${slave.slaveName} has been given a standard length huge plug for ${his} anus.`, sourceRecord.buttplug); slave.buttplug = "huge plug"; } else { @@ -1375,13 +1375,13 @@ globalThis.DefaultRules = function(slave) { break; case "female hormone injections": - if (!((slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset") && (slave.ovaries === 1 || slave.mpreg === 1) && slave.pubertyXX === 0)) { + if (!((slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || !FutureSocieties.isActive('FSRestart')) && (slave.ovaries === 1 || slave.mpreg === 1) && slave.pubertyXX === 0)) { flag = false; } break; case "male hormone injections": - if (!((slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset") && slave.balls > 0 && slave.pubertyXY === 0)) { + if (!((slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || !FutureSocieties.isActive('FSRestart')) && slave.balls > 0 && slave.pubertyXY === 0)) { flag = false; } break; @@ -1458,7 +1458,7 @@ globalThis.DefaultRules = function(slave) { break; case "super fertility drugs": - if ((V.seeHyperPreg !== 1 || V.superFertilityDrugs !== 1) || !(slave.indentureRestrictions < 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset"))) { + if ((V.seeHyperPreg !== 1 || V.superFertilityDrugs !== 1) || !(slave.indentureRestrictions < 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || !FutureSocieties.isActive('FSRestart')))) { flag = false; } break; @@ -1875,7 +1875,7 @@ globalThis.DefaultRules = function(slave) { * @param {FC.RA.RuleSetters} rule */ function ProcessPregnancyDrugs(slave, rule) { - if (slave.pregKnown === 1 && rule.pregSpeed !== null && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset") && slave.indentureRestrictions < 1 && slave.broodmother === 0) { + if (slave.pregKnown === 1 && rule.pregSpeed !== null && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || !FutureSocieties.isActive('FSRestart')) && slave.indentureRestrictions < 1 && slave.broodmother === 0) { if (rule.pregSpeed === "slow" && slave.preg < slave.pregData.normalBirth && slave.pregControl !== "slow gestation") { slave.pregControl = "slow gestation"; message(`${slave.slaveName} is pregnant, so ${he} has been put on the gestation slowing agents.`, sourceRecord.pregSpeed); diff --git a/src/js/SlaveState.js b/src/js/SlaveState.js index ec2d2a43d117d2f92982965b56e2c317ca076ec5..26532b92ffcdc63c8dfc72e65b7a083d876128c9 100644 --- a/src/js/SlaveState.js +++ b/src/js/SlaveState.js @@ -386,7 +386,7 @@ App.Entity.SlaveCustomAddonsState = class SlaveCustomAddonsState { * holds the ai image ID * * used if ai images are enabled - * @type {FC.Zeroable<number>} + * @type {number} */ this.aiImageId = null; } diff --git a/src/js/birth/birth.js b/src/js/birth/birth.js index 0b12fe62bb3abb97790ee3f14b6f685fc24b159d..69489a6c8118620f3a33351f2ca8ed29aeabf8ab 100644 --- a/src/js/birth/birth.js +++ b/src/js/birth/birth.js @@ -1489,7 +1489,7 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false, artRen } App.Events.addParagraph(el, r); /* ------ Social reactions--------------- */ - if (V.arcologies[0].FSRestart !== "unset") { + if (FutureSocieties.isActive('FSRestart')) { r = []; if (slave.breedingMark === 1 && V.propOutcome === 1 && (slave.pregSource === -1 || slave.pregSource === -6)) { r.push(`The ${societalElite}`); @@ -1598,7 +1598,7 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false, artRen r = []; choices = document.createElement("p"); choices.id = dispositionId; - if (V.arcologies[0].FSRestart !== "unset" && slave.breedingMark === 1 && V.propOutcome === 1 && (slave.pregSource === -1 || slave.pregSource === -6)) { + if (FutureSocieties.isActive('FSRestart') && slave.breedingMark === 1 && V.propOutcome === 1 && (slave.pregSource === -1 || slave.pregSource === -6)) { r.push(`${His} ${childrenAre} collected by the ${societalElite} to be raised into upstanding members of the new society.`); } else if (slave.breedingMark === 1 && V.propOutcome === 1 && (slave.pregSource === -1 || slave.pregSource === -6) && V.DefaultBirthDestination === "the market") { babyCost = random(2000, 4500); @@ -7172,7 +7172,7 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false, artRen const el = new DocumentFragment(); if ( babies && - V.arcologies[0].FSRestart !== "unset" && + FutureSocieties.isActive('FSRestart') && slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && diff --git a/src/js/economyJS.js b/src/js/economyJS.js index f1d7677bc16c7c6d5e472a7c5377d480c83c34da..b08ee41e103bd8bd791b02d7378f2e4478baa136 100644 --- a/src/js/economyJS.js +++ b/src/js/economyJS.js @@ -1842,7 +1842,7 @@ globalThis.slaveJobValues = function(lowerClassSexDemandRef, middleClassSexDeman } else if (slave.prestigeDesc === "$He is a famed Free Cities slut, and can please anyone.") { App.EndWeek.saVars.madamBonus += 0.15; } else if (slave.prestigeDesc === "$He is remembered for winning best in show as a dairy cow.") { - if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (FutureSocieties.isActive('FSPhysicalIdealist')) { if (slave.muscles > 60 && slave.weight < 30 && slave.lactation > 0 && slave.boobs - slave.boobsImplant > 6000) { App.EndWeek.saVars.madamBonus += 0.15; } @@ -1850,7 +1850,7 @@ globalThis.slaveJobValues = function(lowerClassSexDemandRef, middleClassSexDeman App.EndWeek.saVars.madamBonus += 0.10; } } else if (slave.prestigeDesc === "$He is remembered for winning best in show as a cockmilker.") { - if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + if (FutureSocieties.isActive('FSGenderFundamentalist')) { if (slave.balls === 0 && slave.dick === 0 && slave.vagina > -1) { /* this needs review - doesn't fit right. An XY slave would be expected to be masculine. */ App.EndWeek.saVars.madamBonus += 0.20; } @@ -1925,7 +1925,7 @@ globalThis.slaveJobValues = function(lowerClassSexDemandRef, middleClassSexDeman if (s.sexualFlaw === "attention whore") { beautyMultiplier += 0.1; } - if (V.arcologies[0].FSEdoRevivalist !== "unset") { + if (FutureSocieties.isActive('FSEdoRevivalist')) { beautyMultiplier += V.arcologies[0].FSEdoRevivalist / (V.FSLockinLevel * 3); } if (((V.universalRulesFacilityWork === 1) && (s.assignment === Job.PUBLIC) && (clubSpots > 0)) || (s.assignment === Job.CLUB)) { diff --git a/src/js/fsConformance.js b/src/js/fsConformance.js new file mode 100644 index 0000000000000000000000000000000000000000..70f22b25692cd5e9024672d03776d0fb217c7e61 --- /dev/null +++ b/src/js/fsConformance.js @@ -0,0 +1,104 @@ +/** Utilities to list slave basing on their conformance to FS policies */ +App.FSConformance = function() { + /** @type {Record<FC.FSHumanDevelopmentVector, [FC.FutureSocietyDeco, FC.FutureSocietyDeco]>} */ + const decosForVector = { + [FSHumanVector.AGE]: ['Maturity Preferentialist', 'Youth Preferentialist'], + [FSHumanVector.HEIGHT]: ['Statuesque Glorification', 'Petite Admiration'], + [FSHumanVector.WEIGHT]: ['Hedonistic', 'Physical Idealist'], + [FSHumanVector.MODIFICATIONS]: ['Transformation Fetishist', 'Body Purist'], + [FSHumanVector.ASSETS]: ['Asset Expansionist', 'Slimness Enthusiast'], + [FSHumanVector.INTELLIGENCE]: ['Slave Professionalism', 'Intellectual Dependency'], + [FSHumanVector.GENDER]: ['Gender Radicalist', 'Gender Fundamentalist'], + [FSHumanVector.BREEDING]: ['Repopulationist', 'Eugenics'], + [FSHumanVector.LIFE_QUALITY]: ['Paternalist', 'Degradationist'], + }; + + function anyVectorsDefined() { + return Object.values(FSHumanVector).some(v => FutureSocieties.humanVector(v, V.arcologies[0]) !== null); + } + + /** + * @param {{slave: FC.ReportSlave, effects: FC.SlaveSocialEffect[]}[]} slavesWithEffects + * @param {FC.FutureSocietyDeco} fsDeco + * @returns {{slave: FC.ReportSlave, magnitude: number}[]} + */ + function affectedSlaves(slavesWithEffects, fsDeco) { + return slavesWithEffects + .filter(item => item.effects.some(ef => fsDeco === ef.FS)) + .map(item => { + const totalMagnitude = item.effects.filter(ef => fsDeco === ef.FS).reduce((total, ef) => total + ef.magnitude, 0); + return {slave: item.slave, magnitude: totalMagnitude}; + }); + } + + /** + * @param {{slave: FC.ReportSlave, magnitude: number}[]} slavesWithEffects + * @param {FC.FutureSocietyDeco} deco + * @param {boolean} top + */ + function listSlaves(slavesWithEffects, deco, top) { + if (top) { + slavesWithEffects.sort((left, right) => right.magnitude - left.magnitude); + } else { + slavesWithEffects.sort((left, right) => left.magnitude - right.magnitude); + } + + return App.UI.SlaveList.render( + slavesWithEffects.slice(0, V.underperformersCount).map(item => item.slave.ID), + [], + App.UI.SlaveList.SlaveInteract.stdInteract, + ); + } + + function slaveConformancePassage() { + const node = new DocumentFragment(); + const r = []; + r.push(App.UI.DOM.makeElement("div", `${properMaster()}, while you spend numerous hours and put a lot of efforts to shape the society in your arcology for the envisioned future, you might be interested to know how well your own slaves conform to that vision.`)); + + App.Events.addParagraph(node, r); + + /** @type {{slave: FC.ReportSlave, effects: FC.SlaveSocialEffect[]}[]} */ + const slaveSocialEffects = []; + for (const rpSlave of App.SlaveAssignment.reportSlaves(V.slaves)) { + slaveSocialEffects.push({slave: rpSlave, effects: App.SlaveAssignment.saSocialEffects(rpSlave).effects()}); + } + + const conformandDiv = App.UI.DOM.makeElement("div"); + const conformantTabBar = new App.UI.Tabs.TabBar("fs-conformance-list"); + + const nonConformantDiv = App.UI.DOM.makeElement("div"); + const nonConformantTabBar = new App.UI.Tabs.TabBar("fs-non-conformance-list"); + + for (const vector of Object.values(FSHumanVector)) { + const vectorValue = FutureSocieties.humanVector(vector, V.arcologies[0]); + if (vectorValue === null) {continue;} + const deco = vectorValue > 0 ? decosForVector[vector][0] : decosForVector[vector][1]; + + const slavesForDeco = affectedSlaves(slaveSocialEffects, deco); + + conformantTabBar.addTab(deco, `${deco}-conform`, listSlaves(slavesForDeco.filter(item => item.magnitude > 0), deco, true)); + nonConformantTabBar.addTab(deco, `${deco}-non-conform`, listSlaves(slavesForDeco.filter(item => item.magnitude <= 0), deco, false)); + } + + conformandDiv.append(conformantTabBar.render()); + nonConformantDiv.append(nonConformantTabBar.render()); + + node.append(App.UI.DOM.accordion("Conformant", conformandDiv)); + node.append(App.UI.DOM.accordion("Non-conformant", nonConformantDiv)); + + const g = new App.UI.OptionsGroup(); + g.addOption("Maximum number of slaves", "underperformersCount") + .addValue("Default", 7).showTextBox(); + node.append(g.render()); + + V.nextButton = "Back"; + V.nextLink = "Future Society"; + + return node; + } + + return { + anyVectorsDefined, + slaveConformancePassage, + }; +}(); diff --git a/src/js/itemAvailability.js b/src/js/itemAvailability.js index a4517a60719b46108adb801f48847dbf2d659550..19cc6eaa57255442604a898ef597e55863e0de43 100644 --- a/src/js/itemAvailability.js +++ b/src/js/itemAvailability.js @@ -124,7 +124,7 @@ globalThis.isItemAccessible = (function() { } case "long plug": case "long, large plug": { - if (!(slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) { + if (!(slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || !FutureSocieties.isActive('FSRestart'))) { return "Elites frown on this"; } else { return true; @@ -133,7 +133,7 @@ globalThis.isItemAccessible = (function() { case "long, huge plug": { if (slave.anus < 2) { return `Slave's anus is too small for this right now`; - } else if (!(slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) { + } else if (!(slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || !FutureSocieties.isActive('FSRestart'))) { return "Elites frown on this"; } else { return true; @@ -159,7 +159,7 @@ globalThis.isItemAccessible = (function() { } case "long dildo": case "long, large dildo": { - if (!(slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) { + if (!(slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || !FutureSocieties.isActive('FSRestart'))) { return "Elites frown on this"; } else { return true; @@ -168,7 +168,7 @@ globalThis.isItemAccessible = (function() { case "long, huge dildo": { if (slave.vagina < 2) { return `Slave's vagina is too small for this right now`; - } else if (!(slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) { + } else if (!(slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || !FutureSocieties.isActive('FSRestart'))) { return "Elites frown on this"; } else { return true; diff --git a/src/js/rulesAssistantOptions.js b/src/js/rulesAssistantOptions.js index 3969178ed0a6f0be1be276d001be8ac9ea146ea9..beac49ced883ac79628b986a320c03a9f1c58271 100644 --- a/src/js/rulesAssistantOptions.js +++ b/src/js/rulesAssistantOptions.js @@ -2456,7 +2456,7 @@ App.RA.options = (function() { class WeightEditor extends NumericRangeEditor { constructor() { - const hdp = V.arcologies[0].FSHedonisticDecadence !== "unset"; + const hdp = FutureSocieties.isActive('FSHedonisticDecadence'); const pairs = [ ["emaciated", App.Utils.makeRange(-100, -96)], ["very thin", App.Utils.makeRange(-95, -31)], @@ -3492,75 +3492,75 @@ App.RA.options = (function() { ["Devil", "a devil silhouette"] ]; - if (V.arcologies[0].FSSupremacist !== "unset" || V.arcologies[0].FSSubjugationist !== "unset") { + if (FutureSocieties.isActive('FSSupremacist') || FutureSocieties.isActive('FSSubjugationist')) { items.push(["(FS) Racial Slur", "a racial slur"]); } - if (V.arcologies[0].FSSupremacist !== "unset" && V.arcologies[0].FSSupremacistRace === "white") { + if (FutureSocieties.isActive('FSSupremacist') && V.arcologies[0].FSSupremacistRace === "white") { items.push(["(FS) Swastika", "a swastika"]); } - if (V.arcologies[0].FSSubjugationist !== "unset" && V.arcologies[0].FSSubjugationistRace === "semitic") { + if (FutureSocieties.isActive('FSSubjugationist') && V.arcologies[0].FSSubjugationistRace === "semitic") { items.push(["(FS) Star of David", "a Star of David"]); } - if (V.arcologies[0].FSGenderRadicalist !== "unset" || V.arcologies[0].FSGenderFundamentalist !== "unset") { + if (FutureSocieties.isActive('FSGenderRadicalist') || FutureSocieties.isActive('FSGenderFundamentalist')) { items.push(["(FS) Gender Symbol", "a gender symbol"]); } - if (V.arcologies[0].FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist')) { items.push(["(FS) Personal Symbol", "$his own personal symbol"]); } - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { items.push(["(FS) Chain Symbol", "a chain symbol"]); } - if (V.arcologies[0].FSIntellectualDependency !== "unset") { + if (FutureSocieties.isActive('FSIntellectualDependency')) { items.push(["(FS) Scores", "how much sex $he needs per day"]); } - if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + if (FutureSocieties.isActive('FSSlaveProfessionalism')) { items.push(["(FS) Scores", "$his average slave aptitude test scores"]); } - if (V.arcologies[0].FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist')) { items.push(["(FS) Vitruvian Man", "a Vitruvian man"]); } - if (V.arcologies[0].FSTransformationFetishist !== "unset") { + if (FutureSocieties.isActive('FSTransformationFetishist')) { items.push(["(FS) Most Desired Implants", "a shortlist of desired implants"]); } - if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + if (FutureSocieties.isActive('FSYouthPreferentialist')) { items.push(["(FS) Virginity Status", "$his virginity status"]); } - if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + if (FutureSocieties.isActive('FSMaturityPreferentialist')) { items.push(["(FS) Sexual Skill Info", "$his sexual skills"]); } - if (V.arcologies[0].FSPetiteAdmiration !== "unset" || V.arcologies[0].FSStatuesqueGlorification !== "unset") { + if (FutureSocieties.isActive('FSPetiteAdmiration') || FutureSocieties.isActive('FSStatuesqueGlorification')) { items.push(["(FS) Current height", "$his current height"]); } - if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + if (FutureSocieties.isActive('FSSlimnessEnthusiast')) { items.push(["(FS) Breast Ceiling", "$his absolute maximum breast size"]); } - if (V.arcologies[0].FSAssetExpansionist !== "unset") { + if (FutureSocieties.isActive('FSAssetExpansionist')) { items.push(["(FS) Breast Floor", "$his absolute minimum breast size"]); } - if (V.arcologies[0].FSPastoralist !== "unset") { + if (FutureSocieties.isActive('FSPastoralist')) { items.push(["(FS) Product Quality", "$his body product quality"]); } - if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (FutureSocieties.isActive('FSPhysicalIdealist')) { items.push(["(FS) Deadlift Info", "$his deadlift record"]); } - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { items.push(["(FS) Weight Record", "$his highest weigh-in"]); } @@ -3568,43 +3568,43 @@ App.RA.options = (function() { items.push(["(FS) Favorite Food", `a big helping of ${V.PC.refreshment}`]); } - if (V.arcologies[0].FSRepopulationFocus !== "unset") { + if (FutureSocieties.isActive('FSRepopulationFocus')) { items.push(["(FS) Birth Count", "the number of children $he has birthed"]); } - if (V.arcologies[0].FSChattelReligionist !== "unset") { + if (FutureSocieties.isActive('FSChattelReligionist')) { items.push(["(FS) Religious Symbol", "a religious symbol"]); } - if (V.arcologies[0].FSRomanRevivalist !== "unset") { + if (FutureSocieties.isActive('FSRomanRevivalist')) { items.push(["(FS) Republican Crest", "a small crest of your Republic"]); } - if (V.arcologies[0].FSNeoImperialist !== "unset") { + if (FutureSocieties.isActive('FSNeoImperialist')) { items.push(["(FS) Imperial Family Crest", "a small crest bearing the symbol of your Family"]); } - if (V.arcologies[0].FSAztecRevivalist !== "unset") { + if (FutureSocieties.isActive('FSAztecRevivalist')) { items.push(["(FS) Seven Serpents", "a small symbol of the Aztec gods"]); } - if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + if (FutureSocieties.isActive('FSEgyptianRevivalist')) { items.push(["(FS) Dynastic Sigil", "a small sigil of your Dynasty"]); } - if (V.arcologies[0].FSEdoRevivalist !== "unset") { + if (FutureSocieties.isActive('FSEdoRevivalist')) { items.push(["(FS) Mon", "a small image of the Shogunate's mon"]); } - if (V.arcologies[0].FSArabianRevivalist !== "unset") { + if (FutureSocieties.isActive('FSArabianRevivalist')) { items.push(["(FS) Caliphate Symbol", "a small symbol of the Caliphate"]); } - if (V.arcologies[0].FSChineseRevivalist !== "unset") { + if (FutureSocieties.isActive('FSChineseRevivalist')) { items.push(["(FS) Imperial Seal", "a small image of your Imperial Seal"]); } - if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + if (FutureSocieties.isActive('FSAntebellumRevivalist')) { items.push(["(FS) Fleur-de-lis", "a small, intricate symbol representing a lily"]); } diff --git a/src/js/slaveCostJS.js b/src/js/slaveCostJS.js index c34ee3ca0aa9aeb89cd27a9b8a4cdcc8a44e10d2..faf89e7803fbbe26b54a495819301d204f22da2f 100644 --- a/src/js/slaveCostJS.js +++ b/src/js/slaveCostJS.js @@ -80,7 +80,8 @@ globalThis.minimumSlaveCost = function(includeLaws = false) { * @returns {Array<{text:string, value: number}>} */ globalThis.BeautyArray = function(slave) { - let arcology = V.arcologies[0]; + const arcology = V.arcologies[0]; + const arcologyInfo = new App.Utils.Arcology(arcology); let beauty = 0; let retval = []; @@ -168,11 +169,11 @@ globalThis.BeautyArray = function(slave) { * @param {App.Entity.SlaveState} slave */ function calcIntelligenceBeauty(slave) { - if (arcology.FSSlaveProfessionalism !== "unset") { + if (arcologyInfo.fsActive('FSSlaveProfessionalism')) { adjustBeauty("Intelligence: Professional", ((arcology.FSSlaveProfessionalism / 10) * (slave.intelligence / 10))); /* 100 */ - } else if (arcology.FSIntellectualDependency !== "unset") { + } else if (arcologyInfo.fsActive('FSIntellectualDependency')) { adjustBeauty("Intelligence: Intellectual Dependency", -((arcology.FSIntellectualDependency / 10) * ((slave.intelligence + slave.intelligenceImplant) / 20))); /* 65 */ - } else if (arcology.FSDegradationist !== "unset") { + } else if (arcologyInfo.fsActive('FSDegradationist')) { adjustBeauty("Intelligence: Degradationist", -((arcology.FSDegradationist / 10) * ((slave.intelligence + slave.intelligenceImplant) / 50))); /* 20 */ } else { adjustBeauty("Intelligence: General", ((slave.intelligence + slave.intelligenceImplant) / 10)); /* -10 to 13 */ @@ -183,7 +184,7 @@ globalThis.BeautyArray = function(slave) { * @param {App.Entity.SlaveState} slave */ function calcHeightBeauty(slave) { - if (arcology.FSPetiteAdmiration !== "unset") { + if (arcologyInfo.fsActive('FSPetiteAdmiration')) { if (arcology.FSPetiteAdmirationLaw2 === 1) { if (heightPass(slave)) { adjustBeauty("Height: Petite Admiration, law", ((Height.mean(slave) - slave.height) * (arcology.FSPetiteAdmiration / 50))); @@ -198,7 +199,7 @@ globalThis.BeautyArray = function(slave) { adjustBeauty("Height: Petite Admiration", -((slave.height - 169) * (arcology.FSPetiteAdmiration / 50))); } } - } else if (arcology.FSStatuesqueGlorification !== "unset") { + } else if (arcologyInfo.fsActive('FSStatuesqueGlorification')) { if (arcology.FSStatuesqueGlorificationLaw2 === 1) { if (heightPass(slave)) { adjustBeauty("Height: Statuesque Glorification, law", ((slave.height - Height.mean(slave)) * (arcology.FSStatuesqueGlorification / 50))); @@ -225,18 +226,18 @@ globalThis.BeautyArray = function(slave) { adjustBeauty("Face", (slave.face / 5)); switch (slave.faceShape) { case "masculine": - if (arcology.FSGenderRadicalist !== "unset") { + if (arcologyInfo.fsActive('FSGenderRadicalist')) { adjustBeauty("Masculine face: Gender Radicalist", -((2 - (arcology.FSGenderRadicalist / 25)) * (slave.face / 30))); - } else if (arcology.FSGenderFundamentalist !== "unset") { + } else if (arcologyInfo.fsActive('FSGenderFundamentalist')) { adjustBeauty("Masculine face: Gender Fundamentalist", -((2 + (arcology.FSGenderFundamentalist / 25)) * (slave.face / 30))); } else { adjustBeauty("Masculine face: General", -(2 * (slave.face / 30))); } break; case "androgynous": - if (arcology.FSGenderRadicalist !== "unset") { + if (arcologyInfo.fsActive('FSGenderRadicalist')) { adjustBeauty("Androgynous face: Gender Radicalist", (2 - ((1 - (arcology.FSGenderRadicalist / 25)) * (slave.face / 30)))); - } else if (arcology.FSGenderFundamentalist !== "unset") { + } else if (arcologyInfo.fsActive('FSGenderFundamentalist')) { adjustBeauty("Androgynous face: Gender Fundamentalist", (2 - ((1 + (arcology.FSGenderFundamentalist / 25)) * (slave.face / 30)))); } else { adjustBeauty("Androgynous face: General", (2 - (slave.face / 30))); @@ -275,7 +276,7 @@ globalThis.BeautyArray = function(slave) { break; case "straightening braces": case "cosmetic braces": - if (slave.visualAge.isBetween(14, 18) && arcology.FSMaturityPreferentialist === "unset") { + if (slave.visualAge.isBetween(14, 18) && !FutureSocieties.isActive('FSMaturityPreferentialist', arcology)) { adjustBeauty("Teeth", (1)); } break; @@ -355,7 +356,7 @@ globalThis.BeautyArray = function(slave) { adjustBeauty("Nails", (1)); } if (slave.makeup === 0) { - if (arcology.FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist', arcology)) { if (slave.face > 10) { adjustBeauty("Body Purist: Makeup-free beauty", 2); } else { @@ -363,9 +364,9 @@ globalThis.BeautyArray = function(slave) { } } } else { - if (arcology.FSDegradationist !== "unset" && slave.makeup > 1) { + if (FutureSocieties.isActive('FSDegradationist', arcology) && slave.makeup > 1) { adjustBeauty("Degradationist: Heavy makeup", 2); - } else if (arcology.FSBodyPurist !== "unset") { + } else if (FutureSocieties.isActive('FSBodyPurist', arcology)) { if (slave.makeup > 1) { adjustBeauty("Body Purist: Unsightly makeup", -1); } else { @@ -406,12 +407,12 @@ globalThis.BeautyArray = function(slave) { * @param {App.Entity.SlaveState} slave */ function calcFSNotFuckdollBeauty(slave) { - if (arcology.FSSupremacist !== "unset") { + if (arcologyInfo.fsActive('FSSupremacist')) { if (slave.race === arcology.FSSupremacistRace) { adjustBeauty("Supremacist Race", ((arcology.FSSupremacist / 3) + (arcology.FSSupremacistLawME * 10))); } } - if (arcology.FSSubjugationist !== "unset") { + if (arcologyInfo.fsActive('FSSubjugationist')) { if (slave.race === arcology.FSSubjugationistRace) { adjustBeauty("Inferior Race", -((arcology.FSSubjugationist / 2) - (arcology.FSSubjugationistLawME * 10))); } @@ -424,7 +425,7 @@ globalThis.BeautyArray = function(slave) { } else { adjustBeauty("Low Education/Miseducated: Bimbo Law: Gender Fundamentalist", -(Math.abs(slave.intelligenceImplant * 1.5))); } - } else if (arcology.FSSlaveProfessionalism !== "unset") { + } else if (arcologyInfo.fsActive('FSSlaveProfessionalism')) { if (slave.intelligenceImplant >= 30) { adjustBeauty("Highly Educated: Professionalism", (5 + (arcology.FSSlaveProfessionalism / 10))); /* 15 */ } else if (slave.intelligenceImplant >= 15) { @@ -432,19 +433,19 @@ globalThis.BeautyArray = function(slave) { } else { adjustBeauty("Low Education/Miseducated: Professionalism", -(((arcology.FSSlaveProfessionalism / 10) * 3) - slave.intelligenceImplant)); /* -30 */ } - } else if (arcology.FSIntellectualDependency !== "unset") { + } else if (arcologyInfo.fsActive('FSIntellectualDependency')) { if (slave.intelligenceImplant > 15) { adjustBeauty("Educated: Intellectual Dependency", -((arcology.FSIntellectualDependency / 10) * (slave.intelligenceImplant / 10))); /* -30 */ } } - if (arcology.FSSlaveProfessionalism !== "unset") { + if (arcologyInfo.fsActive('FSSlaveProfessionalism')) { adjustBeauty("Skilled: Slave Professionalism", ((arcology.FSSlaveProfessionalism / 50) * ((slave.skill.entertainment + slave.skill.whoring + slave.skill.oral + slave.skill.anal + slave.skill.vaginal) / 100))); /* 10 */ } - if (arcology.FSYouthPreferentialist !== "unset") { + if (arcologyInfo.fsActive('FSYouthPreferentialist')) { if (slave.visualAge < 30) { adjustBeauty("Age: Youth Preferentialist", Math.clamp(((arcology.FSYouthPreferentialist / 2) + (arcology.FSYouthPreferentialistLaw * 10)) - Math.round(Math.abs(slave.visualAge - V.idealAge) * 2.222), 0, 60)); /* max 60 */ } - } else if (arcology.FSMaturityPreferentialist !== "unset") { + } else if (arcologyInfo.fsActive('FSMaturityPreferentialist')) { if (slave.visualAge >= 30 && slave.visualAge < 60) { adjustBeauty("Age: Maturity Preferentialist", Math.clamp(((arcology.FSMaturityPreferentialist / 2) + (arcology.FSMaturityPreferentialistLaw * 10)) - Math.round(Math.abs(slave.visualAge - V.idealAge) * 2.222), 0, 60)); /* max 60 */ } @@ -458,7 +459,7 @@ globalThis.BeautyArray = function(slave) { adjustBeauty("Anal: Body Purist", (30 * (arcology.FSBodyPurist / 100))); } } - if (arcology.FSEdoRevivalist !== "unset") { + if (arcologyInfo.fsActive('FSEdoRevivalist')) { if (slave.nationality === "Japanese" || slave.nationality === "Edo Revivalist") { adjustBeauty("Nationality: Japanese: Edo Revivalist", (arcology.FSEdoRevivalist / 2)); } else if (slave.race === "asian") { @@ -475,7 +476,7 @@ globalThis.BeautyArray = function(slave) { adjustBeauty("No Accent: Edo Revivalist", (arcology.FSEdoRevivalist / 10)); } } - } else if (arcology.FSChineseRevivalist !== "unset") { + } else if (arcologyInfo.fsActive('FSChineseRevivalist')) { if (slave.nationality === "Chinese" || slave.nationality === "Ancient Chinese Revivalist") { adjustBeauty("Nationality: Chinese: Chinese Revivalist", (arcology.FSChineseRevivalist / 2)); } else if (slave.race === "asian") { @@ -530,7 +531,7 @@ globalThis.BeautyArray = function(slave) { * @param {App.Entity.SlaveState} slave */ function calcDickBeauty(slave) { - if (arcology.FSAssetExpansionist > 20 && arcology.FSGenderFundamentalist === "unset") { + if (arcology.FSAssetExpansionist > 20 && !arcologyInfo.fsActive('FSGenderFundamentalist')) { if (slave.dick >= 20) { adjustBeauty("Enormous Dick: Asset Expansionist", (17 + (slave.dick * (arcology.FSAssetExpansionist / 500)))); /* 23 */ } else if (slave.dick >= 10) { @@ -538,7 +539,7 @@ globalThis.BeautyArray = function(slave) { } else if (slave.dick > 6) { adjustBeauty("Large Dick: Asset Expansionist", (slave.dick * (1 + (arcology.FSAssetExpansionist / 100)))); /* 10 */ } - } else if (arcology.FSGenderFundamentalist !== "unset") { + } else if (arcologyInfo.fsActive('FSGenderFundamentalist')) { if (slave.dick > 0) { if (slave.genes === "XY") { adjustBeauty("Dick: Gender Fundamentalist", Math.min(5, (-1 + slave.dick))); @@ -546,7 +547,7 @@ globalThis.BeautyArray = function(slave) { adjustBeauty("Dick: Gender Fundamentalist", -(3 * slave.dick)); } } - } else if (arcology.FSGenderRadicalist !== "unset") { + } else if (arcologyInfo.fsActive('FSGenderRadicalist')) { if (slave.dick > 20) { adjustBeauty("EnormousDick: Gender Radicalist", (20 + (slave.dick * (arcology.FSGenderRadicalist / 400)))); /* 27.5 */ } else if (slave.dick >= 10) { @@ -564,7 +565,7 @@ globalThis.BeautyArray = function(slave) { * @param {App.Entity.SlaveState} slave */ function calcBallsBeauty(slave) { - if (arcology.FSAssetExpansionist > 20 && arcology.FSGenderFundamentalist === "unset") { + if (arcology.FSAssetExpansionist > 20 && !arcologyInfo.fsActive('FSGenderFundamentalist')) { if (slave.balls > 100) { adjustBeauty("Inhuman Balls: Asset Expansionist", (41 + (slave.balls * (arcology.FSAssetExpansionist / 500)))); /* 66 */ } else if (slave.balls > 80) { @@ -574,11 +575,11 @@ globalThis.BeautyArray = function(slave) { } else if (slave.balls > 10) { adjustBeauty("Big Balls: Asset Expansionist", (slave.balls * (arcology.FSAssetExpansionist / 1000))); /* 6 */ } - } else if (arcology.FSGenderFundamentalist !== "unset") { + } else if (arcologyInfo.fsActive('FSGenderFundamentalist')) { if (slave.scrotum > 0) { adjustBeauty("Scrotum: Gender Fundamentalist", -(slave.balls * (1 + (arcology.FSGenderFundamentalist / 200)))); } - } else if (arcology.FSGenderRadicalist !== "unset") { + } else if (arcologyInfo.fsActive('FSGenderRadicalist')) { if (slave.scrotum > 0) { if (slave.balls > 100) { adjustBeauty("Inhuman Scrotum: Gender Radicalist", (40 + (slave.balls * (arcology.FSGenderRadicalist / 2000)))); /* 46.25 */ @@ -595,7 +596,7 @@ globalThis.BeautyArray = function(slave) { adjustBeauty("Scrotum: General", -(slave.balls)); } } - if (arcology.FSRestart !== "unset") { + if (arcologyInfo.fsActive('FSRestart')) { /* Eugenics does not like slaves having working balls */ if (slave.ballType === "human") { adjustBeauty("Balls: Eugenics", -(slave.balls * (1 + (arcology.FSRestart / 100)))); @@ -612,7 +613,7 @@ globalThis.BeautyArray = function(slave) { } else { adjustBeauty("Inhuman Butt", (10 + (slave.butt / 2))); /* range (15, 20] */ } - if ((arcology.FSTransformationFetishist > 20 && arcology.FSSlimnessEnthusiast === "unset") || arcology.FSAssetExpansionist > 20) { + if ((arcology.FSTransformationFetishist > 20 && !arcologyInfo.fsActive('FSSlimnessEnthusiast')) || arcology.FSAssetExpansionist > 20) { if (slave.butt <= 2) { adjustBeauty("Small Butt: Transformation Fetishist / Asset Expansionist", (2 * (slave.butt - 1))); /* 2 */ } else if (slave.butt <= 4) { @@ -643,7 +644,7 @@ globalThis.BeautyArray = function(slave) { } if (arcology.FSTransformationFetishist > 20) { /* the cost of using AE's values */ - if (arcology.FSSlimnessEnthusiast !== "unset") { + if (arcologyInfo.fsActive('FSSlimnessEnthusiast')) { if (slave.butt >= 3) { if (slave.buttImplant / slave.butt < 0.25) { adjustBeauty("Butt Implant: Slimness Enthusiast", -(2 * (slave.butt - 1) + 10)); @@ -668,7 +669,7 @@ globalThis.BeautyArray = function(slave) { switch (slave.hips) { case -2: if (slave.butt > 2) { - if (arcology.FSTransformationFetishist === "unset" && arcology.FSHedonisticDecadence === "unset") { + if (!arcologyInfo.fsActive('FSTransformationFetishist') && !arcologyInfo.fsActive('FSHedonisticDecadence')) { adjustBeauty("Hips: General", (2 - slave.butt)); } else { adjustBeauty("Hips: Transformation Fetishist or Hedonistic Decadence", 1); @@ -679,7 +680,7 @@ globalThis.BeautyArray = function(slave) { break; case -1: if (slave.butt > 4) { - if (arcology.FSTransformationFetishist === "unset" && arcology.FSHedonisticDecadence === "unset") { + if (!arcologyInfo.fsActive('FSTransformationFetishist') && !arcologyInfo.fsActive('FSHedonisticDecadence')) { adjustBeauty("Hips: General", (4 - slave.butt)); } else { adjustBeauty("Hips: Transformation Fetishist or Hedonistic Decadence", 1); @@ -690,7 +691,7 @@ globalThis.BeautyArray = function(slave) { break; case 0: if (slave.butt > 6) { - if (arcology.FSTransformationFetishist === "unset" && arcology.FSHedonisticDecadence === "unset") { + if (!arcologyInfo.fsActive('FSTransformationFetishist') && !arcologyInfo.fsActive('FSHedonisticDecadence')) { adjustBeauty("Hips: General", (6 - slave.butt)); } else { adjustBeauty("Hips: Transformation Fetishist or Hedonistic Decadence", 1); @@ -703,7 +704,7 @@ globalThis.BeautyArray = function(slave) { break; case 1: if (slave.butt > 8) { - if (arcology.FSTransformationFetishist === "unset" && arcology.FSHedonisticDecadence === "unset") { + if (!arcologyInfo.fsActive('FSTransformationFetishist') && !arcologyInfo.fsActive('FSHedonisticDecadence')) { adjustBeauty("Hips: General", (8 - slave.butt)); } else { adjustBeauty("Hips: Transformation Fetishist or Hedonistic Decadence", 1); @@ -735,7 +736,7 @@ globalThis.BeautyArray = function(slave) { * @param {App.Entity.SlaveState} slave */ function calcBoobsBeauty(slave) { - if ((arcology.FSTransformationFetishist > 20 && arcology.FSSlimnessEnthusiast === "unset") || arcology.FSAssetExpansionist > 20) { + if ((arcology.FSTransformationFetishist > 20 && !arcologyInfo.fsActive('FSSlimnessEnthusiast')) || arcology.FSAssetExpansionist > 20) { if (slave.boobs <= 750) { adjustBeauty("Boob Size: Less than DD: Transformation Fetishist / Asset Expansionist", (-4 + 0.01 * (slave.boobs))); /* 3.5 */ } else if (slave.boobs <= 2050) { @@ -774,7 +775,7 @@ globalThis.BeautyArray = function(slave) { } if (arcology.FSTransformationFetishist > 20) { /* the cost of using AE's values */ - if (arcology.FSSlimnessEnthusiast !== "unset") { + if (arcologyInfo.fsActive('FSSlimnessEnthusiast')) { if (slave.boobs >= 400) { if (slave.boobs >= 10000) { if (slave.boobsImplant / slave.boobs < 0.75) { @@ -826,9 +827,9 @@ globalThis.BeautyArray = function(slave) { } else if (slave.boobShape === "saggy") { adjustBeauty("Boob Shape", -4); } else if (slave.boobShape === "spherical") { - if (arcology.FSTransformationFetishist !== "unset") { + if (arcologyInfo.fsActive('FSTransformationFetishist')) { adjustBeauty("Boob Shape: Transformation Fetishist", (arcology.FSTransformationFetishist / 10)); - } else if (arcology.FSBodyPurist !== "unset") { + } else if (arcologyInfo.fsActive('FSBodyPurist')) { adjustBeauty("Boob Shape: Body Purist", -(arcology.FSBodyPurist / 2)); } else { adjustBeauty("Boob Shape", -1); @@ -844,11 +845,11 @@ globalThis.BeautyArray = function(slave) { } else if (slave.nipples === "tiny") { adjustBeauty("Nipples", -2); } else if (slave.nipples === "fuckable") { - if (arcology.FSTransformationFetishist !== "unset") { + if (arcologyInfo.fsActive('FSTransformationFetishist')) { adjustBeauty("Nipples: Transformation Fetishist", (arcology.FSTransformationFetishist / 10)); } } else if (slave.nipples === "flat") { - if (arcology.FSTransformationFetishist !== "unset") { + if (arcologyInfo.fsActive('FSTransformationFetishist')) { adjustBeauty("Nipples: Transformation Fetishist", (arcology.FSTransformationFetishist / 20)); } else { adjustBeauty("Nipples", -2); @@ -905,7 +906,7 @@ globalThis.BeautyArray = function(slave) { } } } - if (arcology.FSPhysicalIdealist !== "unset") { + if (arcologyInfo.fsActive('FSPhysicalIdealist')) { if (arcology.FSPhysicalIdealistStrongFat === 1) { if (slave.weight > 10 && slave.weight <= 130) { adjustBeauty("Weight: Physical Idealist", (slave.weight * (arcology.FSPhysicalIdealist / 200))); /* 65 */ @@ -925,7 +926,7 @@ globalThis.BeautyArray = function(slave) { } else if (slave.muscles < -30) { adjustBeauty("Muscles", (slave.muscles / 30)); } - if (arcology.FSPhysicalIdealist !== "unset") { + if (arcologyInfo.fsActive('FSPhysicalIdealist')) { if (arcology.FSPhysicalIdealistLaw === 1) { if (Math.abs(slave.weight) <= 30 && slave.health.condition >= 20 && slave.muscles >= 20 && slave.muscles <= 50) { adjustBeauty("Muscles: Physical Idealist: Law", ((slave.muscles + (Math.min(slave.health.condition, 300) / 5)) * (arcology.FSPhysicalIdealist / 100))); @@ -937,7 +938,7 @@ globalThis.BeautyArray = function(slave) { adjustBeauty("Muscles: Physical Idealist", (slave.muscles * (arcology.FSPhysicalIdealist / 120))); /* +-83 */ } } - } else if (arcology.FSHedonisticDecadence !== "unset") { + } else if (arcologyInfo.fsActive('FSHedonisticDecadence')) { if (slave.muscles < -10) { adjustBeauty("Muscles: Hedonistic Decadence", (Math.abs(slave.muscles) * (arcology.FSHedonisticDecadence / 160))); /* 62.5 */ } else if (slave.muscles > 5) { @@ -1007,7 +1008,7 @@ globalThis.BeautyArray = function(slave) { * @param {App.Entity.SlaveState} slave */ function calcImplantBeauty(slave) { - if (arcology.FSTransformationFetishist !== "unset") { + if (arcologyInfo.fsActive('FSTransformationFetishist')) { if (Math.abs(slave.shouldersImplant) > 1) { adjustBeauty("Shoulders Implant: Transformation Fetishist", ((arcology.FSTransformationFetishist / 20) + Math.abs(slave.shouldersImplant))); } @@ -1020,7 +1021,7 @@ globalThis.BeautyArray = function(slave) { if (slave.faceImplant > 95 && slave.face > 40) { adjustBeauty("Face Implant: Transformation Fetishist", (arcology.FSTransformationFetishist / 4)); } - } else if (arcology.FSBodyPurist !== "unset") { + } else if (arcologyInfo.fsActive('FSBodyPurist')) { if (slave.faceImplant > 5) { adjustBeauty("Face Implant: Body Purist", -((arcology.FSBodyPurist / 100) * (slave.faceImplant / 10))); } @@ -1225,13 +1226,13 @@ globalThis.BeautyArray = function(slave) { function calcFutaLawBigBootyBeauty(slave) { if (slave.hips >= 1) { adjustBeauty("Futa Law: Bottom Heavy: Hips", (4 * (slave.hips - 1))); /* 8 */ - if (arcology.FSSlimnessEnthusiast !== "unset") { + if (arcologyInfo.fsActive('FSSlimnessEnthusiast')) { adjustBeauty("Futa Law: Bottom Heavy: Hips (Slimness Enthusiast)", (4 * (slave.hips - 1))); /* 8 */ /* offsets the malus for big butts */ } } if (slave.skill.anal > 60 && slave.anus >= 2) { adjustBeauty("Futa Law: Bottom Heavy: Anus", (2 * (slave.anus - 2))); /* 6 */ - if (arcology.FSSlimnessEnthusiast !== "unset") { + if (arcologyInfo.fsActive('FSSlimnessEnthusiast')) { adjustBeauty("Futa Law: Bottom Heavy: Anus (Slimness Enthusiast)", (2 * (slave.anus - 2))); /* 6 */ /* offsets the malus for big butts */ } } @@ -1244,7 +1245,7 @@ globalThis.BeautyArray = function(slave) { * @param {App.Entity.SlaveState} slave */ function calcFutaLawFemboyBeauty(slave) { - if (arcology.FSSlimnessEnthusiast === "unset") { + if (!arcologyInfo.fsActive('FSSlimnessEnthusiast')) { /* balance with slimness */ adjustBeauty("Body Proportion: Femboy: Futa Law", (20)); if (slave.boobs < 300) { @@ -1278,13 +1279,13 @@ globalThis.BeautyArray = function(slave) { * @param {App.Entity.SlaveState} slave */ function calcBodyProportionBeauty(slave) { - if (arcology.FSGenderFundamentalist !== "unset") { + if (arcologyInfo.fsActive('FSGenderFundamentalist')) { if (slave.shoulders > slave.hips) { if (slave.boobs <= 2000 * (slave.shoulders - slave.hips)) { adjustBeauty("Body Proportion: Gender Fundamentalist", -((slave.shoulders - slave.hips) * (1 + (arcology.FSGenderFundamentalist / 200)))); } } - } else if (arcology.FSGenderRadicalist === "unset") { + } else if (!arcologyInfo.fsActive('FSGenderRadicalist')) { if (slave.shoulders > slave.hips) { if (slave.boobs <= 2000 * (slave.shoulders - slave.hips)) { adjustBeauty("Body Proportion", -(slave.shoulders - slave.hips)); @@ -1297,7 +1298,7 @@ globalThis.BeautyArray = function(slave) { * @param {App.Entity.SlaveState} slave */ function calcVoiceBeauty(slave) { - if (arcology.FSSlaveProfessionalism !== "unset") { + if (arcologyInfo.fsActive('FSSlaveProfessionalism')) { if (canTalk(slave)) { if (slave.accent > 1) { adjustBeauty("Voice Accent: Slave Professionalism", -(20)); @@ -1322,7 +1323,7 @@ globalThis.BeautyArray = function(slave) { * @param {App.Entity.SlaveState} slave */ function calcLimbsBeauty(slave) { - if (arcology.FSDegradationist === "unset") { + if (!arcologyInfo.fsActive('FSDegradationist')) { // missing limbs adjustBeauty("Limbs: Missing", -(getLimbCount(slave, 0) * 2.5)); // non-beauty prosthetics @@ -1339,7 +1340,7 @@ globalThis.BeautyArray = function(slave) { } if (slave.pubertyXY === 0 && slave.physicalAge > V.potencyAge && slave.balls > 0) { adjustBeauty("Puberty Beauty", (10)); - if (arcology.FSGenderFundamentalist !== "unset") { + if (arcologyInfo.fsActive('FSGenderFundamentalist')) { adjustBeauty("Puberty Beauty: Gender Fundamentalist", 5); } } @@ -1370,7 +1371,7 @@ globalThis.BeautyArray = function(slave) { adjustBeauty("Hips: Gender Radicalist / Gender Radicalist Law Futa / Slimness Enthusiast", (Math.abs(slave.hips))); } } - if (arcology.FSPhysicalIdealist !== "unset") { + if (arcologyInfo.fsActive('FSPhysicalIdealist')) { if (slave.height > Height.mean(slave)) { adjustBeauty("Height: Physical Idealist", (10)); } @@ -1382,13 +1383,13 @@ globalThis.BeautyArray = function(slave) { adjustBeauty("Boobs/Butt/Weight: Hedonistic Decadence, Law (Rotund Feminine Ideal)", -(15 + (arcology.FSHedonisticDecadence / 20))); /* -20 */ } } - if (arcology.FSSlaveProfessionalism !== "unset") { + if (arcologyInfo.fsActive('FSSlaveProfessionalism')) { if (slave.energy > 80) { adjustBeauty("Energy: Slave Professionalism", -(slave.energy)); /* -80 to -100 */ } else if (slave.energy <= 40 && slave.devotion > 50) { adjustBeauty("Energy: Slave Professionalism", 10 - (slave.energy / 4)); /* +10 to 0 */ } - } else if (arcology.FSIntellectualDependency !== "unset") { + } else if (arcologyInfo.fsActive('FSIntellectualDependency')) { if (arcology.FSIntellectualDependencyLawBeauty === 1) { let bimboDegree = Math.clamp(bimboScore(slave), 0, 6); if (bimboDegree > 0) { @@ -1408,7 +1409,7 @@ globalThis.BeautyArray = function(slave) { adjustBeauty("Nicaea Assignment: Chattel Religionist Creed", (2 * V.nicaea.power)); } } - if (arcology.FSChattelReligionist > 40 && arcology.FSBodyPurist === "unset") { + if (arcology.FSChattelReligionist > 40 && !arcologyInfo.fsActive('FSBodyPurist')) { const tats = ["anusTat", "armsTat", "backTat", "boobsTat", "buttTat", "dickTat", "legsTat", "lipsTat", "shouldersTat", "stampTat", "vaginaTat"]; let sacrilegeCount = 0; for (const index in tats) { @@ -1427,13 +1428,13 @@ globalThis.BeautyArray = function(slave) { */ function calcPurityBeauty(slave) { if (isPure(slave)) { - if (arcology.FSBodyPurist !== "unset") { + if (arcologyInfo.fsActive('FSBodyPurist')) { adjustBeauty("Purity: Body Purist", (arcology.FSBodyPurist / 5)); } - if (arcology.FSTransformationFetishist === "unset") { + if (!arcologyInfo.fsActive('FSTransformationFetishist')) { adjustBeauty("Purity", 2); } - } else if (arcology.FSTransformationFetishist !== "unset") { + } else if (arcologyInfo.fsActive('FSTransformationFetishist')) { adjustBeauty("Purity: Transformation Fetishist", (arcology.FSTransformationFetishist / 40)); } } @@ -1445,9 +1446,9 @@ globalThis.BeautyArray = function(slave) { let physiquePass = 0; if (slave.boobs < 500 && slave.butt < 3) { - if (slave.muscles <= 30 && arcology.FSPhysicalIdealist === "unset" && slave.weight <= 10 && arcology.FSHedonisticDecadence === "unset") { + if (slave.muscles <= 30 && !arcologyInfo.fsActive('FSPhysicalIdealist') && slave.weight <= 10 && !arcologyInfo.fsActive('FSHedonisticDecadence')) { physiquePass = 1; - } else if (arcology.FSPhysicalIdealist !== "unset") { + } else if (arcologyInfo.fsActive('FSPhysicalIdealist')) { /* no muscle malus for muscle loving societies */ if (arcology.FSPhysicalIdealistStrongFat === 1 && slave.weight <= 30) { /* reduced weight malus for fat loving societies */ @@ -1455,7 +1456,7 @@ globalThis.BeautyArray = function(slave) { } else if (slave.weight <= 10) { physiquePass = 1; } - } else if (arcology.FSHedonisticDecadence !== "unset" && slave.weight <= 30) { + } else if (arcologyInfo.fsActive('FSHedonisticDecadence') && slave.weight <= 30) { /* reduced weight malus for fat loving societies */ if (arcology.FSHedonisticDecadenceStrongFat === 1) { /* no muscle malus for muscle loving societies */ @@ -1474,7 +1475,7 @@ globalThis.BeautyArray = function(slave) { } } } else if (isStacked(slave)) { - if (arcology.FSSlimnessEnthusiast === "unset") { + if (!arcologyInfo.fsActive('FSSlimnessEnthusiast')) { adjustBeauty("Physique Beauty", 1); } if (arcology.FSAssetExpansionist > 20) { @@ -1522,7 +1523,7 @@ globalThis.BeautyArray = function(slave) { adjustBeauty("Neoteny", (0.1 * beauty)); } if (slave.breedingMark === 1) { - if (V.propOutcome === 1 && V.arcologies[0].FSRestart !== "unset") { + if (V.propOutcome === 1 && FutureSocieties.isActive('FSRestart')) { adjustBeauty("Breeding Mark: Elite (Modifies all beauty)", beauty); } else { adjustBeauty("Breeding Mark: Elite", 2); @@ -1542,17 +1543,17 @@ globalThis.BeautyArray = function(slave) { function calcBellyBeauty(slave) { if (slave.bellySag > 0) { if (slave.belly < 100) { - if (arcology.FSRepopulationFocus === "unset") { + if (!arcologyInfo.fsActive('FSRepopulationFocus')) { adjustBeauty("Belly Sag", -(20)); } } } - if (slave.bellyPreg >= 500 && arcology.FSRepopulationFocus === "unset" && arcology.FSRestart === "unset") { + if (slave.bellyPreg >= 500 && !arcologyInfo.fsActiveSome('FSRepopulationFocus', 'FSRestart')) { if (arcology.FSRepopulationFocusPregPolicy === 1) { adjustBeauty("Pregnancy: Repop. (Modifies all beauty)", (-0.1 * beauty)); - } else if (arcology.FSGenderRadicalist !== "unset" && slave.mpreg === 1) { + } else if (arcologyInfo.fsActive('FSGenderRadicalist') && slave.mpreg === 1) { adjustBeauty("Anal Pregnancy: Gender Rad. (Modifies all beauty)", (-0.1 * beauty)); - } else if (arcology.FSGenderFundamentalist !== "unset") { + } else if (arcologyInfo.fsActive('FSGenderFundamentalist')) { adjustBeauty("Pregnancy: Gender Fund. (Modifies all beauty)", (-0.2 * beauty)); } else { adjustBeauty("Pregnancy (Modifies all beauty)", (-0.3 * beauty)); @@ -1590,7 +1591,7 @@ globalThis.BeautyArray = function(slave) { function calcAgeBeauty(slave) { if (slave.physicalAge === V.minimumSlaveAge) { adjustBeauty("Age: First Year Legal", 1); - if (slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcology.FSRepopulationFocus !== "unset" || arcology.FSGenderFundamentalist !== "unset") && arcology.FSRestart === "unset") { + if (slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcologyInfo.fsActive('FSRepopulationFocus') || arcologyInfo.fsActive('FSGenderFundamentalist')) && !arcologyInfo.fsActive('FSRestart')) { if (slave.birthWeek === 0) { adjustBeauty("Age: First Week Legal: Newborn: Fertile+FS", (1.6 * beauty)); } else if (slave.birthWeek < 4) { @@ -1603,7 +1604,7 @@ globalThis.BeautyArray = function(slave) { adjustBeauty("Age: First Week Legal: Born Yesterday", (0.1 * beauty)); } } - } else if (slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcology.FSRepopulationFocus !== "unset" || arcology.FSGenderFundamentalist !== "unset") && arcology.FSRestart === "unset") { + } else if (slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcologyInfo.fsActive('FSRepopulationFocus') || arcologyInfo.fsActive('FSGenderFundamentalist')) && !arcologyInfo.fsActive('FSRestart')) { adjustBeauty("Age: Newborn: Fertile+FS", 1); if (slave.birthWeek === 0) { adjustBeauty("Age: Newborn", (0.8 * beauty)); @@ -2015,10 +2016,10 @@ globalThis.FResultArray = (function() { * @param {App.Entity.SlaveState} slave */ function calcRace(slave) { - if (V.arcologies[0].FSSupremacist !== "unset" && supremeRaceP(slave)) { + if (FutureSocieties.isActive('FSSupremacist') && supremeRaceP(slave)) { adjustFResult(`Race is supreme race`, -(V.arcologies[0].FSSupremacist / 5) + (V.arcologies[0].FSSupremacistLawME * 10)); } - if (V.arcologies[0].FSSubjugationist !== "unset" && inferiorRaceP(slave)) { + if (FutureSocieties.isActive('FSSubjugationist') && inferiorRaceP(slave)) { adjustFResult(`Race is inferior race`, (V.arcologies[0].FSSubjugationist / 10) + (V.arcologies[0].FSSubjugationistLawME)); } } @@ -2170,12 +2171,12 @@ globalThis.FResultArray = (function() { // blind: -3 adjustFResult(`Eyes: Vision`, Math.clamp(getBestVision(slave) * 2 - 3, -3, 0)); } - if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + if (FutureSocieties.isActive('FSYouthPreferentialist')) { calcYouthBonus(slave); - } else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + } else if (FutureSocieties.isActive('FSMaturityPreferentialist')) { calcMatureBonus(slave); } - if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + if (FutureSocieties.isActive('FSSlaveProfessionalism')) { calcSlaveProfessionalismBonus(slave); } } @@ -2184,7 +2185,7 @@ globalThis.FResultArray = (function() { * @param {App.Entity.SlaveState} slave */ function calcAge(slave) { - if ((V.arcologies[0].FSRepopulationFocus !== "unset" || V.arcologies[0].FSGenderFundamentalist !== "unset") && slave.physicalAge === V.minimumSlaveAge && slave.physicalAge === V.fertilityAge && canGetPregnant(slave)) { + if ((FutureSocieties.isActive('FSRepopulationFocus') || FutureSocieties.isActive('FSGenderFundamentalist')) && slave.physicalAge === V.minimumSlaveAge && slave.physicalAge === V.fertilityAge && canGetPregnant(slave)) { adjustFResult(`Young and Fertile: Repopulationist/Gender Fundamentalist`, 1); if (slave.birthWeek === 0) { adjustFResult(`Newborn and Fertile: Repopulationist/Gender Fundamentalist`, result); @@ -2198,7 +2199,7 @@ globalThis.FResultArray = (function() { } else if (slave.birthWeek < 4) { adjustFResult(`Very Young`, 0.1 * result); } - } else if ((V.arcologies[0].FSRepopulationFocus !== "unset" || V.arcologies[0].FSGenderFundamentalist !== "unset") && slave.physicalAge === V.fertilityAge && canGetPregnant(slave)) { + } else if ((FutureSocieties.isActive('FSRepopulationFocus') || FutureSocieties.isActive('FSGenderFundamentalist')) && slave.physicalAge === V.fertilityAge && canGetPregnant(slave)) { adjustFResult(`Young and Fertile: Repopulationist/Gender Fundamentalist`, 1); if (slave.birthWeek === 0) { adjustFResult(`Newborn and Fertile: Repopulationist/Gender Fundamentalist`, 0.5 * result); @@ -2420,6 +2421,7 @@ globalThis.slaveCost = function(slave, isStartingSlave = false, followLaws = fal */ globalThis.slaveCostBeauty = function(slave, isStartingSlave, followLaws, isSpecial, modifiers) { const arcology = V.arcologies[0]; + const arcologyInfo = new App.Utils.Arcology(arcology); let multiplier = V.slaveCostFactor; let cost = Beauty(slave) * FResult(slave, 1); const map = new Map([]); @@ -2529,7 +2531,7 @@ globalThis.slaveCostBeauty = function(slave, isStartingSlave, followLaws, isSpec if (slave.behavioralQuirk !== "none") { updateMultiplier(`behavioral quirk`, 0.1); } - if (slave.sexualFlaw === "breeder" && arcology.FSRepopulationFocus !== "unset") { + if (slave.sexualFlaw === "breeder" && arcologyInfo.fsActive('FSRepopulationFocus')) { updateMultiplier(`sexual flaw, but a breeder`, 0.3); } else if (slave.sexualFlaw !== "none") { updateMultiplier(`sexual flaw`, -0.1); @@ -2624,21 +2626,21 @@ globalThis.slaveCostBeauty = function(slave, isStartingSlave, followLaws, isSpec } } if (V.seeCats === 1 && slave.race === "catgirl") { - if (arcology.FSBodyPurist === "unset" && V.projectN.techReleased === 1) { + if (!arcologyInfo.fsActive('FSBodyPurist') && V.projectN.techReleased === 1) { updateMultiplier(`catgirl`, 0.5); - } else if (arcology.FSBodyPurist === "unset" && V.projectN.techReleased === 0) { + } else if (!arcologyInfo.fsActive('FSBodyPurist') && V.projectN.techReleased === 0) { updateMultiplier(`catgirl`, 0.9); - } else if (arcology.FSBodyPurist !== "unset" && arcology.FSBodyPuristCatLaw === 0) { + } else if (arcologyInfo.fsActive('FSBodyPurist') && arcology.FSBodyPuristCatLaw === 0) { updateMultiplier(`catgirl`, -0.5); - } else if (arcology.FSBodyPurist !== "unset" && arcology.FSBodyPuristCatLaw === 1 && V.projectN.techReleased === 1) { + } else if (arcologyInfo.fsActive('FSBodyPurist') && arcology.FSBodyPuristCatLaw === 1 && V.projectN.techReleased === 1) { updateMultiplier(`catgirl`, 0.5); - } else if (arcology.FSBodyPurist !== "unset" && arcology.FSBodyPuristCatLaw === 1 && V.projectN.techReleased === 0) { + } else if (arcologyInfo.fsActive('FSBodyPurist') && arcology.FSBodyPuristCatLaw === 1 && V.projectN.techReleased === 0) { updateMultiplier(`catgirl`, 0.9); } - if (arcology.FSEgyptianRevivalist !== "unset") { + if (arcologyInfo.fsActive('FSEgyptianRevivalist')) { updateMultiplier(`egyptian catgirl`, 0.2); } - if (arcology.FSTransformationFetishist !== "unset") { + if (arcologyInfo.fsActive('FSTransformationFetishist')) { updateMultiplier(`transformation catgirl`, 0.2); } } @@ -2667,7 +2669,7 @@ globalThis.slaveCostBeauty = function(slave, isStartingSlave, followLaws, isSpec if (slave.balls > 0) { updateMultiplier(`gender fundamentalist smr balls`, -0.1); } - } else if (arcology.FSGenderRadicalist !== "unset") { + } else if (arcologyInfo.fsActive('FSGenderRadicalist')) { if (slave.dick > 0) { updateMultiplier(`gender radicalist dick`, 0.1); } @@ -2682,7 +2684,7 @@ globalThis.slaveCostBeauty = function(slave, isStartingSlave, followLaws, isSpec updateMultiplier(`petite admiration smr`, -0.1); } } - if (arcology.FSSlaveProfessionalism !== "unset") { + if (arcologyInfo.fsActive('FSSlaveProfessionalism')) { updateMultiplier(`slave professionalism`, 0.1 * (slave.intelligence / 20)); } if (arcology.FSHedonisticDecadenceSMR !== 0) { @@ -2702,7 +2704,7 @@ globalThis.slaveCostBeauty = function(slave, isStartingSlave, followLaws, isSpec * @param {App.Entity.SlaveState} slave */ function calcAgeCost(slave) { - if (slave.physicalAge === V.minimumSlaveAge && slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcology.FSRepopulationFocus !== "unset" || arcology.FSGenderFundamentalist !== "unset")) { + if (slave.physicalAge === V.minimumSlaveAge && slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcologyInfo.fsActive('FSRepopulationFocus') || arcologyInfo.fsActive('FSGenderFundamentalist'))) { if (slave.birthWeek === 0) { updateMultiplier(`birthWeek`, 0.4); } else if (slave.birthWeek < 4) { @@ -2710,7 +2712,7 @@ globalThis.slaveCostBeauty = function(slave, isStartingSlave, followLaws, isSpec } } else if ( slave.physicalAge === V.minimumSlaveAge || - (slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcology.FSRepopulationFocus !== "unset" || arcology.FSGenderFundamentalist !== "unset")) + (slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcologyInfo.fsActive('FSRepopulationFocus') || arcologyInfo.fsActive('FSGenderFundamentalist'))) ) { if (slave.birthWeek === 0) { updateMultiplier(`birthWeek`, 0.2); @@ -2831,7 +2833,7 @@ globalThis.slaveCostBeauty = function(slave, isStartingSlave, followLaws, isSpec /* make absolutely certain we do not use +-131 in the next line */ updateMultiplier(`intelligence`, Math.floor((Math.asin(totalInt / 131)) * 50) / 50); - if (slave.pubertyXY === 0 && slave.physicalAge >= V.potencyAge && slave.genes === "XY" && arcology.FSGenderRadicalist === "unset") { + if (slave.pubertyXY === 0 && slave.physicalAge >= V.potencyAge && slave.genes === "XY" && !arcologyInfo.fsActive('FSGenderRadicalist')) { updateMultiplier(`child`, 0.5); } if (slave.geneticQuirks.albinism === 2) { diff --git a/src/js/slaveSummaryHelpers.js b/src/js/slaveSummaryHelpers.js index e7932545f64dcd94e593e470f381a0e69915e12f..aa2cdc3d0e5fa5a10ef804715e757f86c7c9b958 100644 --- a/src/js/slaveSummaryHelpers.js +++ b/src/js/slaveSummaryHelpers.js @@ -157,12 +157,11 @@ App.UI.SlaveSummaryImpl = function() { function syncFSData(arcology) { arcology = arcology || V.arcologies[0]; for (const fsp of App.Data.FutureSociety.fsNames) { - /** @type {FC.FSPolicyValue} */ const policy = arcology[fsp]; const p = fsp.slice(2); FSData.policy[p] = { - active: (policy === "unset" || _.isNil(policy)) ? 0 : 1, - strength: Math.trunc(policy === "unset" ? 0 : policy / 10) + active: _.isNil(policy) ? 0 : 1, + strength: Math.trunc((policy ?? 0) / 10) }; } diff --git a/src/js/statsChecker/statsChecker.js b/src/js/statsChecker/statsChecker.js index 7ee73e40dc7c1651f0e9e906e575374499e83887..e25992d84e48d41cad05c2c3865a7722a6cda4b9 100644 --- a/src/js/statsChecker/statsChecker.js +++ b/src/js/statsChecker/statsChecker.js @@ -238,13 +238,13 @@ globalThis.isSlim = function(slave) { return (slimLawPass(slave) === 1); } if ((slave.boobs < 500) && (slave.butt < 3)) { - if ((slave.muscles <= 30) && (arcology.FSPhysicalIdealist === "unset") && (slave.weight <= 10) && (arcology.FSHedonisticDecadence === "unset")) { + if ((slave.muscles <= 30) && (!FutureSocieties.isActive('FSPhysicalIdealist', arcology)) && (slave.weight <= 10) && (!FutureSocieties.isActive('FSHedonisticDecadence', arcology))) { slim = true; - } else if (arcology.FSPhysicalIdealist !== "unset") { + } else if (FutureSocieties.isActive('FSPhysicalIdealist', arcology)) { if (((arcology.FSPhysicalIdealistStrongFat === 1) && (slave.weight <= 30)) || slave.weight <= 10) { slim = true; } - } else if ((arcology.FSHedonisticDecadence !== "unset") && (slave.weight <= 30)) { + } else if ((FutureSocieties.isActive('FSHedonisticDecadence', arcology)) && (slave.weight <= 30)) { if (arcology.FSHedonisticDecadenceStrongFat === 1 || slave.muscles <= 30) { slim = true; } @@ -255,7 +255,7 @@ globalThis.isSlim = function(slave) { /** * Returns if slave is considered a fashionable body shape or not by arcology laws. - * @param {App.Entity.SlaveState} slave + * @param {FC.HumanState} slave * @returns {number} 1: yes, 0: no */ globalThis.genderLawPass = function(slave) { @@ -263,11 +263,11 @@ globalThis.genderLawPass = function(slave) { const arcology = V.arcologies[0]; - if (arcology.FSPhysicalIdealist === "unset" && arcology.FSHedonisticDecadenceStrongFat === 0 && slave.muscles > 30) { + if (!FutureSocieties.isActive('FSPhysicalIdealist', arcology) && arcology.FSHedonisticDecadenceStrongFat === 0 && slave.muscles > 30) { /* muscle check */ genderLawPass = 0; } - if (arcology.FSHedonisticDecadence !== "unset" || arcology.FSPhysicalIdealistStrongFat === 1) { + if (FutureSocieties.isActive('FSHedonisticDecadence', arcology) || arcology.FSPhysicalIdealistStrongFat === 1) { /* weight check */ if (slave.weight > 130 || slave.weight <= -30) { genderLawPass = 0; @@ -275,7 +275,7 @@ globalThis.genderLawPass = function(slave) { } else if (Math.abs(slave.weight) > 30) { genderLawPass = 0; } - if (arcology.FSAssetExpansionist !== "unset") { + if (FutureSocieties.isActive('FSAssetExpansionist', arcology)) { if (slave.boobs < 1600 || slave.boobs > 4300 || slave.butt < 4 || slave.butt > 8) { genderLawPass = 0; } @@ -288,7 +288,7 @@ globalThis.genderLawPass = function(slave) { /** * Returns if slave is considered slim or not by Slimness Enthusiast Law. - * @param {App.Entity.SlaveState} slave + * @param {FC.HumanState} slave * @returns {number} 1: yes, 0: no */ globalThis.slimLawPass = function(slave) { @@ -297,10 +297,10 @@ globalThis.slimLawPass = function(slave) { if (arcology.FSSlimnessEnthusiastLaw === 1) { if ((slave.boobs < 300) && (slave.butt <= 1) && (slave.waist <= 10)) { - if ((arcology.FSPhysicalIdealist === "unset") && (arcology.FSHedonisticDecadenceStrongFat === 0) && (slave.muscles > 30)) { + if ((!FutureSocieties.isActive('FSPhysicalIdealist', arcology)) && (arcology.FSHedonisticDecadenceStrongFat === 0) && (slave.muscles > 30)) { /* muscle check*/ slimLawPass = 0; - } else if ((arcology.FSHedonisticDecadence !== "unset") || (arcology.FSPhysicalIdealistStrongFat === 1)) { + } else if ((FutureSocieties.isActive('FSHedonisticDecadence', arcology)) || (arcology.FSPhysicalIdealistStrongFat === 1)) { slimLawPass = 1; /* weight check*/ if (slave.weight > 30) { @@ -325,7 +325,7 @@ globalThis.slimLawPass = function(slave) { globalThis.heightPass = function(slave) { const arcology = V.arcologies[0]; - if (arcology.FSPetiteAdmiration !== "unset") { + if (FutureSocieties.isActive('FSPetiteAdmiration', arcology)) { if (arcology.FSPetiteAdmirationLaw2 === 1) { if (slave.height < Height.mean(slave) - 5) { return true; @@ -335,7 +335,7 @@ globalThis.heightPass = function(slave) { return true; } } - } else if (arcology.FSStatuesqueGlorification !== "unset") { + } else if (FutureSocieties.isActive('FSStatuesqueGlorification', arcology)) { if (arcology.FSStatuesqueGlorificationLaw2 === 1) { if (slave.height + shoeHeight(slave) > Height.mean(slave) + 5) { return true; @@ -351,7 +351,7 @@ globalThis.heightPass = function(slave) { /** * Returns slave bimbo body degree (FSIntellectualDependencyLawBeauty). - * @param {App.Entity.SlaveState} slave + * @param {FC.HumanState} slave * @returns {number} */ globalThis.bimboScore = function(slave) { @@ -542,7 +542,7 @@ globalThis.isStupid = function(slave) { globalThis.isSuperiorRace = function(slave) { const arcology = V.arcologies[0]; - if (!slave || arcology.FSSupremacist === "unset") { + if (!slave || !FutureSocieties.isActive('FSSupremacist', arcology)) { return null; } else { if (slave.race === arcology.FSSupremacistRace) { @@ -559,7 +559,7 @@ globalThis.isSuperiorRace = function(slave) { globalThis.isInferiorRace = function(slave) { const arcology = V.arcologies[0]; - if (!slave || arcology.FSSubjugationist === "unset") { + if (!slave || !FutureSocieties.isActive('FSSubjugationist', arcology)) { return null; } else { if (slave.race === arcology.FSSubjugationistRace) { diff --git a/src/js/storyJS.js b/src/js/storyJS.js index fab5189bd162e9cfe44944c7a6ca04095e123fc2..4a4fca2ffd7d09cef42ffeb6a52d9592a8cb0820 100644 --- a/src/js/storyJS.js +++ b/src/js/storyJS.js @@ -378,7 +378,7 @@ globalThis.lispReplace = function(text) { * @returns {number} */ globalThis.repGainSacrifice = function(slave, arcology) { - if (!slave || !arcology || arcology.FSAztecRevivalist === "unset" || arcology.FSAztecRevivalist <= 0) { + if (!slave || !arcology || !FutureSocieties.isActive('FSAztecRevivalist', arcology) || arcology.FSAztecRevivalist <= 0) { return 0; } return Math.ceil( diff --git a/src/js/utilsArcology.js b/src/js/utilsArcology.js index b4b86b0f3f0f3c74f3ab00daaba1a6e99b92ccf1..90275afbe5048815255cb93783caff0bd3457ce7 100644 --- a/src/js/utilsArcology.js +++ b/src/js/utilsArcology.js @@ -90,3 +90,72 @@ globalThis.menialPopCap = function() { } return {text: r, value: popCap}; }; + + +App.Utils.Arcology = class { + /** + * @param {FC.ArcologyState} [arcology] + */ + constructor(arcology) { + this._arcology = arcology ?? V.arcologies[0]; + } + + /** + * @param {FC.FutureSociety} fs + * @returns {boolean} + */ + fsActive(fs) { + return FutureSocieties.isActive(fs, this._arcology); + } + + /** + * @param {FC.FutureSociety[]} fses + * @returns {boolean} + */ + fsActiveSome(...fses) { + return fses.some((fs) => this.fsActive(fs)); + } + + /** + * @param {FC.FutureSociety[]} fses + * @returns {boolean} + */ + fsActiveEvery(...fses) { + return fses.every((fs) => this.fsActive(fs)); + } + + /** + * @param {FC.FutureSociety[]} fses + * @returns {number} + */ + countActive(...fses) { + return fses.reduce((count, fs) => this.fsActive(fs) ? count + 1 : count, 0); + } + + /** + * @returns {FC.RevivalSocietyFreeze[keyof FC.RevivalSocietyFreeze] | null} + */ + revivalSociety() { + console.assert(this.countActive('FSAztecRevivalist', 'FSEgyptianRevivalist', 'FSEdoRevivalist', 'FSArabianRevivalist', 'FSChineseRevivalist', 'FSNeoImperialist', 'FSRomanRevivalist', 'FSAntebellumRevivalist') <= 1); + + if (this.fsActive('FSAntebellumRevivalist')) { + return RevivalSociety.ANTEBELLUM; + } else if (this.fsActive('FSArabianRevivalist')) { + return RevivalSociety.ARABIAN; + } else if (this.fsActive('FSAztecRevivalist')) { + return RevivalSociety.AZTEC; + } else if (this.fsActive('FSChineseRevivalist')) { + return RevivalSociety.CHINESE; + } else if (this.fsActive('FSEdoRevivalist')) { + return RevivalSociety.EDO; + } else if (this.fsActive('FSEgyptianRevivalist')) { + return RevivalSociety.EGYPTIAN; + } else if (this.fsActive('FSNeoImperialist')) { + return RevivalSociety.NEO_IMPERIAL; + } else if (this.fsActive('FSRomanRevivalist')) { + return RevivalSociety.ROMAN; + } else { + return null; + } + } +}; diff --git a/src/js/utilsSlave.js b/src/js/utilsSlave.js index bda591463bd278851a894ec6c5eb7abb23d67db1..1ae04edf6fe5f33110a044ab6d537034ec2859e0 100644 --- a/src/js/utilsSlave.js +++ b/src/js/utilsSlave.js @@ -2398,7 +2398,7 @@ globalThis.DegradingName = function(slave) { if (slave.labia > 1) { suffixes.push("Curtains", "Flower", "Lips"); } - if (slave.breedingMark === 1 && V.propOutcome === 1 && V.arcologies[0].FSRestart !== "unset") { + if (slave.breedingMark === 1 && V.propOutcome === 1 && FutureSocieties.isActive('FSRestart')) { suffixes.push("Breeder", "Oven", "Womb"); } if (slave.butt > 5) { @@ -2927,6 +2927,9 @@ globalThis.ageSlave = function(slave, forceDevelopment = false) { if (slave.broodmother === 1) { slave.ovaryAge += 0.2; } + if ((slave.ovaries > 0 || slave.mpreg > 0) && slave.ovaryAge < 0) { + slave.ovaryAge = -100; // reset immortal ovaries every year + } if (slave.physicalAge <= 20 && (forceDevelopment || V.loliGrow > 0)) { App.EndWeek.Shared.physicalDevelopment(slave); } diff --git a/src/js/vignettes.js b/src/js/vignettes.js index e2cc17ab1cad8705d5119de36242831bf416be5c..283bdd252cd202f6022567543f84b0c224560c92 100644 --- a/src/js/vignettes.js +++ b/src/js/vignettes.js @@ -5,6 +5,7 @@ globalThis.GetVignette = function(slave) { /** @type {{text: string, type: string, effect: number}[]} */ let vignettes = []; + const arcInfo = new App.Utils.Arcology(V.arcologies[0]); const {he, him, his, hers, himself, boy, He} = getPronouns(slave); @@ -811,7 +812,7 @@ globalThis.GetVignette = function(slave) { effect: 2, }); } - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (arcInfo.fsActive('FSHedonisticDecadence')) { if (slave.weight < 10) { vignettes.push({ text: `${he} earned extra gratitude from a customer who misses ${boy}s without a spare tire around their middle,`, @@ -1417,7 +1418,7 @@ globalThis.GetVignette = function(slave) { }); } - if (V.arcologies[0].FSSupremacist !== "unset") { + if (arcInfo.fsActive('FSSupremacist')) { if (slave.race === V.arcologies[0].FSSupremacistRace) { vignettes.push({ text: `${he} lost a customer who couldn't bear to see a beautiful ${V.arcologies[0].FSSupremacistRace} be a whore,`, @@ -1445,7 +1446,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSSubjugationist !== "unset") { + if (arcInfo.fsActive('FSSubjugationist')) { if (slave.race === V.arcologies[0].FSSubjugationistRace) { vignettes.push({ text: `${he} had a bad time in general, since most of ${his} customers didn't care about ${addA(V.arcologies[0].FSSubjugationistRace)} prostitute's health or well-being,`, @@ -1454,7 +1455,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + if (arcInfo.fsActive('FSYouthPreferentialist')) { if (slave.visualAge > 35) { vignettes.push({ text: `${he} got repeat business from a customer who wants to keep their MILF fetish in the closet,`, @@ -1462,7 +1463,7 @@ globalThis.GetVignette = function(slave) { effect: 1, }); } - } else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSMaturityPreferentialist')) { if (slave.visualAge <= 20) { vignettes.push({ text: `${he} got repeat business from a customer who wants to keep their fetish for young ${boy}s in the closet,`, @@ -1471,7 +1472,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSGenderRadicalist !== "unset") { + if (arcInfo.fsActive('FSGenderRadicalist')) { if (slave.dick.isBetween(0, 3)) { vignettes.push({ text: `${he} got repeat business from a customer who is coming to terms with Gender Radicalism, and is unthreatened by ${his} little penis,`, @@ -1479,7 +1480,7 @@ globalThis.GetVignette = function(slave) { effect: 1, }); } - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderFundamentalist')) { if (slave.visualAge > 25) { vignettes.push({ text: `${he} got repeat business from a customer who thinks ${he} resembles their ex-wife, who would never let them fuck her butt,`, @@ -1488,7 +1489,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSRepopulationFocus !== "unset" || V.arcologies[0].FSRepopulationFocusSMR === 1) { + if (arcInfo.fsActive('FSRepopulationFocus') || V.arcologies[0].FSRepopulationFocusSMR === 1) { if (slave.pregType > 1 && slave.pregKnown > 1 && slave.belly >= 10000) { vignettes.push({ text: `${he} got repeat business from a customer who loves fucking ${boy}s with wombs filled by more than a single child,`, @@ -1503,7 +1504,7 @@ globalThis.GetVignette = function(slave) { effect: 1, }); } - } else if (V.arcologies[0].FSRestart !== "unset") { + } else if (arcInfo.fsActive('FSRestart')) { if (canGetPregnant(slave)) { vignettes.push({ text: `${he} got repeat business from a customer who misses the risk of getting a ${boy} pregnant,`, @@ -1512,7 +1513,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSPaternalist !== "unset") { + if (arcInfo.fsActive('FSPaternalist')) { if (slave.intelligence + slave.intelligenceImplant > 50) { vignettes.push({ text: `${he} got repeat business from a customer who likes to chat with intelligent prostitutes while fucking,`, @@ -1527,7 +1528,7 @@ globalThis.GetVignette = function(slave) { effect: 1, }); } - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (arcInfo.fsActive('FSDegradationist')) { if (V.seePee !== 0) { vignettes.push({ text: `a drunken customer needing to use the toilet stumbled into ${him} and unfortunately decided to use ${his} mouth to empty ${his} bladder. ${slave.slaveName} found this interaction to be utterly revolting,`, @@ -1626,7 +1627,7 @@ globalThis.GetVignette = function(slave) { effect: -1, }); } - if (V.arcologies[0].FSBodyPurist !== "unset") { + if (arcInfo.fsActive('FSBodyPurist')) { if (slave.boobsImplant > 0) { vignettes.push({ text: `${he} got repeat business from a customer who wants to keep their fetish for breast implants in the closet,`, @@ -1634,7 +1635,7 @@ globalThis.GetVignette = function(slave) { effect: 1, }); } - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (arcInfo.fsActive('FSTransformationFetishist')) { if (slave.boobsImplant === 0) { vignettes.push({ text: `${he} got repeat business from a customer who wants to keep their fetish for natural breasts in the closet,`, @@ -1650,7 +1651,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + if (arcInfo.fsActive('FSSlimnessEnthusiast')) { if (canTalk(slave) && slave.voice > 2) { vignettes.push({ text: `${he} got repeat business from a customer who loves ${his} high-pitched squeals of pleasure,`, @@ -1665,7 +1666,7 @@ globalThis.GetVignette = function(slave) { effect: -1, }); } - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (arcInfo.fsActive('FSAssetExpansionist')) { if (slave.boobs < 300) { vignettes.push({ text: `${he} got repeat business from a customer who wants to keep their fetish for flat chested ${boy}s in the closet,`, @@ -1674,7 +1675,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSPastoralist !== "unset") { + if (arcInfo.fsActive('FSPastoralist')) { if (slave.lactation === 0) { vignettes.push({ text: `${he} lost a customer who could not understand why nothing was coming out of ${his} nipples when they sucked on them,`, @@ -1701,7 +1702,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (arcInfo.fsActive('FSPhysicalIdealist')) { if (slave.muscles <= 95 && hasAnyArms(slave)) { vignettes.push({ text: `${he} lost a customer who could barely believe that ${he} wasn't capable of holding ${himself} in a handstand,`, @@ -1710,7 +1711,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSIntellectualDependency !== "unset") { + if (arcInfo.fsActive('FSIntellectualDependency')) { if (slave.energy < 70) { vignettes.push({ text: `${he} was called a dead fish by an irate customer unsatisfied by ${his} libido,`, @@ -1725,7 +1726,7 @@ globalThis.GetVignette = function(slave) { effect: 2, }); } - } else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + } else if (arcInfo.fsActive('FSSlaveProfessionalism')) { if (slave.intelligence + slave.intelligenceImplant > 95) { vignettes.push({ text: `${he} got repeat business from a customer that wanted to continue their post-coital conversation,`, @@ -1747,7 +1748,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { + if (arcInfo.fsActive('FSStatuesqueGlorification')) { if (!heightPass(slave)) { vignettes.push({ text: `${he} lost a customer who refused to be seen with such a short bitch,`, @@ -1771,7 +1772,7 @@ globalThis.GetVignette = function(slave) { effect: 1, }); } - } else if (V.arcologies[0].FSPetiteAdmiration !== "unset") { + } else if (arcInfo.fsActive('FSPetiteAdmiration')) { if (heightPass(slave)) { vignettes.push({ text: `${he} got repeat business from a customer whose crotch was the perfect height for ${his} mouth,`, @@ -1785,7 +1786,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSChattelReligionist !== "unset") { + if (arcInfo.fsActive('FSChattelReligionist')) { if (slave.behavioralFlaw === "devout") { vignettes.push({ text: `${he} got repeat business from a customer who desperately wants their cock to be the one that converts ${him},`, @@ -1793,63 +1794,63 @@ globalThis.GetVignette = function(slave) { effect: 1, }); } - if (V.arcologies[0].FSRomanRevivalist !== "unset") { + if (arcInfo.fsActive('FSRomanRevivalist')) { vignettes.push({ text: `a street preacher arguing that your new religion was the natural theological evolution of Roman mythology attracted a large crowd near ${him},`, type: "cash", effect: 1, }); } - if (V.arcologies[0].FSNeoImperialist !== "unset") { + if (arcInfo.fsActive('FSNeoImperialist')) { vignettes.push({ text: `a street preacher arguing that your new Imperium is the natural evolution of Western society after the collapse of the old world attracted a large crowd near ${him},`, type: "cash", effect: 1, }); } - if (V.arcologies[0].FSAztecRevivalist !== "unset") { + if (arcInfo.fsActive('FSAztecRevivalist')) { vignettes.push({ text: `a street preacher arguing that your new religion was the natural theological evolution of Aztec mythology attracted a large crowd near ${him},`, type: "cash", effect: 1, }); } - if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + if (arcInfo.fsActive('FSEgyptianRevivalist')) { vignettes.push({ text: `a street preacher arguing that your new religion was the natural theological evolution of Egyptian mythology attracted a large crowd near ${him},`, type: "cash", effect: 1, }); } - if (V.arcologies[0].FSArabianRevivalist !== "unset") { + if (arcInfo.fsActive('FSArabianRevivalist')) { vignettes.push({ text: `a street preacher arguing that your new religion was the natural theological evolution of Sunni Islam attracted a large crowd near ${him},`, type: "cash", effect: 1, }); } - if (V.arcologies[0].FSEdoRevivalist !== "unset") { + if (arcInfo.fsActive('FSEdoRevivalist')) { vignettes.push({ text: `a street preacher arguing that your new religion was the natural theological evolution of Shintoism attracted a large crowd near ${him},`, type: "cash", effect: 1, }); } - if (V.arcologies[0].FSChineseRevivalist !== "unset") { + if (arcInfo.fsActive('FSChineseRevivalist')) { vignettes.push({ text: `a street preacher arguing that your new religion was the natural theological evolution of Chinese folk religion attracted a large crowd near ${him},`, type: "cash", effect: 1, }); } - if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + if (arcInfo.fsActive('FSAntebellumRevivalist')) { vignettes.push({ text: `a street preacher arguing that your new religion is the natural theological evolution of Protestant Christianity attracted a large crowd near ${him},`, type: "cash", effect: 1, }); } - if (V.arcologies[0].FSSupremacist !== "unset") { + if (arcInfo.fsActive('FSSupremacist')) { if (V.arcologies[0].FSSupremacistRace === "asian") { vignettes.push({ text: `a street preacher arguing that your new religion was the natural theological evolution of Buddhism attracted a large crowd near ${him},`, @@ -1889,7 +1890,7 @@ globalThis.GetVignette = function(slave) { } } } - if (V.arcologies[0].FSRomanRevivalist !== "unset") { + if (arcInfo.fsActive('FSRomanRevivalist')) { if (slave.race === "white" && slave.height >= 185) { vignettes.push({ text: `${he} attracted a customer who thought ${his} appearance worthy of a lusty northern barbarian,`, @@ -1898,7 +1899,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSNeoImperialist !== "unset") { + if (arcInfo.fsActive('FSNeoImperialist')) { if (slave.face > 60) { vignettes.push({ text: `${he} received extra attention from one of your Barons who claimed ${him} to be 'fair enough for a Noble's eyes' and paid extra,`, @@ -1907,7 +1908,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSAztecRevivalist !== "unset") { + if (arcInfo.fsActive('FSAztecRevivalist')) { if (slave.devotion > 75 && slave.intelligence + slave.intelligenceImplant > 50) { vignettes.push({ text: `${he} indulged a citizen by following a fertility ritual completely,`, @@ -1916,14 +1917,14 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + if (arcInfo.fsActive('FSEgyptianRevivalist')) { vignettes.push({ text: `${he} got extra business from a group of citizens competing to get off with whores of each of the arcology's ethnic groups in the least time,`, type: "cash", effect: 1, }); } - if (V.arcologies[0].FSEdoRevivalist !== "unset") { + if (arcInfo.fsActive('FSEdoRevivalist')) { if (slave.face > 40 && slave.intelligence + slave.intelligenceImplant > 50) { vignettes.push({ text: `${he} got repeat business from a customer who wished to do nothing more than converse with a beautiful and intelligent ${boy},`, @@ -1937,7 +1938,7 @@ globalThis.GetVignette = function(slave) { effect: 1, }); } - if (V.arcologies[0].FSArabianRevivalist !== "unset") { + if (arcInfo.fsActive('FSArabianRevivalist')) { if (slave.skill.entertainment >= 100 && canTalk(slave) && slave.accent < 2) { vignettes.push({ text: `${he} got repeat business from a customer who prefers prostitutes who can tell lovely stories,`, @@ -1946,7 +1947,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSChineseRevivalist !== "unset") { + if (arcInfo.fsActive('FSChineseRevivalist')) { if (slave.dick > 0 && slave.balls === 0) { vignettes.push({ text: `a citizen admired ${his} lack of balls and praised ${him} for being like the eunuchs in Chinese history,`, @@ -1960,7 +1961,7 @@ globalThis.GetVignette = function(slave) { effect: 1, }); } - if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + if (arcInfo.fsActive('FSAntebellumRevivalist')) { if (slave.devotion > 75 && slave.sexualQuirk === "romantic") { vignettes.push({ text: `${he} received a generous tip from a gentleman infatuated with ${him},`, @@ -1971,7 +1972,7 @@ globalThis.GetVignette = function(slave) { } if (V.seeAge !== 0) { if (slave.birthWeek >= 51) { - if (V.arcologies[0].FSDegradationist !== "unset") { + if (arcInfo.fsActive('FSDegradationist')) { if (slave.voice !== 0) { vignettes.push({ text: `a group of frat boys found out it was ${his} birthday and took turns spanking ${him} until ${he} couldn't sit down and ${his} voice was hoarse,`, @@ -2853,8 +2854,8 @@ globalThis.GetVignette = function(slave) { type: "devotion", effect: -1, }); - } - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + } + if (arcInfo.fsActive('FSHedonisticDecadence')) { if (slave.weight < 10) { vignettes.push({ text: `${he} earned extra gratitude from a citizen who misses ${boy}s without a spare tire around their middle,`, @@ -3443,7 +3444,7 @@ globalThis.GetVignette = function(slave) { }); } - if (V.arcologies[0].FSSupremacist !== "unset") { + if (arcInfo.fsActive('FSSupremacist')) { if (slave.race === V.arcologies[0].FSSupremacistRace) { vignettes.push({ text: `${he} disappointed a citizen who couldn't bear to see a beautiful ${V.arcologies[0].FSSupremacistRace} be a public slut,`, @@ -3471,7 +3472,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSSubjugationist !== "unset") { + if (arcInfo.fsActive('FSSubjugationist')) { if (slave.race === V.arcologies[0].FSSubjugationistRace) { vignettes.push({ text: `${he} had a bad time in general, since most of the citizens who used ${him} didn't care about ${addA(V.arcologies[0].FSSubjugationistRace)} prostitute's health or well-being,`, @@ -3480,7 +3481,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSYouthPreferentialist !== "unset") { + if (arcInfo.fsActive('FSYouthPreferentialist')) { if (slave.visualAge > 35) { vignettes.push({ text: `${he} gratified a citizen who wants to keep his MILF fetish in the closet,`, @@ -3488,7 +3489,7 @@ globalThis.GetVignette = function(slave) { effect: 1, }); } - } else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") { + } else if (arcInfo.fsActive('FSMaturityPreferentialist')) { if (slave.visualAge <= 20) { vignettes.push({ text: `${he} gratified a citizen who wants to keep his fetish for young ${boy}s in the closet,`, @@ -3497,7 +3498,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSGenderRadicalist !== "unset") { + if (arcInfo.fsActive('FSGenderRadicalist')) { if (slave.dick.isBetween(0, 3)) { vignettes.push({ text: `${he} gratified a citizen who is coming to terms with Gender Radicalism, and is unthreatened by ${his} little penis,`, @@ -3505,7 +3506,7 @@ globalThis.GetVignette = function(slave) { effect: 1, }); } - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + } else if (arcInfo.fsActive('FSGenderFundamentalist')) { if (slave.visualAge > 25) { vignettes.push({ text: `${he} gratified a citizen who thinks ${he} resembles his ex-wife, who would never let him fuck her butt,`, @@ -3514,7 +3515,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSRepopulationFocus !== "unset" || V.arcologies[0].FSRepopulationFocusSMR === 1) { + if (arcInfo.fsActive('FSRepopulationFocus') || V.arcologies[0].FSRepopulationFocusSMR === 1) { if (slave.pregType > 1 && slave.pregKnown > 1 && slave.belly >= 10000) { vignettes.push({ text: `${he} gratified a citizen who enjoys the feeling of a womb filled with more than a single child,`, @@ -3529,7 +3530,7 @@ globalThis.GetVignette = function(slave) { effect: 1, }); } - } else if (V.arcologies[0].FSRestart !== "unset") { + } else if (arcInfo.fsActive('FSRestart')) { if (canGetPregnant(slave)) { vignettes.push({ text: `${he} gratified a citizen who misses the risk of getting a ${boy} pregnant,`, @@ -3538,7 +3539,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSPaternalist !== "unset") { + if (arcInfo.fsActive('FSPaternalist')) { if (slave.intelligence + slave.intelligenceImplant > 50) { vignettes.push({ text: `${he} gratified a citizen who likes to chat with intelligent prostitutes as they fuck ${him},`, @@ -3553,7 +3554,7 @@ globalThis.GetVignette = function(slave) { effect: 1, }); } - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (arcInfo.fsActive('FSDegradationist')) { if (V.seePee !== 0) { vignettes.push({ text: `a drunken citizen needing to use the toilet stumbled into ${him} and unfortunately decided to use ${his} mouth to empty ${his} bladder. ${slave.slaveName} found this interaction to be utterly revolting,`, @@ -3652,7 +3653,7 @@ globalThis.GetVignette = function(slave) { effect: -1, }); } - if (V.arcologies[0].FSBodyPurist !== "unset") { + if (arcInfo.fsActive('FSBodyPurist')) { if (slave.boobsImplant > 0) { vignettes.push({ text: `${he} gratified a citizen who wants to keep his fetish for breast implants in the closet,`, @@ -3660,7 +3661,7 @@ globalThis.GetVignette = function(slave) { effect: 1, }); } - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (arcInfo.fsActive('FSTransformationFetishist')) { if (slave.boobsImplant === 0) { vignettes.push({ text: `${he} gratified a citizen who wants to keep his fetish for natural breasts in the closet,`, @@ -3676,7 +3677,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + if (arcInfo.fsActive('FSSlimnessEnthusiast')) { if (canTalk(slave) && slave.voice > 2) { vignettes.push({ text: `${he} gratified a citizen who loves ${his} high-pitched squeals of pleasure,`, @@ -3691,7 +3692,7 @@ globalThis.GetVignette = function(slave) { effect: -1, }); } - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (arcInfo.fsActive('FSAssetExpansionist')) { if (slave.boobs < 300) { vignettes.push({ text: `${he} gratified a citizen who wants to keep his fetish for flat chested ${boy}s in the closet,`, @@ -3700,7 +3701,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSPastoralist !== "unset") { + if (arcInfo.fsActive('FSPastoralist')) { if (slave.lactation === 0) { vignettes.push({ text: `${he} disappointed a citizen who could not understand why nothing was coming out of ${his} nipples when he sucked on them,`, @@ -3727,7 +3728,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSPhysicalIdealist !== "unset") { + if (arcInfo.fsActive('FSPhysicalIdealist')) { if (slave.muscles <= 95 && hasAnyArms(slave)) { vignettes.push({ text: `${he} disappointed a citizen who could barely believe that ${he} wasn't capable of holding ${himself} in a handstand,`, @@ -3736,7 +3737,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSIntellectualDependency !== "unset") { + if (arcInfo.fsActive('FSIntellectualDependency')) { if (slave.energy < 70) { vignettes.push({ text: `${he} was called a dead fish by an irate citizen unsatisfied by ${his} libido,`, @@ -3751,7 +3752,7 @@ globalThis.GetVignette = function(slave) { effect: 1, }); } - } else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") { + } else if (arcInfo.fsActive('FSSlaveProfessionalism')) { if (slave.intelligence + slave.intelligenceImplant > 95) { vignettes.push({ text: `${he} spent a lot of time with a citizen that wanted a follow-up on their post-coital conversation,`, @@ -3773,7 +3774,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { + if (arcInfo.fsActive('FSStatuesqueGlorification')) { if (!heightPass(slave)) { vignettes.push({ text: `${he} upset a citizen who refused to be seen with such a short bitch,`, @@ -3797,7 +3798,7 @@ globalThis.GetVignette = function(slave) { effect: 1, }); } - } else if (V.arcologies[0].FSPetiteAdmiration !== "unset") { + } else if (arcInfo.fsActive('FSPetiteAdmiration')) { if (heightPass(slave)) { vignettes.push({ text: `${he} gratified a citizen whose crotch was the perfect height for ${his} mouth,`, @@ -3811,7 +3812,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSChattelReligionist !== "unset") { + if (arcInfo.fsActive('FSChattelReligionist')) { if (slave.behavioralFlaw === "devout") { vignettes.push({ text: `${he} gratified a citizen who desperately wants his cock to be the one that converts ${him},`, @@ -3819,63 +3820,63 @@ globalThis.GetVignette = function(slave) { effect: 1, }); } - if (V.arcologies[0].FSRomanRevivalist !== "unset") { + if (arcInfo.fsActive('FSRomanRevivalist')) { vignettes.push({ text: `a street preacher arguing that your new religion was the natural theological evolution of Roman mythology attracted a large crowd near ${him},`, type: "rep", effect: 1, }); } - if (V.arcologies[0].FSNeoImperialist !== "unset") { + if (arcInfo.fsActive('FSNeoImperialist')) { vignettes.push({ text: `a street preacher arguing that your new Imperium is the natural evolution of Western society after the collapse of the old world attracted a large crowd near ${him},`, type: "rep", effect: 1, }); } - if (V.arcologies[0].FSAztecRevivalist !== "unset") { + if (arcInfo.fsActive('FSAztecRevivalist')) { vignettes.push({ text: `a street preacher arguing that your new religion was the natural theological evolution of Aztec mythology attracted a large crowd near ${him},`, type: "rep", effect: 1, }); } - if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + if (arcInfo.fsActive('FSEgyptianRevivalist')) { vignettes.push({ text: `a street preacher arguing that your new religion was the natural theological evolution of Egyptian mythology attracted a large crowd near ${him},`, type: "rep", effect: 1, }); } - if (V.arcologies[0].FSArabianRevivalist !== "unset") { + if (arcInfo.fsActive('FSArabianRevivalist')) { vignettes.push({ text: `a street preacher arguing that your new religion was the natural theological evolution of Sunni Islam attracted a large crowd near ${him},`, type: "rep", effect: 1, }); } - if (V.arcologies[0].FSEdoRevivalist !== "unset") { + if (arcInfo.fsActive('FSEdoRevivalist')) { vignettes.push({ text: `a street preacher arguing that your new religion was the natural theological evolution of Shintoism attracted a large crowd near ${him},`, type: "rep", effect: 1, }); } - if (V.arcologies[0].FSChineseRevivalist !== "unset") { + if (arcInfo.fsActive('FSChineseRevivalist')) { vignettes.push({ text: `a street preacher arguing that your new religion was the natural theological evolution of Chinese folk religion attracted a large crowd near ${him},`, type: "rep", effect: 1, }); } - if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + if (arcInfo.fsActive('FSAntebellumRevivalist')) { vignettes.push({ text: `a street preacher arguing that your new religion is the natural theological evolution of Protestant Christianity attracted a large crowd near ${him},`, type: "rep", effect: 1, }); } - if (V.arcologies[0].FSSupremacist !== "unset") { + if (arcInfo.fsActive('FSSupremacist')) { if (V.arcologies[0].FSSupremacistRace === "asian") { vignettes.push({ text: `a street preacher arguing that your new religion was the natural theological evolution of Buddhism attracted a large crowd near ${him},`, @@ -3915,7 +3916,7 @@ globalThis.GetVignette = function(slave) { } } } - if (V.arcologies[0].FSRomanRevivalist !== "unset") { + if (arcInfo.fsActive('FSRomanRevivalist')) { if (slave.race === "white" && slave.height >= 185) { vignettes.push({ text: `${he} gratified a citizen who thought ${his} appearance worthy of a lusty northern barbarian,`, @@ -3924,7 +3925,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSNeoImperialist !== "unset") { + if (arcInfo.fsActive('FSNeoImperialist')) { if (slave.face > 60) { vignettes.push({ text: `${he} received extra attention from one of your Barons who claimed ${him} to be 'fair enough for a Noble's eyes' and praised you for raising such fine slaves,`, @@ -3933,7 +3934,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSAztecRevivalist !== "unset") { + if (arcInfo.fsActive('FSAztecRevivalist')) { if (slave.devotion > 75 && slave.intelligence + slave.intelligenceImplant > 50) { vignettes.push({ text: `${he} indulged a citizen by following a fertility ritual completely,`, @@ -3942,14 +3943,14 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + if (arcInfo.fsActive('FSEgyptianRevivalist')) { vignettes.push({ text: `${he} got extra attention from a group of citizens competing to get off with whores of each of the arcology's ethnic groups in the least time,`, type: "rep", effect: 1, }); } - if (V.arcologies[0].FSEdoRevivalist !== "unset") { + if (arcInfo.fsActive('FSEdoRevivalist')) { if (slave.face > 40 && slave.intelligence + slave.intelligenceImplant > 50) { vignettes.push({ text: `${he} gratified a citizen who wished to do nothing more than converse with a beautiful and intelligent ${boy},`, @@ -3963,7 +3964,7 @@ globalThis.GetVignette = function(slave) { effect: 1, }); } - if (V.arcologies[0].FSArabianRevivalist !== "unset") { + if (arcInfo.fsActive('FSArabianRevivalist')) { if (slave.skill.entertainment >= 100 && canTalk(slave) && slave.voice > 0 && slave.accent < 2) { vignettes.push({ text: `${he} gratified a citizen who prefers prostitutes who can tell lovely stories,`, @@ -3972,7 +3973,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSChineseRevivalist !== "unset") { + if (arcInfo.fsActive('FSChineseRevivalist')) { if (slave.dick > 0 && slave.balls === 0) { vignettes.push({ text: `a citizen admired ${his} lack of balls and praised ${him} for being like the eunuchs in Chinese history,`, @@ -3986,7 +3987,7 @@ globalThis.GetVignette = function(slave) { effect: 1, }); } - if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + if (arcInfo.fsActive('FSAntebellumRevivalist')) { if (slave.devotion > 75 && slave.sexualQuirk === "romantic") { vignettes.push({ text: `${he} received a letter from a gentleman infatuated with ${him},`, @@ -3997,7 +3998,7 @@ globalThis.GetVignette = function(slave) { } if (V.seeAge !== 0) { if (slave.birthWeek >= 51) { - if (V.arcologies[0].FSDegradationist !== "unset") { + if (arcInfo.fsActive('FSDegradationist')) { if (slave.voice !== 0) { vignettes.push({ text: `a group of frat boys found out it was ${his} birthday and took turns spanking ${him} until ${he} couldn't sit down and ${his} voice was hoarse,`, @@ -4675,20 +4676,20 @@ globalThis.GetVignette = function(slave) { effect: -1, }); } - if (V.arcologies[0].FSPaternalist !== "unset") { + if (arcInfo.fsActive('FSPaternalist')) { vignettes.push({ text: `due to being ordered to rest, ${he} enjoyed a great deal of calm and relaxation thanks to your arcology's caretaking nature,`, type: "health", effect: 1, }); - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (arcInfo.fsActive('FSDegradationist')) { vignettes.push({ text: `despite being ordered to rest, ${he} was made subject to a lot of torture and pain because of your arcology's depraved nature,`, type: "health", effect: -1, }); } - if (V.arcologies[0].FSSupremacist !== "unset") { + if (arcInfo.fsActive('FSSupremacist')) { if (slave.intelligence + slave.intelligenceImplant > 50) { vignettes.push({ text: `${he} went to a local library, and was disturbed by all the racial supremacist historical revisionism on display,`, @@ -4703,7 +4704,7 @@ globalThis.GetVignette = function(slave) { }); } } - if (V.arcologies[0].FSSubjugationist !== "unset") { + if (arcInfo.fsActive('FSSubjugationist')) { if (slave.intelligence + slave.intelligenceImplant > 50) { vignettes.push({ text: `${he} went to a local library, and was disturbed by all the racial subjugationist historical revisionism on display,`, diff --git a/src/markets/marketUI.js b/src/markets/marketUI.js index 066f9ac62cb7ec9a2c096295b702cf971bc7b879..c0668c4b192ea609db3c612b3dce0bd385f0e22b 100644 --- a/src/markets/marketUI.js +++ b/src/markets/marketUI.js @@ -33,6 +33,12 @@ App.Markets.purchaseFramework = function(slaveMarket, {sTitleSingular = "slave", el.append(choices()); return el; + function interruptImageGeneration() { + if (V.seeImages === 1 && !V.seeCustomImagesOnly && V.imageChoice === 6) { + App.Art.GenAI.sdQueue.interrupt(); + } + } + function choices() { const el = document.createElement("p"); let title = {}; @@ -61,6 +67,7 @@ App.Markets.purchaseFramework = function(slaveMarket, {sTitleSingular = "slave", App.UI.DOM.link( title.decline, () => { + interruptImageGeneration(); jQuery("#slave-markets").empty().append(App.Markets[slaveMarket]); }, ) @@ -72,6 +79,7 @@ App.Markets.purchaseFramework = function(slaveMarket, {sTitleSingular = "slave", App.UI.DOM.link( title.buyAndKeepShopping, () => { + interruptImageGeneration(); cashX(forceNeg(cost), "slaveTransfer", slave); V.market.totalCost += cost; V.market.newSlaves.push(slave); @@ -92,6 +100,7 @@ App.Markets.purchaseFramework = function(slaveMarket, {sTitleSingular = "slave", App.UI.DOM.link( title.buyJustHer, () => { + interruptImageGeneration(); cashX(forceNeg(cost), "slaveTransfer", slave); V.market.totalCost += cost; V.market.newSlaves.push(slave); diff --git a/src/markets/specificMarkets/eliteSlave.js b/src/markets/specificMarkets/eliteSlave.js index 09f2c1745ccef9d143f73c0a48036fa72d1f78a0..24ab9b44b0d9c8d643248fe70db4a79ce2a8a0ac 100644 --- a/src/markets/specificMarkets/eliteSlave.js +++ b/src/markets/specificMarkets/eliteSlave.js @@ -20,9 +20,9 @@ App.Markets["Elite Slave"] = function() { maxAge = 40; } let race; - if (V.arcologies[0].FSSupremacist !== "unset") { + if (FutureSocieties.isActive('FSSupremacist')) { race = V.arcologies[0].FSSupremacistRace; - } else if (V.arcologies[0].FSSubjugationist !== "unset") { + } else if (FutureSocieties.isActive('FSSubjugationist')) { let races = ["amerindian", "asian", "asian", "asian", "asian", "asian", "asian", "black", "black", "indo-aryan", "indo-aryan", "latina", "latina", "latina", "malay", "malay", "middle eastern", "middle eastern", "mixed race", "pacific islander", "semitic", "semitic", "southern european", "southern european", "white", "white", "white", "white", "white", "white", "white", "white", "white"]; races = races.delete(V.arcologies[0].FSSubjugationistRace); race = races.random(); diff --git a/src/markets/specificMarkets/slaveMarkets.js b/src/markets/specificMarkets/slaveMarkets.js index 78e1bd7a73c925482d24c535d130064aa4272cad..677b143e8354533f600651d043b3efef7db37bc1 100644 --- a/src/markets/specificMarkets/slaveMarkets.js +++ b/src/markets/specificMarkets/slaveMarkets.js @@ -64,7 +64,7 @@ App.Markets.kidnappers = function() { r.push(`the unmistakable slap of flesh on flesh,`); } r.push(`at least one of the slavers is amusing himself`); - if (V.arcologies[0].FSGenderFundamentalist === "unset") { + if (!FutureSocieties.isActive('FSGenderFundamentalist')) { r.push(`(or herself)`); } r.push(`back there.`); @@ -122,7 +122,7 @@ App.Markets.hunters = function() { r.push(`struggling followed by the slap of flesh on flesh,`); } r.push(`at least one of the runaway hunters is amusing himself`); - if (V.arcologies[0].FSGenderFundamentalist === "unset") { + if (!FutureSocieties.isActive('FSGenderFundamentalist')) { r.push(`(or herself)`); } r.push(`back there.`); @@ -152,7 +152,7 @@ App.Markets["underage raiders"] = function() { r.push(`the lewd, lubricated noise of someone giving a reluctant handjob,`); } r.push(`at least one of the raiders is amusing himself`); - if (V.arcologies[0].FSGenderFundamentalist === "unset") { + if (!FutureSocieties.isActive('FSGenderFundamentalist')) { r.push(`(or herself)`); } r.push(`back there.`); @@ -181,7 +181,7 @@ App.Markets.raiders = function() { r.push(`the lewd, lubricated noise of someone giving a reluctant handjob,`); } r.push(`at least one of the raiders is amusing himself`); - if (V.arcologies[0].FSGenderFundamentalist === "unset") { + if (!FutureSocieties.isActive('FSGenderFundamentalist')) { r.push(`(or herself)`); } r.push(`back there.`); diff --git a/src/markets/theMarket/marketData.js b/src/markets/theMarket/marketData.js index f8675da458ddde64cfaee4e0982422d3418f0e48..0f3cf97d65f91d2c63d12e4797be69a05e45cf31 100644 --- a/src/markets/theMarket/marketData.js +++ b/src/markets/theMarket/marketData.js @@ -93,7 +93,7 @@ App.Data.Markets = { marketType: "wetware", note: "Ruined bodies but keen minds. Requires some TLC, but offers outstanding training at a discount.", encyclopedia: "Wetware CPUs", - get requirements() { return (V.arcologies[0].FSPaternalist === "unset") ? true : `The paternalistic nature of your society blocks the abusive Wetware CPU manufactures from operating within your arcology.`; } + get requirements() { return !FutureSocieties.isActive('FSPaternalist') ? true : `The paternalistic nature of your society blocks the abusive Wetware CPU manufactures from operating within your arcology.`; } }, { title: "Prisoner Sale", @@ -213,7 +213,7 @@ App.Data.Markets = { encyclopedia: "Discarded Slaves", bulkAvailable: false, get requirements() { - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { return `The Slave Shelter does not place slaves into Degradationist arcologies.`; } else if (V.shelterAbuse > 10) { return `The Slave Shelter has banned you due to dark rumors about you.`; diff --git a/src/markets/theMarket/tradeMenials.js b/src/markets/theMarket/tradeMenials.js index 38b8b481abe9ab917a9d0f09ded56040303632cf..1df61ac2553fd1ddae73044cbc4b52f2ea091c29 100644 --- a/src/markets/theMarket/tradeMenials.js +++ b/src/markets/theMarket/tradeMenials.js @@ -18,7 +18,7 @@ App.UI.tradeMenials = function(menialWorkersOnly) { el.append(menialTrading()); if (!menialWorkersOnly) { - if (V.arcologies[0].FSPaternalist === "unset") { + if (!FutureSocieties.isActive('FSPaternalist')) { el.append(fuckDollConversion()); el.append(fuckDollTrading()); } @@ -349,13 +349,13 @@ App.UI.tradeMenials = function(menialWorkersOnly) { el.append(`You own ${num(Math.trunc(V.fuckdolls))} standard Fuckdolls. `); } else if (V.fuckdolls > 0) { el.append(`You own one standard Fuckdoll. `); - } else if (V.arcologies[0].FSPaternalist === "unset") { + } else if (!FutureSocieties.isActive('FSPaternalist')) { el.append(`You do not own any standard Fuckdolls. `); } - if ((V.fuckdolls > 0) || (V.arcologies[0].FSPaternalist === "unset")) { + if ((V.fuckdolls > 0) || !FutureSocieties.isActive('FSPaternalist')) { App.Events.addNode(el, [`The market price of standard Fuckdolls is <span class="cash">${cashFormat(menialPrice)}.</span>`]); if (bulkMax > 0) { - if (V.arcologies[0].FSPaternalist === "unset" && V.cash > menialPrice) { + if (!FutureSocieties.isActive('FSPaternalist') && V.cash > menialPrice) { linkArray = []; const buySomeFuckdolls = function(number = 1) { const value = forceNeg(menialSlaveCost(number) * number); @@ -449,13 +449,13 @@ App.UI.tradeMenials = function(menialWorkersOnly) { el.append(`You own ${num(Math.trunc(V.menialBioreactors))} standard bioreactors. `); } else if (V.menialBioreactors > 0) { el.append(`You own one standard bioreactor. `); - } else if (V.arcologies[0].FSPaternalist === "unset") { + } else if (!FutureSocieties.isActive('FSPaternalist')) { el.append(`You do not own any standard bioreactors. `); } - if ((V.menialBioreactors > 0) || (V.arcologies[0].FSPaternalist === "unset")) { + if ((V.menialBioreactors > 0) || !FutureSocieties.isActive('FSPaternalist')) { App.Events.addNode(el, [`The market price of standard bioreactors is <span class='cash'>${cashFormat(menialPrice - 100)}.</span>`]); if (bulkMax > 0) { - if (V.arcologies[0].FSPaternalist === "unset" && V.cash > menialPrice) { + if (!FutureSocieties.isActive('FSPaternalist') && V.cash > menialPrice) { linkArray = []; const buySomeBioreactors = function(number = 1) { const value = forceNeg(menialSlaveCost(number - 100) * number); diff --git a/src/neighbor/arcologyDiplomacy.js b/src/neighbor/arcologyDiplomacy.js index 2bce76fea10aeba8f349280f7d3660a41ea002a9..6729c9dff9df73be7152d4699e2cbfd8edd51686 100644 --- a/src/neighbor/arcologyDiplomacy.js +++ b/src/neighbor/arcologyDiplomacy.js @@ -26,9 +26,9 @@ App.Neighbor.opinion = function(activeArcology, targetArcology) { // unshared but uncontested multiculturalism gets a relationship bonus if (!shared.includes("FSNull") && !conflicting.some((pair) => pair.includes("FSNull"))) { - if (activeArcology.FSNull !== "unset") { + if (FutureSocieties.isActive('FSNull', activeArcology)) { opinion += activeArcology.FSNull; - } else if (targetArcology.FSNull !== "unset") { + } else if (FutureSocieties.isActive('FSNull', targetArcology)) { opinion += targetArcology.FSNull; } } diff --git a/src/neighbor/neighborDescription.js b/src/neighbor/neighborDescription.js index 05db793a7ecf8b7822a3613a1d5441c1e46c583b..acea76adee0663e015e43a63ce7b9d948505ec9f 100644 --- a/src/neighbor/neighborDescription.js +++ b/src/neighbor/neighborDescription.js @@ -225,7 +225,7 @@ App.UI.neighborDescription = function(i) { for (const fs of App.Data.FutureSociety.fsNames) { const fsScore = V.arcologies[i][fs]; - if (fsScore !== "unset" && fsScore > 0) { + if (fsScore > 0) { if (fsScore > 80) { desc = "committed to "; } else if (fsScore > 20) { diff --git a/src/neighbor/neighborInteract.js b/src/neighbor/neighborInteract.js index c5d724a3c4f3e88304149f8efa2097f7e750a096..3d57af47c0ce43d8028319bbc31fa65ccbc107b5 100644 --- a/src/neighbor/neighborInteract.js +++ b/src/neighbor/neighborInteract.js @@ -363,7 +363,7 @@ App.Neighbor.Interact = function() { container.append(document.createElement("br")); const forceAbandonment = (fs) => { - V.arcologies[arcID][fs] = "unset"; + V.arcologies[arcID][fs] = null; arcChanged(arcID); }; for (const fs of FutureSocieties.activeFSes(V.arcologies[arcID])) { diff --git a/src/npc/bodyguard/bgDescription.js b/src/npc/bodyguard/bgDescription.js index 0c74ac9329a7f1b7b9efa103782c4dd541f4f19c..b9039febac7c407af215c502ff8a3c9e644e2ba6 100644 --- a/src/npc/bodyguard/bgDescription.js +++ b/src/npc/bodyguard/bgDescription.js @@ -35,26 +35,19 @@ App.Desc.bodyguard = function(slave) { function bgWeapon() { const w = []; + const arcInfo = new App.Utils.Arcology(V.arcologies[0]); if ((slave.muscles + slave.height - 100) / 25 > 5) { w.push(`${He} has a long ceramic`); - if (V.arcologies[0].FSRomanRevivalist !== "unset") { - w.push('spatha'); - } else if (V.arcologies[0].FSNeoImperialist !== "unset") { - w.push(`claymore`); - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { - w.push(`shotel`); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { - w.push(`odachi`); - } else if (V.arcologies[0].FSArabianRevivalist !== "unset") { - w.push(`kilij`); - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { - w.push(`changdao`); - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { - w.push(`macuahuitl`); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { - w.push(`saber`); - } else { - w.push(``); + switch (arcInfo.revivalSociety()) { + case RevivalSociety.ROMAN: w.push('spatha'); break; + case RevivalSociety.NEO_IMPERIAL: w.push(`claymore`); break; + case RevivalSociety.EGYPTIAN: w.push(`shotel`); break; + case RevivalSociety.EDO: w.push(`odachi`); break; + case RevivalSociety.ARABIAN: w.push(`kilij`); break; + case RevivalSociety.CHINESE: w.push(`changdao`); break; + case RevivalSociety.AZTEC: w.push(`macuahuitl`); break; + case RevivalSociety.ANTEBELLUM: w.push(`saber`); break; + case null: w.push(``); break; } w.push(`sword strapped to ${his} back,`); switch (slave.nationality) { @@ -169,24 +162,16 @@ App.Desc.bodyguard = function(slave) { w.push(`slung crosswise on ${his} chest.`); } else if ((slave.muscles + slave.height - 100) / 25 > 4) { w.push(`${He} has a ceramic`); - if (V.arcologies[0].FSRomanRevivalist !== "unset") { - w.push('gladius'); - } else if (V.arcologies[0].FSNeoImperialist !== "unset") { - w.push(`kightly`); - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { - w.push(`khopesh`); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { - w.push(`katana`); - } else if (V.arcologies[0].FSArabianRevivalist !== "unset") { - w.push(`shamshir`); - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { - w.push(`jian`); - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { - w.push(`macuahuitl`); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { - w.push(`saber`); - } else { - w.push(``); + switch (arcInfo.revivalSociety()) { + case RevivalSociety.ROMAN: w.push('gladius'); break; + case RevivalSociety.NEO_IMPERIAL: w.push(`kightly`); break; + case RevivalSociety.EGYPTIAN: w.push(`khopesh`); break; + case RevivalSociety.EDO: w.push(`katana`); break; + case RevivalSociety.ARABIAN: w.push(`shamshir`); break; + case RevivalSociety.CHINESE: w.push(`jian`); break; + case RevivalSociety.AZTEC: w.push(`macuahuitl`); break; + case RevivalSociety.ANTEBELLUM: w.push(`saber`); break; + case null: w.push(``); break; } w.push(`sword strapped to ${his} back`); switch (slave.nationality) { @@ -331,24 +316,16 @@ App.Desc.bodyguard = function(slave) { w.push(`slung across ${his} chest.`); } else if ((slave.muscles + slave.height - 100) / 25 > 3) { w.push(`${He} has a`); - if (V.arcologies[0].FSRomanRevivalist !== "unset") { - w.push('curved ceramic falcata'); - } else if (V.arcologies[0].FSNeoImperialist !== "unset") { - w.push(`straight ceramic estoc`); - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { - w.push(`sickle-shaped`); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { - w.push(`curved ceramic wakizashi`); - } else if (V.arcologies[0].FSArabianRevivalist !== "unset") { - w.push(`curved ceramic yatagan`); - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { - w.push(`curved ceramic dao`); - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { - w.push(`straight ceramic macuahuitl`); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { - w.push(`curved ceramic saber`); - } else { - w.push(`straight ceramic`); + switch (arcInfo.revivalSociety()) { + case RevivalSociety.ROMAN: w.push('curved ceramic falcata'); break; + case RevivalSociety.NEO_IMPERIAL: w.push('straight ceramic estoc'); break; + case RevivalSociety.EGYPTIAN: w.push('sickle-shaped'); break; + case RevivalSociety.EDO: w.push('curved ceramic wakizashi'); break; + case RevivalSociety.ARABIAN: w.push('curved ceramic yatagan'); break; + case RevivalSociety.CHINESE: w.push('curved ceramic dao'); break; + case RevivalSociety.AZTEC: w.push('straight ceramic macuahuitl'); break; + case RevivalSociety.ANTEBELLUM: w.push('curved ceramic saber'); break; + case null: w.push('straight ceramic'); break; } w.push(`sword strapped to ${his} back`); switch (slave.nationality) { @@ -459,24 +436,16 @@ App.Desc.bodyguard = function(slave) { w.push(`slung across ${his} chest.`); } else { w.push(`${He} has a short ceramic`); - if (V.arcologies[0].FSRomanRevivalist !== "unset") { - w.push('pugio'); - } else if (V.arcologies[0].FSNeoImperialist !== "unset") { - w.push(`baselard`); - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { - w.push(`acinaces`); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { - w.push(`tanto`); - } else if (V.arcologies[0].FSArabianRevivalist !== "unset") { - w.push(`jambiya`); - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { - w.push(`nandao`); - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { - w.push(`macuahuitl`); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { - w.push(`Bowie knife`); - } else { - w.push(``); + switch (arcInfo.revivalSociety()) { + case RevivalSociety.ROMAN: w.push('pugio'); break; + case RevivalSociety.NEO_IMPERIAL: w.push('baselard'); break; + case RevivalSociety.EGYPTIAN: w.push('acinaces'); break; + case RevivalSociety.EDO: w.push('tanto'); break; + case RevivalSociety.ARABIAN: w.push('jambiya'); break; + case RevivalSociety.CHINESE: w.push('nandao'); break; + case RevivalSociety.AZTEC: w.push('macuahuitl'); break; + case RevivalSociety.ANTEBELLUM: w.push('Bowie knife'); break; + case null: w.push(''); break; } w.push(`sword strapped to ${his} back`); switch (slave.nationality) { diff --git a/src/npc/children/childInteract.tw b/src/npc/children/childInteract.tw index 8eb63961b6d5901f78c6b8fe7094b6d7c09871e0..706bffdf04aba5bc4e74f4e2be4357564cadc6dc 100644 --- a/src/npc/children/childInteract.tw +++ b/src/npc/children/childInteract.tw @@ -905,7 +905,7 @@ FIXME: <</if>> <</if>> - <<if $arcologies[0].FSRestart != "unset" && $activeChild.devotion > 20 && $activeChild.trust > 0 && $activeChild.choosesOwnClothes>> + <<if FutureSocieties.isActive('FSRestart') && $activeChild.devotion > 20 && $activeChild.trust > 0 && $activeChild.choosesOwnClothes>> <br> <<if $activeChild.choosesOwnChastity>> $He is allowed to decide whether $he to wear chastity devices. diff --git a/src/npc/children/childSummary.js b/src/npc/children/childSummary.js index b6544ea511be0236be28eefad32d040f87482253..4deb59b8be95feb2eeccf2f5abcd5db0e38f0727 100644 --- a/src/npc/children/childSummary.js +++ b/src/npc/children/childSummary.js @@ -482,31 +482,31 @@ App.Facilities.Nursery.ChildSummary = function(child) { } else if (child.weight <= 30) { r += `<strong>W+${V.summaryStats ? `[${child.weight}]` : ''}</strong> `; } else if (child.weight <= 95) { - if (child.hips > 1 || V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (child.hips > 1 || FutureSocieties.isActive('FSHedonisticDecadence')) { r += `<strong>W++${V.summaryStats ? `[${child.weight}]` : ''}</strong> `; } else { r += `<strong><span class="red">W++${V.summaryStats ? `[${child.weight}]` : ''}</span></strong> `; } } else if (child.weight <= 130) { - if (child.hips > 2 || V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (child.hips > 2 || FutureSocieties.isActive('FSHedonisticDecadence')) { r += `<strong>W+++${V.summaryStats ? `[${child.weight}]` : ''}</strong> `; } else { r += `<strong><span class="red">W+++${V.summaryStats ? `[${child.weight}]` : ''}</span></strong> `; } } else if (child.weight <= 160) { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { r += `<strong>W++++${V.summaryStats ? `[${child.weight}]` : ''}</strong> `; } else { r += `<strong><span class="red">W++++${V.summaryStats ? `[${child.weight}]` : ''}</span></strong> `; } } else if (child.weight <= 190) { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { r += `<strong>W+++++${V.summaryStats ? `[${child.weight}]` : ''}</strong> `; } else { r += `<strong><span class="red">W+++++${V.summaryStats ? `[${child.weight}]` : ''}</span></strong> `; } } else { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { r += `<strong>W++++++${V.summaryStats ? `[${child.weight}]` : ''}</strong> `; } else { r += `<strong><span class="red">W++++++${V.summaryStats ? `[${child.weight}]` : ''}</span></strong> `; @@ -533,31 +533,31 @@ App.Facilities.Nursery.ChildSummary = function(child) { } else if (child.weight <= 30) { r += `Plush ${V.summaryStats ? `[${child.weight}]`: ''}. `; } else if (child.weight <= 95) { - if (child.hips > 1 || V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (child.hips > 1 || FutureSocieties.isActive('FSHedonisticDecadence')) { r += `Nicely chubby${V.summaryStats ? `[${child.weight}]`: ''}. `; } else { r += `<span class="red">Overweight${V.summaryStats ? `[${child.weight}]`: ''}.</span> `; } } else if (child.weight <= 130) { - if (child.hips > 2 || V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (child.hips > 2 || FutureSocieties.isActive('FSHedonisticDecadence')) { r += `Pleasantly soft and shapely${V.summaryStats ? `[${child.weight}]`: ''}. `; } else { r += `<span class="red">Fat${V.summaryStats ? `[${child.weight}]`: ''}.</span> `; } } else if (child.weight <= 160) { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { r += `Amazingly voluptuous${V.summaryStats ? `[${child.weight}]`: ''}. `; } else { r += `<span class="red">Obese${V.summaryStats ? `[${child.weight}]`: ''}.</span> `; } } else if (child.weight <= 190) { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { r += `SSBBW${V.summaryStats ? `[${child.weight}]`: ''}. `; } else { r += `<span class="red">Super Obese${V.summaryStats ? `[${child.weight}]`: ''}.</span> `; } } else { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { r += `Perfectly massive${V.summaryStats ? `[${child.weight}]`: ''}. `; } else { r += `<span class="red">Dangerously Obese${V.summaryStats ? `[${child.weight}]`: ''}.</span> `; @@ -2109,13 +2109,13 @@ App.Facilities.Nursery.ChildSummary = function(child) { } else if (child.muscles > -6) { r += `Soft${V.summaryStats ? `[${child.muscles}]`: ''}`; } else if (child.muscles > -31) { - if (V.arcologies[0].FSPhysicalIdealist === "unset") { + if (!FutureSocieties.isActive('FSPhysicalIdealist')) { r += `<span class="red">Weak</span>${V.summaryStats ? `[${child.muscles}]`: ''}`; } else { r += `Soft${V.summaryStats ? `[${child.muscles}]`: ''}`; } } else if (child.muscles > -96) { - if (V.arcologies[0].FSPhysicalIdealist === "unset") { + if (!FutureSocieties.isActive('FSPhysicalIdealist')) { r += `<span class="red">Weak+</span>${V.summaryStats ? `[${child.muscles}]`: ''}`; } else { r += `Soft+${V.summaryStats ? `[${child.muscles}]`: ''}`; @@ -2185,11 +2185,11 @@ App.Facilities.Nursery.ChildSummary = function(child) { function shortHips(child) { r += `<span class="red">`; if (child.hips < -1) { - if (child.butt > 2 && (V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset")) { + if (child.butt > 2 && (V.arcologies[0].FSTransformationFetishist < 20 || !FutureSocieties.isActive('FSTransformationFetishist')) && (V.arcologies[0].FSHedonisticDecadence < 20 || !FutureSocieties.isActive('FSHedonisticDecadence'))) { r += `Disp+`; } } else if (child.hips < 0) { - if (child.butt > 4 && (V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset")) { + if (child.butt > 4 && (V.arcologies[0].FSTransformationFetishist < 20 || !FutureSocieties.isActive('FSTransformationFetishist')) && (V.arcologies[0].FSHedonisticDecadence < 20 || !FutureSocieties.isActive('FSHedonisticDecadence'))) { r += `Disp+`; } } else if (child.hips > 2) { @@ -2197,23 +2197,23 @@ App.Facilities.Nursery.ChildSummary = function(child) { r += `Disp-`; } } else if (child.hips > 1) { - if (child.butt <= 3 && (V.arcologies[0].FSSlimnessEnthusiast === "unset" || (child.boobs >= 500))) { + if (child.butt <= 3 && (!FutureSocieties.isActive('FSSlimnessEnthusiast') || (child.boobs >= 500))) { r += `Disp-`; } } else if (child.hips > 0) { if (child.butt > 8) { - if ((V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset")) { + if ((V.arcologies[0].FSTransformationFetishist < 20 || !FutureSocieties.isActive('FSTransformationFetishist')) && (V.arcologies[0].FSHedonisticDecadence < 20 || !FutureSocieties.isActive('FSHedonisticDecadence'))) { r += `Disp+`; } - } else if (child.butt <= 2 && (V.arcologies[0].FSSlimnessEnthusiast === "unset" || (child.boobs >= 500))) { + } else if (child.butt <= 2 && (!FutureSocieties.isActive('FSSlimnessEnthusiast') || (child.boobs >= 500))) { r += `Disp-`; } } else { if (child.butt > 6) { - if ((V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset")) { + if ((V.arcologies[0].FSTransformationFetishist < 20 || !FutureSocieties.isActive('FSTransformationFetishist')) && (V.arcologies[0].FSHedonisticDecadence < 20 || !FutureSocieties.isActive('FSHedonisticDecadence'))) { r += `Disp+`; } - } else if (child.butt <= 1 && (V.arcologies[0].FSSlimnessEnthusiast === "unset" || (child.boobs >= 500))) { + } else if (child.butt <= 1 && (!FutureSocieties.isActive('FSSlimnessEnthusiast') || (child.boobs >= 500))) { r += `Disp-`; } } @@ -2435,13 +2435,13 @@ App.Facilities.Nursery.ChildSummary = function(child) { } else if (child.muscles > -6) { r += `Soft${V.summaryStats ? `[${child.muscles}]`: ''}. `; } else if (child.muscles > -31) { - if (V.arcologies[0].FSPhysicalIdealist === "unset") { + if (!FutureSocieties.isActive('FSPhysicalIdealist')) { r += `<span class="red">Weak${V.summaryStats ? `[${child.muscles}]`: ''}.</span> `; } else { r += `Weak${V.summaryStats ? `[${child.muscles}]`: ''}. `; } } else if (child.muscles > -96) { - if (V.arcologies[0].FSPhysicalIdealist === "unset") { + if (!FutureSocieties.isActive('FSPhysicalIdealist')) { r += `<span class="red">Very weak${V.summaryStats ? `[${child.muscles}]`: ''}.</span> `; } else { r += `Very weak${V.summaryStats ? `[${child.muscles}]`: ''}. `; @@ -2511,11 +2511,11 @@ App.Facilities.Nursery.ChildSummary = function(child) { function longHips(child) { r += `<span class="red">`; if (child.hips < -1) { - if (child.butt > 2 && (V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset")) { + if (child.butt > 2 && (V.arcologies[0].FSTransformationFetishist < 20 || !FutureSocieties.isActive('FSTransformationFetishist')) && (V.arcologies[0].FSHedonisticDecadence < 20 || !FutureSocieties.isActive('FSHedonisticDecadence')) && (V.arcologies[0].FSAssetExpansionist < 20 || !FutureSocieties.isActive('FSAssetExpansionist'))) { r += `Disproportionately big butt. `; } } else if (child.hips < 0) { - if (child.butt > 4 && (V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset")) { + if (child.butt > 4 && (V.arcologies[0].FSTransformationFetishist < 20 || !FutureSocieties.isActive('FSTransformationFetishist')) && (V.arcologies[0].FSHedonisticDecadence < 20 || !FutureSocieties.isActive('FSHedonisticDecadence')) && (V.arcologies[0].FSAssetExpansionist < 20 || !FutureSocieties.isActive('FSAssetExpansionist'))) { r += `Disproportionately big butt. `; } } else if (child.hips > 2) { @@ -2523,23 +2523,23 @@ App.Facilities.Nursery.ChildSummary = function(child) { r += `Disproportionately small butt. `; } } else if (child.hips > 1) { - if (child.butt <= 3 && ((V.arcologies[0].FSSlimnessEnthusiast === "unset") || (child.boobs >= 500))) { + if (child.butt <= 3 && ((!FutureSocieties.isActive('FSSlimnessEnthusiast')) || (child.boobs >= 500))) { r += `Disproportionately small butt. `; } } else if (child.hips > 0) { if (child.butt > 8) { - if ((V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset")) { + if ((V.arcologies[0].FSTransformationFetishist < 20 || !FutureSocieties.isActive('FSTransformationFetishist')) && (V.arcologies[0].FSHedonisticDecadence < 20 || !FutureSocieties.isActive('FSHedonisticDecadence')) && (V.arcologies[0].FSAssetExpansionist < 20 || !FutureSocieties.isActive('FSAssetExpansionist'))) { r += `Disproportionately big butt. `; } - } else if (child.butt <= 2 && ((V.arcologies[0].FSSlimnessEnthusiast === "unset") || (child.boobs >= 500))) { + } else if (child.butt <= 2 && ((!FutureSocieties.isActive('FSSlimnessEnthusiast')) || (child.boobs >= 500))) { r += `Disproportionately small butt. `; } } else { if (child.butt > 6) { - if ((V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset")) { + if ((V.arcologies[0].FSTransformationFetishist < 20 || !FutureSocieties.isActive('FSTransformationFetishist')) && (V.arcologies[0].FSHedonisticDecadence < 20 || !FutureSocieties.isActive('FSHedonisticDecadence')) && (V.arcologies[0].FSAssetExpansionist < 20 || !FutureSocieties.isActive('FSAssetExpansionist'))) { r += `Disproportionately big butt. `; } - } else if (child.butt <= 1 && ((V.arcologies[0].FSSlimnessEnthusiast === "unset") || (child.boobs >= 500))) { + } else if (child.butt <= 1 && ((!FutureSocieties.isActive('FSSlimnessEnthusiast')) || (child.boobs >= 500))) { r += `Disproportionately small butt. `; } } diff --git a/src/npc/children/customizeChild.tw b/src/npc/children/customizeChild.tw index 8570a66c24f9426a0080420f5f47895273716ec2..1d98f6f12d525847e462cbbf6cb8440014586d73 100644 --- a/src/npc/children/customizeChild.tw +++ b/src/npc/children/customizeChild.tw @@ -76,7 +76,7 @@ You may enter custom descriptors for the child's hair color, hair style, tattoos <<set $activeChild.slaveName = $activeChild.birthName>> <<run App.UI.SlaveInteract.rename($activeChild, {oldName:_oldName, oldSurname:_oldSurname})>> <</link>> - <<if $arcologies[0].FSPastoralist != "unset">> + <<if $arcologies[0].FSPastoralist != null>> <<if $activeChild.lactation > 0>> | <<link "Give $him a random cow given name">> <<set $activeChild.slaveName = setup.cowSlaveNames.random()>> @@ -90,7 +90,7 @@ You may enter custom descriptors for the child's hair color, hair style, tattoos <<run App.UI.SlaveInteract.rename($activeChild, {oldName:_oldName, oldSurname:_oldSurname})>> <</link>> <</if>> - <<if $arcologies[0].FSChattelReligionist != "unset">> + <<if $arcologies[0].FSChattelReligionist != null>> | <<link "Give $him a random devotional given name">> <<set $activeChild.slaveName = setup.chattelReligionistSlaveNames.random()>> <<run App.UI.SlaveInteract.rename($activeChild, {oldName:_oldName, oldSurname:_oldSurname})>> @@ -152,25 +152,25 @@ You may enter custom descriptors for the child's hair color, hair style, tattoos <</if>> <</if>> <</if>> - <<if $arcologies[0].FSRomanRevivalist != "unset">> + <<if $arcologies[0].FSRomanRevivalist != null>> | <<link "Give $him a random full Roman name">> <<set $activeChild.slaveName = setup.romanSlaveNames.random()>> <<set $activeChild.slaveSurname = setup.romanSlaveSurnames.random()>> <<run App.UI.SlaveInteract.rename($activeChild, {oldName:_oldName, oldSurname:_oldSurname})>> <</link>> - <<elseif $arcologies[0].FSAztecRevivalist != "unset">> + <<elseif $arcologies[0].FSAztecRevivalist != null>> | <<link "Give $him a random full Aztec name">> <<set $activeChild.slaveName = setup.aztecSlaveNames.random()>> <<set $activeChild.slaveSurname = 0>> <<run App.UI.SlaveInteract.rename($activeChild, {oldName:_oldName, oldSurname:_oldSurname})>> <</link>> - <<elseif $arcologies[0].FSEgyptianRevivalist != "unset">> + <<elseif $arcologies[0].FSEgyptianRevivalist != null>> | <<link "Give $him a random full ancient Egyptian name">> <<set $activeChild.slaveName = setup.ancientEgyptianSlaveNames.random()>> <<set $activeChild.slaveSurname = 0>> <<run App.UI.SlaveInteract.rename($activeChild, {oldName:_oldName, oldSurname:_oldSurname})>> <</link>> - <<elseif $arcologies[0].FSEdoRevivalist != "unset">> + <<elseif $arcologies[0].FSEdoRevivalist != null>> | <<link "Give $him a random full feudal Japanese name">> <<set $activeChild.slaveName = setup.edoSlaveNames.random()>> <<set $activeChild.slaveSurname = setup.edoSlaveSurnames.random()>> diff --git a/src/npc/children/longChildDescription.js b/src/npc/children/longChildDescription.js index 30c358e4d1ff681893ce2a78d3411f171dd15132..fa9a99a18590fa97610a9be631eadbc097c17b83 100644 --- a/src/npc/children/longChildDescription.js +++ b/src/npc/children/longChildDescription.js @@ -268,7 +268,7 @@ App.Facilities.Nursery.LongChildDescription = function(child, {market = 0, event if (child.energy > 95) { r += `The poor nympho looks painfully frustrated by this, and a long string of precum is dangling from the hole in the bottom of the cage. `; } - if (arcology.FSRestart !== "unset") { + if (FutureSocieties.isActive('FSRestart', arcology)) { r += `This pleases the Societal Elite. `; } } @@ -344,7 +344,7 @@ App.Facilities.Nursery.LongChildDescription = function(child, {market = 0, event break; } - if (child.chastityVagina && arcology.FSRestart !== "unset") { + if (child.chastityVagina && FutureSocieties.isActive('FSRestart', arcology)) { r += `This pleases the Societal Elite. `; } @@ -538,14 +538,14 @@ App.Facilities.Nursery.LongChildDescription = function(child, {market = 0, event r += `${He}'s got a `; if (child.butt <= 1) { r += `flat and `; - if (arcology.FSSlimnessEnthusiast > 20 && arcology.FSHedonisticDecadence === "unset") { + if (arcology.FSSlimnessEnthusiast > 20 && !FutureSocieties.isActive('FSHedonisticDecadence', arcology)) { r += `${either("attractive", "enticing", "fashionable")} `; } else { r += `${either("skinny", "slim", "taut")} `; } r += `ass. `; } else if (child.butt <= 2) { - if (arcology.FSSlimnessEnthusiast > 20 && arcology.FSHedonisticDecadence === "unset") { + if (arcology.FSSlimnessEnthusiast > 20 && !FutureSocieties.isActive('FSHedonisticDecadence', arcology)) { r += `${either("fashionable", "sleek and attractive", "small and enticing")} `; } else { r += `${either("small, sleek", "small but rounded", "rounded, small")} `; @@ -602,13 +602,13 @@ App.Facilities.Nursery.LongChildDescription = function(child, {market = 0, event } } - if (arcology.FSTransformationFetishist !== "unset") { + if (FutureSocieties.isActive('FSTransformationFetishist', arcology)) { if (child.buttImplant > 0) { r += `${His} rear is about Math.floor((child.buttImplant/child.butt)*100)>>% implant. `; } } if (arcology.FSTransformationFetishist > 20) { - if (arcology.FSSlimnessEnthusiast !== "unset") { + if (FutureSocieties.isActive('FSSlimnessEnthusiast', arcology)) { if (child.butt >= 3) { if (child.buttImplant / child.butt < .25) { r += `${His} ass is <span class="red">disgustingly natural</span> for its size. `; @@ -628,9 +628,9 @@ App.Facilities.Nursery.LongChildDescription = function(child, {market = 0, event } if (arcology.FSGenderFundamentalistLawBeauty + arcology.FSGenderRadicalistLawBeauty > 0) { - if (child.butt > 6 && arcology.FSAssetExpansionist !== "unset") { + if (child.butt > 6 && FutureSocieties.isActive('FSAssetExpansionist', arcology)) { r += `It's too big for the fashionable feminine ideal. `; - } else if (child.butt > 4 && arcology.FSAssetExpansionist !== "unset") { + } else if (child.butt > 4 && FutureSocieties.isActive('FSAssetExpansionist', arcology)) { r += `It's bigger than expected for the fashionable feminine ideal, but your arcology loves huge butts, so it's not a surprise. `; } else if (child.butt > 4) { r += `It's too big for the fashionable feminine ideal. `; @@ -2474,13 +2474,13 @@ App.Facilities.Nursery.LongChildDescription = function(child, {market = 0, event } } - if (arcology.FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist', arcology)) { if (child.faceImplant > 30) { r += `had some facial cosmetic surgery, though it's subtle. `; } else { r += `This is considered extremely tragic by a society that values bodily purity. `; } - } else if (arcology.FSTransformationFetishist !== "unset") { + } else if (FutureSocieties.isActive('FSTransformationFetishist', arcology)) { if (child.faceImplant > 30) { r += `Since society values bodily purity, even this subtlety affects ${his} attractiveness when it's noticed. `; } else { @@ -3747,11 +3747,11 @@ App.Facilities.Nursery.LongChildDescription = function(child, {market = 0, event if (child.hips < -1) { if (child.butt > 2) { r += `${His} butt is `; - if (arcology.FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence', arcology)) { r += `disproportionately large for ${his} narrow hips, but your hedonistic arcology finds this attractive. `; - } else if (arcology.FSTransformationFetishist !== "unset") { + } else if (FutureSocieties.isActive('FSTransformationFetishist', arcology)) { r += `disproportionately large for ${his} narrow hips, but your transformation fetishist arcology considers this attractive. `; - } else if (arcology.FSAssetExpansionist !== "unset") { + } else if (FutureSocieties.isActive('FSAssetExpansionist', arcology)) { r += `disproportionately large for ${his} narrow hips, but that's just fine to your asset expansionist society. `; } else { r += `<span class="red">disproportionately large</span> for ${his} narrow hips. `; @@ -3762,11 +3762,11 @@ App.Facilities.Nursery.LongChildDescription = function(child, {market = 0, event } else if (child.hips < 0) { if (child.butt > 4) { r += `${His} butt is `; - if (arcology.FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence', arcology)) { r += `disproportionately large for ${his} trim hips, but your hedonistic arcology finds this attractive. `; - } else if (arcology.FSTransformationFetishist !== "unset") { + } else if (FutureSocieties.isActive('FSTransformationFetishist', arcology)) { r += `disproportionately large for ${his} trim hips, but your transformation fetishist arcology considers this attractive. `; - } else if (arcology.FSAssetExpansionist !== "unset") { + } else if (FutureSocieties.isActive('FSAssetExpansionist', arcology)) { r += `disproportionately large for ${his} trim hips, but that's just fine to your asset expansionist society. `; } else { r += `<span class="red">disproportionately large</span> for ${his} trim hips. `; @@ -3781,42 +3781,42 @@ App.Facilities.Nursery.LongChildDescription = function(child, {market = 0, event r += `${His} butt is fitting for ${his} monstrous hips. `; } } else if (child.hips > 1) { - if (child.butt <= 3 && (arcology.FSSlimnessEnthusiast === "unset" || child.boobs >= 500)) { - r += `${His} butt is <span class="red">disproportionately small</span> for ${his} very wide hips${arcology.FSSlimnessEnthusiast !== "unset" ? `, which your arcology finds unattractive on busty slaves` : ``}. `; + if (child.butt <= 3 && (!FutureSocieties.isActive('FSSlimnessEnthusiast', arcology) || child.boobs >= 500)) { + r += `${His} butt is <span class="red">disproportionately small</span> for ${his} very wide hips${FutureSocieties.isActive('FSSlimnessEnthusiast', arcology) ? `, which your arcology finds unattractive on busty slaves` : ``}. `; } else { r += `${His} butt is flattered by ${his} very wide hips. `; } } else if (child.hips > 0) { if (child.butt > 8) { r += `${His} butt is `; - if (arcology.FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence', arcology)) { r += `disproportionately large for ${his} broad hips, but your hedonistic arcology finds this attractive. `; - } else if (arcology.FSTransformationFetishist !== "unset") { + } else if (FutureSocieties.isActive('FSTransformationFetishist', arcology)) { r += `disproportionately large for ${his} broad hips, but your transformation fetishist arcology considers this attractive. `; - } else if (arcology.FSAssetExpansionist !== "unset") { + } else if (FutureSocieties.isActive('FSAssetExpansionist', arcology)) { r += `disproportionately large for ${his} broad hips, but that's just fine to your asset expansionist society. `; } else { r += `<span class="red">disproportionately large</span> for ${his} broad hips. `; } - } else if (child.butt <= 2 && (arcology.FSSlimnessEnthusiast === "unset" || child.boobs >= 500)) { - r += `${His} butt is <span class="red">disproportionately small</span> for ${his} broad hips${arcology.FSSlimnessEnthusiast !== "unset" ? `, which your arcology finds unattractive on busty slaves` : ``}. `; + } else if (child.butt <= 2 && (!FutureSocieties.isActive('FSSlimnessEnthusiast', arcology) || child.boobs >= 500)) { + r += `${His} butt is <span class="red">disproportionately small</span> for ${his} broad hips${FutureSocieties.isActive('FSSlimnessEnthusiast', arcology) ? `, which your arcology finds unattractive on busty slaves` : ``}. `; } else { r += `${His} butt is complemented by ${his} broad hips. `; } } else { if (child.butt > 6) { r += `${His} butt is `; - if (arcology.FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence', arcology)) { r += `disproportionately large for ${his} womanly hips, but your hedonistic arcology finds this attractive. `; - } else if (arcology.FSTransformationFetishist !== "unset") { + } else if (FutureSocieties.isActive('FSTransformationFetishist', arcology)) { r += `disproportionately large for ${his} womanly hips, but your transformation fetishist arcology considers this attractive. `; - } else if (arcology.FSAssetExpansionist !== "unset") { + } else if (FutureSocieties.isActive('FSAssetExpansionist', arcology)) { r += `disproportionately large for ${his} womanly hips, but that's just fine to your asset expansionist society. `; } else { r += `<span class="red">disproportionately large</span> for ${his} womanly hips. `; } - } else if (child.butt <= 1 && (arcology.FSSlimnessEnthusiast === "unset" || child.boobs >= 500)) { - r += `${His} butt is <span class="red">disproportionately small</span> for ${his} ample hips${arcology.FSSlimnessEnthusiast !== "unset" ? `, which your arcology finds unattractive on busty slaves` : ``}. `; + } else if (child.butt <= 1 && (!FutureSocieties.isActive('FSSlimnessEnthusiast', arcology) || child.boobs >= 500)) { + r += `${His} butt is <span class="red">disproportionately small</span> for ${his} ample hips${FutureSocieties.isActive('FSSlimnessEnthusiast', arcology) ? `, which your arcology finds unattractive on busty slaves` : ``}. `; } else { r += `${His} butt is complemented by ${his} ample hips. `; } @@ -3923,7 +3923,7 @@ App.Facilities.Nursery.LongChildDescription = function(child, {market = 0, event } if (V.showImplantEffects) { - if (arcology.FSTransformationFetishist !== "unset") { + if (FutureSocieties.isActive('FSTransformationFetishist', arcology)) { if (child.lipsImplant > 0) { r += `They are about ${Math.floor((child.lipsImplant / child.lips) * 100)}% implant. `; } @@ -4356,9 +4356,9 @@ App.Facilities.Nursery.LongChildDescription = function(child, {market = 0, event r += `They're wider than ${his} hips, `; if (child.boobs > 2000 * (child.shoulders - child.hips)) { r += `but ${his} massive breasts make it hard to discern. `; - } else if (arcology.FSGenderRadicalist !== "unset") { + } else if (FutureSocieties.isActive('FSGenderRadicalist', arcology)) { r += `giving ${him} a somewhat mannish appearance. `; - } else if (arcology.FSGenderFundamentalist !== "unset") { + } else if (FutureSocieties.isActive('FSGenderFundamentalist', arcology)) { r += `giving ${him} an <span class="red">ugly, mannish appearance.</span> `; } else { r += `giving ${him} an <span class="red">unattractive, somewhat mannish, appearance.</span> `; @@ -6430,7 +6430,7 @@ App.Facilities.Nursery.LongChildDescription = function(child, {market = 0, event r += `${He}'s <span class="green">insecure,</span> defining ${his} self worth by how much others want to fuck ${him}. `; break; case "sinful": - if (arcology.FSChattelReligionist === "unset") { + if (!FutureSocieties.isActive('FSChattelReligionist', arcology)) { r += `${He}'s delightfully <span class="green">sinful,</span> taking real pleasure in breaking cultural mores. `; } else { r += `${He}'s a devout Chattel Religionist, and is aggressively <span class="green">sinful</span> against old world faiths. ${He} is enthusiastic about slutty religious clothing, and excited by intentional sacrilege like openly using old world religious icons as sex toys or having orgies on altars. `; @@ -6890,7 +6890,7 @@ App.Facilities.Nursery.LongChildDescription = function(child, {market = 0, event r += `${He}'s <span class="green">insecure,</span> defining ${his} self worth by how much others want to fuck ${him}. `; break; case "sinful": - if (arcology.FSChattelReligionist === "unset") { + if (!FutureSocieties.isActive('FSChattelReligionist', arcology)) { r += `${He}'s delightfully <span class="green">sinful,</span> taking real pleasure in breaking cultural mores. `; } else { r += `${He}'s a devout Chattel Religionist, and is aggressively <span class="green">sinful</span> against old world faiths. ${He} is enthusiastic about slutty religious clothing, and excited by intentional sacrilege like openly using old world religious icons as sex toys or having orgies on altars. `; @@ -7495,19 +7495,19 @@ App.Facilities.Nursery.LongChildDescription = function(child, {market = 0, event r += ` and `; if (child.weight > 190) { - if (arcology.FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence', arcology)) { r += `${either("perfectly curvy", "perfectly plush")}. `; } else { r += `<span class="red">${either("dangerously fat", "dangerously overweight", "extremely obese")}.</span> `; } } else if (child.weight > 160) { - if (arcology.FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence', arcology)) { r += `${either("spectacularly curvy", "spectacularly plush")}. `; } else { r += `<span class="red">${either("extremely fat", "extremely overweight")}.</span> `; } } else if (child.weight > 130) { - if (arcology.FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence', arcology)) { r += `${either("amazingly curvy", "amazingly plush")}. `; } else { r += `<span class="red">${either("very overweight", "obese", "very fat")}.</span> `; @@ -7515,7 +7515,7 @@ App.Facilities.Nursery.LongChildDescription = function(child, {market = 0, event } else if (child.weight > 95) { if (child.hips > 1) { r += `${either("extremely curvy", "extremely plush")}, but ${his} huge hips make the extra weight attractive on ${him}. `; - } else if (arcology.FSHedonisticDecadence !== "unset") { + } else if (FutureSocieties.isActive('FSHedonisticDecadence', arcology)) { r += `${either("extremely curvy", "extremely plush")}. `; } else { r += `<span class="red">${either("carrying a lot of extra weight", "fat", "overweight")}.</span> `; @@ -7523,7 +7523,7 @@ App.Facilities.Nursery.LongChildDescription = function(child, {market = 0, event } else if (child.weight > 30) { if (child.hips > 1) { r += `${either("quite curvy", "very plush")}, but ${his} motherly hips make the extra weight attractive on ${him}. `; - } else if (arcology.FSHedonisticDecadence !== "unset") { + } else if (FutureSocieties.isActive('FSHedonisticDecadence', arcology)) { r += `${either("quite curvy", "very plush")}. `; } else { r += `<span class="red">${either("carrying extra weight", "chubby")}.</span> `; @@ -7553,7 +7553,7 @@ App.Facilities.Nursery.LongChildDescription = function(child, {market = 0, event r += waist(child); if (arcology.FSGenderFundamentalistLawBeauty + arcology.FSGenderFundamentalistLawBeauty > 0) { - if (arcology.FSHedonisticDecadence === "unset" && arcology.FSPhysicalIdealistStrongFat === 0) { + if (!FutureSocieties.isActive('FSHedonisticDecadence', arcology) && arcology.FSPhysicalIdealistStrongFat === 0) { if (child.weight > 130) { r += `${He} is much too fat for the fashionable feminine ideal. `; } else if (child.weight > 30) { @@ -7569,7 +7569,7 @@ App.Facilities.Nursery.LongChildDescription = function(child, {market = 0, event } } } else if (arcology.FSSlimnessEnthusiastLaw === 1) { - if (arcology.FSHedonisticDecadence === "unset" && arcology.FSPhysicalIdealistStrongFat === 0) { + if (!FutureSocieties.isActive('FSHedonisticDecadence', arcology) && arcology.FSPhysicalIdealistStrongFat === 0) { if (child.weight > 30) { r += `${He} is much too fat for the fashionable feminine ideal. `; } else if (child.weight > 10) { @@ -7675,7 +7675,7 @@ App.Facilities.Nursery.LongChildDescription = function(child, {market = 0, event r += `<span class="red">frail;</span> ${he} can barely hold ${himself} up. `; } - if (arcology.FSGenderFundamentalistLawBeauty + arcology.FSGenderRadicalistLawBeauty + arcology.FSSlimnessEnthusiastLaw > 0 && arcology.FSPhysicalIdealist === "unset" && !arcology.FSHedonisticDecadenceStrongFat) { + if (arcology.FSGenderFundamentalistLawBeauty + arcology.FSGenderRadicalistLawBeauty + arcology.FSSlimnessEnthusiastLaw > 0 && !FutureSocieties.isActive('FSPhysicalIdealist', arcology) && !arcology.FSHedonisticDecadenceStrongFat) { if (arcology.FSPhysicalIdealistLaw > 0 && child.muscles > 50) { r += `${He} is entirely too muscular for the fashionable feminine ideal. `; } else if (child.muscles > 30) { diff --git a/src/npc/descriptions/accent.js b/src/npc/descriptions/accent.js index 1b4e56192d148aa75bff900930e3a1669d8472a4..35c13ed32cfb86189ffa1e70fa7e5ab73d4ab807 100644 --- a/src/npc/descriptions/accent.js +++ b/src/npc/descriptions/accent.js @@ -17,7 +17,7 @@ App.Desc.accent = function(slave) { } if (slave.rules.speech === "accent elimination") { r.push(`accent, which the rules encourage ${him} to suppress.`); - } else if (V.language === "Japanese" && V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (V.language === "Japanese" && FutureSocieties.isActive('FSEdoRevivalist')) { r.push(`accent, which society finds unpleasant.`); } else { r.push(`accent.`); diff --git a/src/npc/descriptions/belly/belly.js b/src/npc/descriptions/belly/belly.js index 51ff59bdc9d00b123bc55fa394ba740456e5b909..3c1c9ba810f99576c91a90d9dce74441457dbeae 100644 --- a/src/npc/descriptions/belly/belly.js +++ b/src/npc/descriptions/belly/belly.js @@ -31,7 +31,7 @@ App.Desc.belly = function(slave, descType = DescType.NORMAL) { const r = []; if (slave.belly < 1500) { if (slave.bellySagPreg > 1 || slave.bellySagPreg === -1) { - if (V.arcologies[0].FSRepopulationFocus !== "unset") { + if (FutureSocieties.isActive('FSRepopulationFocus')) { r.push(`While most societies would find ${his} sagging, pregnancy ruined stomach unattractive, your repopulation-focused one merely sees ${him} as a breeder between pregnancies.`); } else { r.push(`Society finds ${his} pregnancy ruined stomach very unattractive.`); @@ -60,7 +60,7 @@ App.Desc.belly = function(slave, descType = DescType.NORMAL) { r.push(clothing()); - if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + if (FutureSocieties.isActive('FSSlimnessEnthusiast')) { if (slave.weight > 190) { r.push(`Your sleek, slim society is absolutely appalled by ${his} horrendously bloated body.`); } else if (slave.weight > 160) { @@ -73,7 +73,7 @@ App.Desc.belly = function(slave, descType = DescType.NORMAL) { r.push(`Your sleek, slim society finds ${his} flabby body unsightly.`); } } - if (V.arcologies[0].FSRepopulationFocus !== "unset") { + if (FutureSocieties.isActive('FSRepopulationFocus')) { if (slave.belly >= 1000000) { if (isBellyFluidLargest) { r.push(`Your breeding-focused society finds ${his} unfathomable, hyper-swollen, ${slave.inflationType}-filled belly near the pinnacle of fashion despite ${his} inability to have children.`); @@ -105,7 +105,7 @@ App.Desc.belly = function(slave, descType = DescType.NORMAL) { } } else if (V.arcologies[0].FSRepopulationFocusPregPolicy === 1 && slave.bellyPreg >= 1500) { r.push(`Thanks to your trendsetting policies, society finds ${his} pregnant belly fashionable.`); - } else if (V.arcologies[0].FSRestart !== "unset") { + } else if (FutureSocieties.isActive('FSRestart')) { if (slave.belly >= 1000000) { if (isBellyFluidLargest) { r.push(`Your eugenics obsessed society sees ${his} unfathomable, hyper-swollen, ${slave.inflationType}-filled belly as equally unfathomably degenerate.`); @@ -12107,7 +12107,7 @@ App.Desc.belly = function(slave, descType = DescType.NORMAL) { } else if (slave.bellyImplant > 0) { r.push(`${slave.slaveName}'s teddy is specially designed to accommodate such a ridiculously swollen ${girl} and comes with a gap in the front for ${his} monolithic implant-filled belly to expand out of.`); } else { - r.push(`${slave.slaveName}'s teddy is specially designed to accommodate such a ridiculously gravig ${girl} and comes with a gap in the front for ${his} monolithic pregnant belly to uncontrollably billow out of.`); + r.push(`${slave.slaveName}'s teddy is specially designed to accommodate such a ridiculously gravid ${girl} and comes with a gap in the front for ${his} monolithic pregnant belly to uncontrollably billow out of.`); } } else if (slave.bellyPreg >= 600000) { if (isBellyFluidLargest) { @@ -12150,7 +12150,7 @@ App.Desc.belly = function(slave, descType = DescType.NORMAL) { r.push(`${slave.slaveName}'s teddy is carefully fitted to contain ${his} huge pregnant belly, but only emphasizes just how large and ripe ${he} is.`); } } else if (slave.weight > 190) { - r.push(`${slave.slaveName}'s tailored teddy is strained to capacity by ${his} massively fat belly. ${His} flab juts out around its edges while drawing it focuses on drawing attention to ${his} folds, rolls and assorted jiggling.`); + r.push(`${slave.slaveName}'s tailored teddy is strained to capacity by ${his} massively fat belly. ${His} flab juts out around its edges, while the remaining coverage merely draws attention to ${his} folds, rolls and assorted jiggling.`); } else if (slave.belly >= 15000 || slave.bellyAccessory === "a huge empathy belly") { if (slave.bellyAccessory === "a huge empathy belly") { r.push(`${slave.slaveName}'s teddy is filled to its limit by ${his} huge pregnant belly. ${His} popped navel prominently pokes through the taut material.`); diff --git a/src/npc/descriptions/boobs/boobs.js b/src/npc/descriptions/boobs/boobs.js index 281544be4c86b1893ef3d8aba97563cc057d5b40..7c79e54709f25a3a8597c2639b6c14c44088f2ae 100644 --- a/src/npc/descriptions/boobs/boobs.js +++ b/src/npc/descriptions/boobs/boobs.js @@ -1582,7 +1582,7 @@ App.Desc.boobsExtra = function(slave, descType) { if (thisArcology.FSGenderFundamentalistLawBeauty + thisArcology.FSGenderRadicalistLawBeauty > 0) { if (slave.boobs > 12000) { r.push("They're so large that the fashionable feminine ideal is a bad joke here."); - } else if (thisArcology.FSAssetExpansionist !== "unset") { + } else if (FutureSocieties.isActive('FSAssetExpansionist', thisArcology)) { if (slave.boobs > 4300) { r.push("They're too big for the fashionable feminine ideal."); } else if (slave.boobs >= 1600) { diff --git a/src/npc/descriptions/boobs/boobsShape.js b/src/npc/descriptions/boobs/boobsShape.js index a041233b19940e7db53cbdc422aa90f669e0351b..a6b9cb3cc9e69f52133a338a5a581c26438bb18f 100644 --- a/src/npc/descriptions/boobs/boobsShape.js +++ b/src/npc/descriptions/boobs/boobsShape.js @@ -208,14 +208,14 @@ App.Desc.boobsShape = function(slave) { } } if (slave.boobsImplant > 0) { - if (V.arcologies[0].FSTransformationFetishist !== "unset") { + if (FutureSocieties.isActive('FSTransformationFetishist')) { r.push(`They are about ${Math.floor((slave.boobsImplant / slave.boobs) * 100)}% implant.`); } } } if (V.arcologies[0].FSTransformationFetishist > 20) { - const boobThreshold = V.arcologies[0].FSSlimnessEnthusiast !== "unset" ? 400 : 600; + const boobThreshold = FutureSocieties.isActive('FSSlimnessEnthusiast') ? 400 : 600; if (slave.boobs >= boobThreshold) { if (slave.boobs >= 10000) { if (slave.boobsImplant / slave.boobs < .75) { diff --git a/src/npc/descriptions/butt/butt.js b/src/npc/descriptions/butt/butt.js index 814f20c7254989326d1ac86d4f5454f2caf3ad60..846b85fb34dfa3879b3392bfcb9de7625b14291f 100644 --- a/src/npc/descriptions/butt/butt.js +++ b/src/npc/descriptions/butt/butt.js @@ -1095,14 +1095,14 @@ App.Desc.butt = function(slave, descType = DescType.NORMAL) { r.push(`${He}'s got a`); if (slave.butt <= 1) { r.push(`flat and`); - if (V.arcologies[0].FSSlimnessEnthusiast > 20 && V.arcologies[0].FSHedonisticDecadence === "unset") { + if (V.arcologies[0].FSSlimnessEnthusiast > 20 && !FutureSocieties.isActive('FSHedonisticDecadence')) { r.push(either("attractive", "enticing", "fashionable")); } else { r.push(either("skinny", "slim", "taut")); } r.push(`ass,`); } else if (slave.butt <= 2) { - if (V.arcologies[0].FSSlimnessEnthusiast > 20 && V.arcologies[0].FSHedonisticDecadence === "unset") { + if (V.arcologies[0].FSSlimnessEnthusiast > 20 && !FutureSocieties.isActive('FSHedonisticDecadence')) { r.push(either("fashionable", "sleek and attractive", "small and enticing")); } else { r.push(either("small, rounded", "small but rounded", "small, sleek")); @@ -1195,13 +1195,13 @@ App.Desc.butt = function(slave, descType = DescType.NORMAL) { r.push(`implants, and it is completely obvious. Whatever ${his} position, ${his} immense ass dominates ${his} surroundings with its unyielding mass.`); } } - if (V.arcologies[0].FSTransformationFetishist !== "unset") { + if (FutureSocieties.isActive('FSTransformationFetishist')) { if (slave.buttImplant > 0) { r.push(`${His} rear is about ${Math.floor((slave.buttImplant / slave.butt) * 100)}% implant.`); } } if (V.arcologies[0].FSTransformationFetishist > 20) { - const buttThreshold = V.arcologies[0].FSSlimnessEnthusiast !== "unset" ? 3 : 6; + const buttThreshold = FutureSocieties.isActive('FSSlimnessEnthusiast') ? 3 : 6; if (slave.butt >= buttThreshold) { if (slave.buttImplant / slave.butt < .25) { r.push(`${His} ass is <span class="red">disgustingly natural</span> for its size.`); @@ -1213,9 +1213,9 @@ App.Desc.butt = function(slave, descType = DescType.NORMAL) { } if (V.arcologies[0].FSGenderFundamentalistLawBeauty + V.arcologies[0].FSGenderRadicalistLawBeauty > 0) { - if (slave.butt > 8 && V.arcologies[0].FSAssetExpansionist !== "unset") { + if (slave.butt > 8 && FutureSocieties.isActive('FSAssetExpansionist')) { r.push(`It's too big for the fashionable feminine ideal.`); - } else if (slave.butt > 4 && V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (slave.butt > 4 && FutureSocieties.isActive('FSAssetExpansionist')) { r.push(`It's bigger than expected for the fashionable feminine ideal, but your arcology loves huge butts, so it's not a surprise.`); } else if (slave.butt > 4) { r.push(`It's too big for the fashionable feminine ideal.`); diff --git a/src/npc/descriptions/crotch/dickAccessory.js b/src/npc/descriptions/crotch/dickAccessory.js index 46a1c846d10ce01997468bf73c438da62c4c34a8..30a433639b78ce9336fc3a2cf881543b33133fc8 100644 --- a/src/npc/descriptions/crotch/dickAccessory.js +++ b/src/npc/descriptions/crotch/dickAccessory.js @@ -12,7 +12,7 @@ App.Desc.dickAccessory = function(slave) { if (slave.energy > 95) { r.push(`The poor nympho looks painfully frustrated by this, and a long string of precum is dangling from the hole in the bottom of the cage.`); } - if (V.arcologies[0].FSRestart !== "unset") { + if (FutureSocieties.isActive('FSRestart')) { r.push(`This pleases the Societal Elite.`); } } diff --git a/src/npc/descriptions/crotch/vagina.js b/src/npc/descriptions/crotch/vagina.js index 99d74e8c7eef211bca70ce20052fedc07a28f1e5..a185acd3899fa042b202daf6784bc248c6a3c536 100644 --- a/src/npc/descriptions/crotch/vagina.js +++ b/src/npc/descriptions/crotch/vagina.js @@ -256,6 +256,10 @@ App.Desc.vagina = function(slave) { } } + if ((slave.ovaries > 0 || slave.mpreg > 0) && slave.ovaryAge < 0) { + r.push(`${His} ovaries have been replaced with genetically modified clones that will continue to produce new ova for as long as ${he} lives.`); + } + if (slave.ovaImplant !== 0) { switch (slave.ovaImplant) { case "fertility": diff --git a/src/npc/descriptions/crotch/vaginalAccessory.js b/src/npc/descriptions/crotch/vaginalAccessory.js index c607dbb59b608b3b7c6645dc7887195699e32381..83602bb8eaddfd583ae7e99874539018fe1a8757 100644 --- a/src/npc/descriptions/crotch/vaginalAccessory.js +++ b/src/npc/descriptions/crotch/vaginalAccessory.js @@ -76,7 +76,7 @@ App.Desc.vaginalAccessory = function(slave) { break; } r.push(App.Desc.vaginalAttachment(slave)); - if (slave.chastityVagina && V.arcologies[0].FSRestart !== "unset") { + if (slave.chastityVagina && FutureSocieties.isActive('FSRestart')) { r.push(`This pleases the Societal Elite.`); } diff --git a/src/npc/descriptions/dimensions.js b/src/npc/descriptions/dimensions.js index 8f59c77a4122d67b3ab9d5268ffe95d03b33b392..8abf3630d0566af0af86039f0fc6c549d69f8ea8 100644 --- a/src/npc/descriptions/dimensions.js +++ b/src/npc/descriptions/dimensions.js @@ -57,25 +57,25 @@ App.Desc.dimensions = function(slave) { function weight() { const r = []; if (slave.weight > 190) { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { r.push(either(`perfectly curvy.`, `perfectly plush.`)); } else { r.push(`<span class="red">${either(`dangerously fat`, `dangerously overweight`, `extremely obese`)}.</span>`); } } else if (slave.weight > 160) { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { r.push(either(`spectacularly curvy.`, `spectacularly plush.`)); } else { r.push(`<span class="red">${either(`extremely fat`, `extremely overweight`, `very obese`)}.</span>`); } } else if (slave.weight > 130) { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { r.push(either(`amazingly curvy.`, `amazingly plush.`)); } else { r.push(`<span class="red">${either(`obese`, `very fat`, `very overweight`)}.</span>`); } } else if (slave.weight > 95) { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { if (slave.hips > 1) { r.push(`${either(`extremely curvy`, `extremely plush`)}, ${his} huge hips complementing ${his} plushness perfectly.`); } else { @@ -87,7 +87,7 @@ App.Desc.dimensions = function(slave) { r.push(`<span class="red">${either(`carrying a lot of extra weight`, `fat`, `overweight`)}.</span>`); } } else if (slave.weight > 30) { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { if (slave.hips > 1) { r.push(`${either(`quite curvy`, `very plush`)}, ${his} motherly hips adding to ${his} soft appeal.`); } else { @@ -121,7 +121,7 @@ App.Desc.dimensions = function(slave) { function FS() { const r = []; - if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { + if (FutureSocieties.isActive('FSStatuesqueGlorification')) { const shoesHeight = shoeHeight(slave); if (heightPass(slave)) { r.push(`${He} is tall enough`); @@ -137,7 +137,7 @@ App.Desc.dimensions = function(slave) { r.push(`tastes.`); } } - } else if (V.arcologies[0].FSPetiteAdmiration !== "unset") { + } else if (FutureSocieties.isActive('FSPetiteAdmiration')) { if (heightPass(slave)) { r.push(`Society finds ${him} adorably short.`); } else if (slave.height >= 170) { @@ -146,7 +146,7 @@ App.Desc.dimensions = function(slave) { } if (V.arcologies[0].FSGenderFundamentalistLawBeauty + V.arcologies[0].FSGenderRadicalistLawBeauty > 0) { - if (V.arcologies[0].FSHedonisticDecadence === "unset" && V.arcologies[0].FSPhysicalIdealistStrongFat === 0) { + if (!FutureSocieties.isActive('FSHedonisticDecadence') && V.arcologies[0].FSPhysicalIdealistStrongFat === 0) { if (slave.weight > 130) { r.push(`${He} is much too fat for the fashionable feminine ideal.`); } else if (slave.weight > 30) { @@ -162,7 +162,7 @@ App.Desc.dimensions = function(slave) { } } } else if (V.arcologies[0].FSSlimnessEnthusiastLaw === 1) { - if (V.arcologies[0].FSHedonisticDecadence === "unset" && V.arcologies[0].FSPhysicalIdealistStrongFat === 0) { + if (!FutureSocieties.isActive('FSHedonisticDecadence') && V.arcologies[0].FSPhysicalIdealistStrongFat === 0) { if (slave.weight > 30) { r.push(`${He} is much too fat for the fashionable feminine ideal.`); } else if (slave.weight > 10) { @@ -248,7 +248,7 @@ App.Desc.dimensions = function(slave) { r.push(`<span class="red">frail;</span> ${he} can barely hold ${himself} up.`); } - if (V.arcologies[0].FSGenderFundamentalistLawBeauty + V.arcologies[0].FSGenderRadicalistLawBeauty + V.arcologies[0].FSSlimnessEnthusiastLaw > 0 && V.arcologies[0].FSPhysicalIdealist === "unset" && V.arcologies[0].FSHedonisticDecadenceStrongFat === 0) { + if (V.arcologies[0].FSGenderFundamentalistLawBeauty + V.arcologies[0].FSGenderRadicalistLawBeauty + V.arcologies[0].FSSlimnessEnthusiastLaw > 0 && !FutureSocieties.isActive('FSPhysicalIdealist') && V.arcologies[0].FSHedonisticDecadenceStrongFat === 0) { if (V.arcologies[0].FSPhysicalIdealistLaw > 0 && slave.muscles > 50) { r.push(`${He} is entirely too muscular for the fashionable feminine ideal.`); } else if (slave.muscles > 30) { diff --git a/src/npc/descriptions/face.js b/src/npc/descriptions/face.js index 054322c1f2e35663fc89783788f792da7afd6aaf..d01d31e35efae92d4219eb198d0b276082f1c680 100644 --- a/src/npc/descriptions/face.js +++ b/src/npc/descriptions/face.js @@ -189,13 +189,13 @@ App.Desc.face = function(slave) { r.push(`Someone without your knowledge might miss it entirely.`); } } - if (V.arcologies[0].FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist')) { if (slave.faceImplant > 30) { r.push(`This is considered extremely tragic by a society that values bodily purity.`); } else { r.push(`Since society values bodily purity, even this subtlety affects ${his} attractiveness when it's noticed.`); } - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (FutureSocieties.isActive('FSTransformationFetishist')) { if (slave.faceImplant > 30) { r.push(`Your transformationist society doesn't think this`); if (slave.face >= -10) { diff --git a/src/npc/descriptions/hips.js b/src/npc/descriptions/hips.js index 72c2209d1c16de3adf9175e9bd6e4cc15182edb6..17bbc9b0282c2597e9114f81d68fd3b93bae5d39 100644 --- a/src/npc/descriptions/hips.js +++ b/src/npc/descriptions/hips.js @@ -7,11 +7,11 @@ App.Desc.hips = function(slave) { const {his} = getPronouns(slave); if (slave.hips < -1) { if (slave.butt > 2) { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { r.push(`disproportionately large for ${his} narrow hips, but your hedonistic arcology finds this attractive.`); - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (FutureSocieties.isActive('FSTransformationFetishist')) { r.push(`disproportionately large for ${his} narrow hips, but your transformation fetishist arcology considers this attractive.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (FutureSocieties.isActive('FSAssetExpansionist')) { r.push(`disproportionately large for ${his} narrow hips, but that's just fine to your asset expansionist society.`); } else { r.push(`<span class="red">disproportionately large</span> for ${his} narrow hips.`); @@ -21,11 +21,11 @@ App.Desc.hips = function(slave) { } } else if (slave.hips < 0) { if (slave.butt > 4) { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { r.push(`disproportionately large for ${his} trim hips, but your hedonistic arcology finds this attractive.`); - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (FutureSocieties.isActive('FSTransformationFetishist')) { r.push(`disproportionately large for ${his} trim hips, but your transformation fetishist arcology considers this attractive.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (FutureSocieties.isActive('FSAssetExpansionist')) { r.push(`disproportionately large for ${his} trim hips, but that's just fine to your asset expansionist society.`); } else { r.push(`<span class="red">disproportionately large</span> for ${his} trim hips.`); @@ -40,9 +40,9 @@ App.Desc.hips = function(slave) { r.push(`fitting for ${his} monstrous hips.`); } } else if (slave.hips > 1) { - if (slave.butt <= 3 && (V.arcologies[0].FSSlimnessEnthusiast === "unset" || (slave.boobs >= 500))) { + if (slave.butt <= 3 && (!FutureSocieties.isActive('FSSlimnessEnthusiast') || (slave.boobs >= 500))) { r.push(`<span class="red">disproportionately small</span> for ${his} very wide`); - if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + if (FutureSocieties.isActive('FSSlimnessEnthusiast')) { r.push(`hips, which your arcology finds unattractive on busty slaves.`); } else { r.push(`hips.`); @@ -52,18 +52,18 @@ App.Desc.hips = function(slave) { } } else if (slave.hips > 0) { if (slave.butt > 8) { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { r.push(`disproportionately large for ${his} broad hips, but your hedonistic arcology finds this attractive.`); - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (FutureSocieties.isActive('FSTransformationFetishist')) { r.push(`disproportionately large for ${his} broad hips, but your transformation fetishist arcology considers this attractive.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (FutureSocieties.isActive('FSAssetExpansionist')) { r.push(`disproportionately large for ${his} broad hips, but that's just fine to your asset expansionist society.`); } else { r.push(`<span class="red">disproportionately large</span> for ${his} broad hips.`); } - } else if (slave.butt <= 2 && (V.arcologies[0].FSSlimnessEnthusiast === "unset" || (slave.boobs >= 500))) { + } else if (slave.butt <= 2 && (!FutureSocieties.isActive('FSSlimnessEnthusiast') || (slave.boobs >= 500))) { r.push(`<span class="red">disproportionately small</span> for ${his} broad`); - if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + if (FutureSocieties.isActive('FSSlimnessEnthusiast')) { r.push(`hips, which your arcology finds unattractive on busty slaves.`); } else { r.push(`hips.`); @@ -73,18 +73,18 @@ App.Desc.hips = function(slave) { } } else { if (slave.butt > 6) { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { r.push(`disproportionately large for ${his} womanly hips, but your hedonistic arcology finds this attractive.`); - } else if (V.arcologies[0].FSTransformationFetishist !== "unset") { + } else if (FutureSocieties.isActive('FSTransformationFetishist')) { r.push(`disproportionately large for ${his} womanly hips, but your transformation fetishist arcology considers this attractive.`); - } else if (V.arcologies[0].FSAssetExpansionist !== "unset") { + } else if (FutureSocieties.isActive('FSAssetExpansionist')) { r.push(`disproportionately large for ${his} womanly hips, but that's just fine to your asset expansionist society.`); } else { r.push(`<span class="red">disproportionately large</span> for ${his} womanly hips.`); } - } else if (slave.butt <= 1 && (V.arcologies[0].FSSlimnessEnthusiast === "unset" || (slave.boobs >= 500))) { + } else if (slave.butt <= 1 && (!FutureSocieties.isActive('FSSlimnessEnthusiast') || (slave.boobs >= 500))) { r.push(`<span class="red">disproportionately small</span> for ${his} ample`); - if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + if (FutureSocieties.isActive('FSSlimnessEnthusiast')) { r.push(`hips, which your arcology finds unattractive on busty slaves.`); } else { r.push(`hips.`); diff --git a/src/npc/descriptions/mind.js b/src/npc/descriptions/mind.js index 7670acdd28fb8c653908ae6535f3efff2328cbb6..29ddbeab41dfecaac4bc716759272fefdde7d74b 100644 --- a/src/npc/descriptions/mind.js +++ b/src/npc/descriptions/mind.js @@ -334,7 +334,7 @@ App.Desc.mind = function(slave, descType) { r.push(`${He}'s <span class="green">insecure,</span> defining ${his} self worth by how much others want to fuck ${him}.`); break; case "sinful": - if (V.arcologies[0].FSChattelReligionist === "unset") { + if (!FutureSocieties.isActive('FSChattelReligionist')) { r.push(`${He}'s delightfully <span class="green">sinful,</span> taking real pleasure in breaking cultural mores.`); } else { r.push(`${He}'s a devout Chattel Religionist, and is aggressively <span class="green">sinful</span> against old world faiths. ${He} is enthusiastic about slutty religious clothing, and excited by intentional sacrilege like openly using old world religious icons as sex toys or having orgies on altars.`); diff --git a/src/npc/descriptions/mouth.js b/src/npc/descriptions/mouth.js index 9699e36f7c2741e450701a43b77d1121b6c9088d..df05338cfcc106cde5529037bbf97e00e6b21fe4 100644 --- a/src/npc/descriptions/mouth.js +++ b/src/npc/descriptions/mouth.js @@ -29,7 +29,7 @@ App.Desc.mouth = function(slave) { } if (V.showImplantEffects === 1) { - if (V.arcologies[0].FSTransformationFetishist !== "unset") { + if (FutureSocieties.isActive('FSTransformationFetishist')) { if (slave.lipsImplant > 0) { r.push(`They are about ${Math.floor((slave.lipsImplant / slave.lips) * 100)}% implant.`); } diff --git a/src/npc/descriptions/shoulders.js b/src/npc/descriptions/shoulders.js index 0cbbbe20bfb1a4077f06587705c7912ce90bfc76..bf682b7508dc746447f4a0929f8a7b6128453561 100644 --- a/src/npc/descriptions/shoulders.js +++ b/src/npc/descriptions/shoulders.js @@ -48,9 +48,9 @@ App.Desc.shoulders = function(slave) { r.push(`They're wider than ${his} hips,`); if (slave.boobs > 2000 * (slave.shoulders - slave.hips)) { r.push(`but ${his} massive breasts make it hard to discern.`); - } else if (V.arcologies[0].FSGenderRadicalist !== "unset") { + } else if (FutureSocieties.isActive('FSGenderRadicalist')) { r.push(`giving ${him} a somewhat mannish appearance.`); - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + } else if (FutureSocieties.isActive('FSGenderFundamentalist')) { r.push(`giving ${him} an <span class="red">ugly, mannish appearance.</span>`); } else { r.push(`giving ${him} an <span class="red">unattractive, somewhat mannish, appearance.</span>`); diff --git a/src/npc/generate/generateGenetics.js b/src/npc/generate/generateGenetics.js index a4d45e5fa1e0a6b1fb2c95afd387c618f1f856ff..376787ebccba8b925d557f78063bdc2e3bf554e6 100644 --- a/src/npc/generate/generateGenetics.js +++ b/src/npc/generate/generateGenetics.js @@ -282,9 +282,9 @@ globalThis.generateGenetics = (function() { */ function chooseUnknownFatherRace(actor2) { fatherRace = 0; // usually this will be interpreted as "copy from mother" - if (((actor2 === -2 || actor2 === -5) && V.arcologies[0].FSSupremacistLawME === 1) || (actor2 === -6 && V.arcologies[0].FSSupremacist !== "unset")) { + if (((actor2 === -2 || actor2 === -5) && V.arcologies[0].FSSupremacistLawME === 1) || (actor2 === -6 && FutureSocieties.isActive('FSSupremacist'))) { fatherRace = V.arcologies[0].FSSupremacistRace; - } else if (((actor2 === -2 || actor2 === -5) && V.arcologies[0].FSSubjugationistLawME === 1) || (actor2 === -6 && V.arcologies[0].FSSubjugationist !== "unset")) { + } else if (((actor2 === -2 || actor2 === -5) && V.arcologies[0].FSSubjugationistLawME === 1) || (actor2 === -6 && FutureSocieties.isActive('FSSubjugationist'))) { fatherRace = App.Utils.getRaceArrayWithoutParamRace(V.arcologies[0].FSSubjugationistRace).random(); } } diff --git a/src/npc/generate/generateMarketSlave.js b/src/npc/generate/generateMarketSlave.js index 57b59c28f6785a0704c21f4dd93c64d39f555f60..3f12ebde2d85b50b444facbd4e092ffc5266748d 100644 --- a/src/npc/generate/generateMarketSlave.js +++ b/src/npc/generate/generateMarketSlave.js @@ -497,9 +497,9 @@ globalThis.generateMarketSlave = function(market = "kidnappers", numArcology = 1 slave.devotion = -20 + Math.trunc(neighbor.prosperity / 10) + jsRandom(0, 10); slave.trust = -20 + Math.trunc(neighbor.prosperity / 10) + jsRandom(0, 10); let healthTarget = 0; - if (neighbor.FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist', neighbor)) { healthTarget = 20; - } else if (neighbor.FSDegradationist !== "unset") { + } else if (FutureSocieties.isActive('FSDegradationist', neighbor)) { healthTarget = -20; } healthTarget += Math.trunc((neighbor.prosperity - 100) / 10) + jsRandom(0, 10); @@ -571,7 +571,7 @@ globalThis.generateMarketSlave = function(market = "kidnappers", numArcology = 1 SetBellySize(slave); } } - slave.lactation = jsRandom(0, 1); + slave.lactation = jsEither([0, 1]); if (slave.lactation > 0) { slave.lactationDuration = 2; } @@ -700,7 +700,7 @@ globalThis.generateMarketSlave = function(market = "kidnappers", numArcology = 1 if (jsRandom(1, 100) > 90) { slave.hears = -2; } - if (neighbor.FSRepopulationFocus === "unset" && neighbor.FSBodyPurist === "unset") { + if (!FutureSocieties.isActive('FSRepopulationFocus', neighbor) && !FutureSocieties.isActive('FSBodyPurist', neighbor)) { if (isFertile(slave) && slave.vagina > 0 && jsRandom(1, 10) === 9) { slave.abortionTat = jsRandom(1, (Math.min(slave.physicalAge - V.fertilityAge, slave.physicalAge - V.minimumSlaveAge)) * 2); } @@ -1085,7 +1085,7 @@ globalThis.generateMarketSlave = function(market = "kidnappers", numArcology = 1 } else if (neighbor.FSChineseRevivalist > 20) { r += `They've all passed through a thorough and uncompromising educational system for slaves. `; slave.intelligenceImplant = 30; - if (neighbor.FSIntellectualDependency === "unset") { + if (!FutureSocieties.isActive('FSIntellectualDependency', neighbor)) { if (slave.intelligence < 60) { slave.intelligence += jsRandom(0, 20); } @@ -1110,11 +1110,11 @@ globalThis.generateMarketSlave = function(market = "kidnappers", numArcology = 1 slave.behavioralQuirk = "sinful"; } } - if ((V.arcologies[0].FSDegradationist !== "unset") && (neighbor.FSPaternalist !== "unset")) { + if (FutureSocieties.isActive('FSDegradationist') && FutureSocieties.isActive('FSPaternalist', neighbor)) { slave.devotion = jsRandom(-90, -60); slave.trust = -20; r += `<b>${neighbor.name}</b> is Paternalist, and your arcology is Degradationist. To its slaves, other niceties of social alignment are trivial. They view your arcology as a literal Hell on Earth. `; - } else if ((V.arcologies[0].FSPaternalist !== "unset") && (neighbor.FSDegradationist !== "unset")) { + } else if (FutureSocieties.isActive('FSPaternalist') && FutureSocieties.isActive('FSDegradationist', neighbor)) { slave.devotion = jsRandom(60, 90); slave.trust = 20; r += `<b>${neighbor.name}</b> is Degradationist, and your arcology is Paternalist. To its slaves, other niceties of social alignment are trivial. They view your arcology as a promised land. `; diff --git a/src/npc/generate/generateNewSlaveJS.js b/src/npc/generate/generateNewSlaveJS.js index db1044602a882c831f13cad24196b1b00064f4d3..5c4612357e97ab166ee2303b9b626587059f2782 100644 --- a/src/npc/generate/generateNewSlaveJS.js +++ b/src/npc/generate/generateNewSlaveJS.js @@ -5,7 +5,7 @@ globalThis.GenerateChromosome = function() { let femaleSlaveGen = 80; if (V.arcologies[0].FSGenderFundamentalistSMR === 1 || V.arcologies[0].FSRepopulationFocusSMR === 1) { femaleSlaveGen = 90; - } else if (V.arcologies[0].FSGenderRadicalist !== "unset") { + } else if (FutureSocieties.isActive('FSGenderRadicalist')) { femaleSlaveGen = 50; } if (jsRandom(1, 100) > femaleSlaveGen && jsRandom(0, 99) < V.seeDicks) { @@ -1398,15 +1398,15 @@ globalThis.GenerateNewSlave = (function() { } else if (V.pedo_mode === 1 && x.ageOverridesPedoMode === 0) { x.minAge = V.minimumSlaveAge; } - if (x.maxAge >= 30 && V.arcologies[0].FSMaturityPreferentialist !== "unset" && x.mature === 1) { + if (x.maxAge >= 30 && FutureSocieties.isActive('FSMaturityPreferentialist') && x.mature === 1) { x.maxAge += 10; } x.maxAge = Math.max(x.maxAge, x.minAge); slave.actualAge = jsRandom(x.minAge, x.maxAge); const secondAgeRoll = jsRandom(x.minAge, x.maxAge); - if (V.arcologies[0].FSYouthPreferentialist !== "unset" && V.arcologies[0].FSYouthPreferentialist >= jsRandom(1, 100)) { + if (FutureSocieties.isActive('FSYouthPreferentialist') && V.arcologies[0].FSYouthPreferentialist >= jsRandom(1, 100)) { slave.actualAge = Math.min(slave.actualAge, secondAgeRoll); - } else if (V.arcologies[0].FSMaturityPreferentialist !== "unset" && V.arcologies[0].FSMaturityPreferentialist >= jsRandom(1, 100)) { + } else if (FutureSocieties.isActive('FSMaturityPreferentialist') && V.arcologies[0].FSMaturityPreferentialist >= jsRandom(1, 100)) { slave.actualAge = Math.max(slave.actualAge, secondAgeRoll); } if (slave.actualAge >= V.retirementAge) { diff --git a/src/npc/generate/lawCompliance.js b/src/npc/generate/lawCompliance.js index 4cdf13f6feb2763012bb0748babc6d9cfd2a0191..9e2aa25609226157fe957f6d77115ee349c497a8 100644 --- a/src/npc/generate/lawCompliance.js +++ b/src/npc/generate/lawCompliance.js @@ -508,19 +508,19 @@ App.Desc.lawCompliance = function(slave, market = 0) { function FSAztecRevivalistSMR() { const r = []; r.push(`As ${he} passed though the golden city, ${he} saw a less valuable`); - if (V.arcologies[0].FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist')) { r.push(`slave's virginity get sacrificed`); } else { r.push(`slave get sacrificed`); } r.push(`on one of the many altars spread throughout the city. ${He} was`); - if (V.arcologies[0].FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist')) { r.push(`<span class="gold">startled</span>`); } else { r.push(`<span class="gold">mortified</span>`); } r.push(`to learn what befalls lesser slaves here.`); - if (V.arcologies[0].FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist')) { slave.trust -= 5; } else { slave.trust -= 20; diff --git a/src/npc/generate/newChildIntro.js b/src/npc/generate/newChildIntro.js index 7ecf1c8c1754408d266fe5ac338d64e3563c5b94..be188e048c9f153d62d1957a44e7e43b2d09b165 100644 --- a/src/npc/generate/newChildIntro.js +++ b/src/npc/generate/newChildIntro.js @@ -67,7 +67,7 @@ App.UI.newChildIntro = function(slave) { ) ); - if (V.arcologies[0].FSPastoralist !== "unset") { + if (FutureSocieties.isActive('FSPastoralist')) { App.UI.DOM.appendNewElement( "div", naming, @@ -82,7 +82,7 @@ App.UI.newChildIntro = function(slave) { ) ); } - if (V.arcologies[0].FSIntellectualDependency !== "unset") { + if (FutureSocieties.isActive('FSIntellectualDependency')) { App.UI.DOM.appendNewElement( "div", naming, @@ -112,7 +112,7 @@ App.UI.newChildIntro = function(slave) { ) ); } - if (V.arcologies[0].FSChattelReligionist !== "unset") { + if (FutureSocieties.isActive('FSChattelReligionist')) { App.UI.DOM.appendNewElement( "div", naming, @@ -127,7 +127,7 @@ App.UI.newChildIntro = function(slave) { ) ); } - if (V.arcologies[0].FSRomanRevivalist !== "unset") { + if (FutureSocieties.isActive('FSRomanRevivalist')) { App.UI.DOM.appendNewElement( "div", naming, @@ -141,7 +141,7 @@ App.UI.newChildIntro = function(slave) { } ) ); - } else if (V.arcologies[0].FSAztecRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSAztecRevivalist')) { App.UI.DOM.appendNewElement( "div", naming, @@ -155,7 +155,7 @@ App.UI.newChildIntro = function(slave) { } ) ); - } else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSEgyptianRevivalist')) { App.UI.DOM.appendNewElement( "div", naming, @@ -169,7 +169,7 @@ App.UI.newChildIntro = function(slave) { } ) ); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSEdoRevivalist')) { App.UI.DOM.appendNewElement( "div", naming, @@ -183,7 +183,7 @@ App.UI.newChildIntro = function(slave) { } ) ); - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSChineseRevivalist')) { App.UI.DOM.appendNewElement( "div", naming, @@ -199,7 +199,7 @@ App.UI.newChildIntro = function(slave) { ); } - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { App.UI.DOM.appendNewElement( "div", naming, @@ -328,7 +328,7 @@ App.UI.newChildIntro = function(slave) { ) ); } - if (V.arcologies[0].FSRomanRevivalist !== "unset") { + if (FutureSocieties.isActive('FSRomanRevivalist')) { App.UI.DOM.appendNewElement( "div", surnaming, @@ -342,7 +342,7 @@ App.UI.newChildIntro = function(slave) { } ) ); - } else if (V.arcologies[0].FSEdoRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSEdoRevivalist')) { App.UI.DOM.appendNewElement( "div", surnaming, @@ -356,7 +356,7 @@ App.UI.newChildIntro = function(slave) { } ) ); - } else if (V.arcologies[0].FSChineseRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSChineseRevivalist')) { App.UI.DOM.appendNewElement( "div", surnaming, @@ -370,7 +370,7 @@ App.UI.newChildIntro = function(slave) { } ) ); - } else if (V.arcologies[0].FSAntebellumRevivalist !== "unset") { + } else if (FutureSocieties.isActive('FSAntebellumRevivalist')) { App.UI.DOM.appendNewElement( "div", surnaming, diff --git a/src/npc/generate/newSlaveIntro.js b/src/npc/generate/newSlaveIntro.js index b3b5114fb967d8cc480aa3e5b188018c2e821210..4f30d7bfdd8846d662bc6abc0c05b3b38989c4f5 100644 --- a/src/npc/generate/newSlaveIntro.js +++ b/src/npc/generate/newSlaveIntro.js @@ -1910,7 +1910,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = } else { r.push(`Whatever gratitude ${he} might have felt for prompt medical attention is balanced by fear of the remote surgery and the nagging (and accurate) feeling that ${he}'s being treated like livestock, but ${he} does <span class="mediumaquamarine">begin to hope</span> ${he}'ll be well treated.`); } - if (V.arcologies[0].FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist')) { r.push(`Society <span class="green">approves</span> of your promptly seeing to your stock's health; this advances the idea that all slaveowners should look after their slaves.`); FutureSocieties.Change("Paternalist", 2); } @@ -2399,11 +2399,11 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = } else { r.push(`${He} numbly carries on, terrified.`); } - if (V.arcologies[0].FSGenderRadicalist !== "unset") { + if (FutureSocieties.isActive('FSGenderRadicalist')) { r.push(`Society <span class="green">approves</span> of your promptly gelding ${him}; this advances the idea that all societal inferiors can be made female.`); FutureSocieties.Change("Gender Radicalist", 2); } - if (V.arcologies[0].FSRestart !== "unset" && slave.pubertyXY === 1) { + if (FutureSocieties.isActive('FSRestart') && slave.pubertyXY === 1) { r.push(`Society <span class="green">approves</span> of your promptly gelding ${him}; this advances the idea that only the elite should breed.`); FutureSocieties.Change("Eugenics", 2); } @@ -2427,7 +2427,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = r.push(`${He} retains ${his} ballsack beneath this, though of course you can always remove that later if you decide to geld ${him}, too.`); } r.push(`${He} almost passes out from <span class="gold">sheer horror.</span> Instead, ${he} collapses and tries desperately to vomit. Fortunately, ${he} doesn't have anything to bring up. ${He}'s reduced to impotent weeping and retching as ${he} begins to process the stress of having had ${his} parts cut off.`); - if (V.arcologies[0].FSRestart !== "unset") { + if (FutureSocieties.isActive('FSRestart')) { r.push(`Society <span class="green">approves</span> of you stripping away everything from society's inferiors.`); FutureSocieties.Change("Eugenics", 3); } @@ -2808,13 +2808,13 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = r.push(VCheck.Vaginal(slave, 1)); } } - if (V.arcologies[0].FSRestart !== "unset" && V.eugenicsFullControl !== 1) { + if (FutureSocieties.isActive('FSRestart') && V.eugenicsFullControl !== 1) { r.push(`The Societal Elite <span class="green">disapprove</span> of this breach of eugenics.`); V.failedElite += 5; - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset" && slave.mpreg === 0) { + } else if (FutureSocieties.isActive('FSGenderFundamentalist') && slave.mpreg === 0) { r.push(`Society <span class="green">approves</span> of your promptly putting a new slave in ${him}; this advances the idea that all slaves should bear their masters' babies.`); FutureSocieties.Change("Gender Fundamentalist", 2); - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + } else if (FutureSocieties.isActive('FSGenderFundamentalist')) { r.push(`Society <span class="red">is disgusted</span> by you promptly knocking up ${his} ass; babies come from women, not men.`); FutureSocieties.Change("Gender Fundamentalist", -2); } @@ -3545,11 +3545,11 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = () => { const r = []; r.push(`Righting yourself, you grab the gloating slave, drag ${him} to the autosurgery and strap ${him} face-down with ${his} legs spread. ${He} doesn't understand what's happening, but giggles at the sensations running through ${his} numb body. ${He}'s so drugged and drowsy with <span class="health dec">surgical recovery</span> that it takes a while for ${him} to figure out what's happened. When ${he} does, ${his} poor mind scarcely processes the <span class="gold">horror</span> of what's happened. ${He} spends the rest of the week dimly trying to find where ${his} balls went.`); - if (V.arcologies[0].FSGenderRadicalist !== "unset") { + if (FutureSocieties.isActive('FSGenderRadicalist')) { r.push(`Society <span class="green">approves</span> of your promptly gelding ${him}; this advances the idea that all societal inferiors can be made female.`); FutureSocieties.Change("Gender Radicalist", 2); } - if (V.arcologies[0].FSRestart !== "unset" && slave.pubertyXY === 1) { + if (FutureSocieties.isActive('FSRestart') && slave.pubertyXY === 1) { r.push(`Society <span class="green">approves</span> of your promptly gelding ${him}; this advances the idea that only the Elite should breed.`); FutureSocieties.Change("Eugenics", 2); } @@ -3918,11 +3918,11 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = () => { const r = []; r.push(`Righting yourself, you grab the cowering slave, drag ${him} to the autosurgery and strap ${him} face-down with ${his} legs spread. ${He} doesn't understand what's happening, but giggles at the sensations running through ${his} numb body. ${He}'s so drugged and drowsy with <span class="health dec">surgical recovery</span> that it takes a while for ${him} to figure out what's happened. When ${he} does, ${his} poor mind scarcely processes the <span class="gold">horror</span> of what's happened. ${He} spends the rest of the week dimly trying to find where ${his} balls went.`); - if (V.arcologies[0].FSGenderRadicalist !== "unset") { + if (FutureSocieties.isActive('FSGenderRadicalist')) { r.push(`Society <span class="green">approves</span> of your promptly gelding ${him}; this advances the idea that all societal inferiors can be made female.`); FutureSocieties.Change("Gender Radicalist", 2); } - if (V.arcologies[0].FSRestart !== "unset") { + if (FutureSocieties.isActive('FSRestart')) { r.push(`Society <span class="green">approves</span> of your promptly gelding ${him}; this advances the idea that only the Elite should breed.`); FutureSocieties.Change("Eugenics", 2); } @@ -4094,7 +4094,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = r.push(`is positively huge. You can clearly see ${his} swollen stomach at the top of the mass of food inside ${him}.`); } r.push(`${He} collapses onto ${his} rear and belches loudly.`); - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { r.push(`It doesn't take long for the tainted food to do its thing. ${He} groans loudly and clutches ${his} bulging midriff, ${his} body in severe distress thanks to the modified slave food. ${He} rolls onto ${his} back and does everything ${he} can to soothe the turmoil growing inside ${him}. You know it won't do any good, but ${he} doesn't. ${He}'ll spend however long it takes ${his} body to digest the food in anguish; ${he}'ll regret ever touching the stuff. But you know better, ${his} growing addiction will have ${him} scarfing it down at every chance, but for now, all ${he} can do is <span class="mediumorchid">blame you</span> and <span class="gold">curse your trickery.</span>`); slave.devotion -= 20; slave.trust -= 20; @@ -4892,8 +4892,8 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest = (V.brandDesign.primary === "a racial slur") && // Oh no, will this slur make sense... (V.brandDesign.secondary) && // They actually set a backup, so we can care ( - (V.arcologies[0].FSSupremacist !== "unset" && slave.race !== V.arcologies[0].FSSupremacistRace) || - (V.arcologies[0].FSSubjugationist !== "unset" && slave.race === V.arcologies[0].FSSubjugationistRace) + (FutureSocieties.isActive('FSSupremacist') && slave.race !== V.arcologies[0].FSSupremacistRace) || + (FutureSocieties.isActive('FSSubjugationist') && slave.race === V.arcologies[0].FSSubjugationistRace) ) ) { // Slur made no sense, use the backup diff --git a/src/npc/generate/slaveGenerationJS.js b/src/npc/generate/slaveGenerationJS.js index 524a2ddf936489e19d14f726d7f5dc97179172ac..4c4121637896d1f834f310d5fb667fb0a2127e15 100644 --- a/src/npc/generate/slaveGenerationJS.js +++ b/src/npc/generate/slaveGenerationJS.js @@ -121,7 +121,10 @@ globalThis.nationalityToName = function(slave) { } else if (V.arcologies[0].FSEdoRevivalist > 20) { slave.slaveName = jsEither(App.Data.misc.edoSlaveNames); slave.slaveSurname = jsEither(App.Data.misc.edoSlaveSurnames); - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (V.arcologies[0].FSAntebellumRevivalist > 20) { + slave.slaveName = jsEither(App.Data.misc.antebellumSlaveNames); + slave.slaveSurname = jsEither(App.Data.misc.antebellumSlaveSurnames); + } else if (FutureSocieties.isActive('FSDegradationist')) { DegradingName(slave); } } else if (V.FSNamePref === 1) { @@ -146,6 +149,12 @@ globalThis.nationalityToName = function(slave) { } else if (V.FSNamePref === 8) { slave.slaveName = jsEither(App.Data.misc.bimboSlaveNames); slave.slaveSurname = 0; + } else if (V.FSNamePref === 9) { + slave.slaveName = jsEither(App.Data.misc.cowSlaveNames); + slave.slaveSurname = 0; + } else if (V.FSNamePref === 10) { + slave.slaveName = jsEither(App.Data.misc.antebellumSlaveNames); + slave.slaveSurname = jsEither(App.Data.misc.antebellumSlaveSurnames); } } }; diff --git a/src/npc/infants/customizeInfant.tw b/src/npc/infants/customizeInfant.tw index 2f2f86cfb16395eb0286e4b5fd8532caf4da8881..6253ff877f3ceb75d6778f84dcd71f6f402ff22f 100644 --- a/src/npc/infants/customizeInfant.tw +++ b/src/npc/infants/customizeInfant.tw @@ -50,7 +50,7 @@ You may enter custom descriptors for your child's hair color, hair style, tattoo Change $his given name: <<textbox "$activeChild.slaveName" $activeChild.slaveName>> /* <<link "Restore $his birth name">><<set $activeChild.slaveName = $activeChild.birthName>><</link>> -<<if $arcologies[0].FSPastoralist != "unset">> +<<if $arcologies[0].FSPastoralist != null>> <<if $activeChild.lactation > 0>> | <<link "Give $him a random cow given name" "Rename">><<set $activeChild.slaveName = setup.cowSlaveNames.random()>><</link>> <</if>> @@ -58,7 +58,7 @@ Change $his given name: <<textbox "$activeChild.slaveName" $activeChild.slaveNam <<if child.race == "catgirl">> | <<link "Give $him a random cat given name" "Rename">><<set $activeChild.slaveName = setup.catSlaveNames.random()>><</link>> <</if>> -<<if $arcologies[0].FSChattelReligionist != "unset">> +<<if $arcologies[0].FSChattelReligionist != null>> | <<link "Give $him a random devotional given name" "Rename">><<set $activeChild.slaveName = setup.chattelReligionistSlaveNames.random()>><</link>> <</if>> */ @@ -97,13 +97,13 @@ Change $his surname: <</if>> */ /* -<<if $arcologies[0].FSRomanRevivalist != "unset">> +<<if $arcologies[0].FSRomanRevivalist != null>> | <<link "Give $him a random full Roman name">><<set $activeChild.slaveName = setup.romanSlaveNames.random(), $activeChild.slaveSurname = setup.romanSlaveSurnames.random()>><</link>> -<<elseif $arcologies[0].FSAztecRevivalist != "unset">> +<<elseif $arcologies[0].FSAztecRevivalist != null>> | <<link "Give $him a random full Aztec name">><<set $activeChild.slaveName = setup.aztecSlaveNames.random(), $activeChild.slaveSurname = 0>><</link>> -<<elseif $arcologies[0].FSEgyptianRevivalist != "unset">> +<<elseif $arcologies[0].FSEgyptianRevivalist != null>> | <<link "Give $him a random full ancient Egyptian name">><<set $activeChild.slaveName = setup.ancientEgyptianSlaveNames.random(), $activeChild.slaveSurname = 0>><</link>> -<<elseif $arcologies[0].FSEdoRevivalist != "unset">> +<<elseif $arcologies[0].FSEdoRevivalist != null>> | <<link "Give $him a random full feudal Japanese name">><<set $activeChild.slaveName = setup.edoSlaveNames.random(), $activeChild.slaveSurname = setup.edoSlaveSurnames.random()>><</link>> <</if>> <<if $arcologies[0].FSDegradationist > -1>> diff --git a/src/npc/interaction/FFuckdollImpreg.js b/src/npc/interaction/FFuckdollImpreg.js index c6ceff21948174ea2a643c0dac9e130e690a102b..13e941fc982140de13e6ead924d90fa7785c4614 100644 --- a/src/npc/interaction/FFuckdollImpreg.js +++ b/src/npc/interaction/FFuckdollImpreg.js @@ -170,7 +170,7 @@ App.Interact.fFuckdollImpreg = function(slave) { r.push(`You repeat this ritual throughout the week, ensuring that ${he} will be an <span class="pregnant">incubator for your child.</span>`); knockMeUp(slave, 100, 2, -1); - if (V.arcologies[0].FSRestart !== "unset" && V.eugenicsFullControl !== 1) { + if (FutureSocieties.isActive('FSRestart') && V.eugenicsFullControl !== 1) { if (slave.breedingMark !== 1 || V.propOutcome === 0) { r.push(`Rumors spread about you knocking up your playthings; the Societal Elite are <span class="elites loss">very displeased</span> by these rumors.`); V.failedElite += 5; diff --git a/src/npc/interaction/fAbuse.js b/src/npc/interaction/fAbuse.js index c442522ebdb2c819dbc1a4d190ec72d013a056b6..1996fea984aa0cfdfdd3dc1f54252aef391f10ee 100644 --- a/src/npc/interaction/fAbuse.js +++ b/src/npc/interaction/fAbuse.js @@ -696,7 +696,7 @@ App.Interact.fAbuse = function(slave) { } } else if (slave.fetish === "masochist" && slave.fetishStrength > 60 && slave.fetishKnown === 1) { r.push(`${He} secretly got off on the pain and humiliation.`); - } else if (V.arcologies[0].FSDegradationist !== "unset") { + } else if (FutureSocieties.isActive('FSDegradationist')) { r.push(`${He} knew that a degradationist arcology wouldn't be easy on ${him}, so even if ${he} resents it, ${he} tries to accept it.`); } else if (slave.devotion < -50) { r.push(`${His} <span class="mediumorchid">hatred</span> and <span class="gold">fear</span> of you have increased.`); diff --git a/src/npc/interaction/fFeelings.js b/src/npc/interaction/fFeelings.js index 834383146d42a599bffffeeef97519c9b573c8cb..5f0d9bbbc8ac8a9451a1d5b6e9831e99fdfc18e5 100644 --- a/src/npc/interaction/fFeelings.js +++ b/src/npc/interaction/fFeelings.js @@ -2218,7 +2218,7 @@ App.Interact.fFeelings = function(slave) { if (V.arcologies[0].FSSlimnessEnthusiast >= 10) { if (slave.weight > 30) { text.push(`${Spoken(slave, `I know I'm an ugly fat slut. I wish I were slim.`)}`); - } else if (slave.belly >= 1500 && V.arcologies[0].FSRepopulationFocus !== "unset" && V.propOutcome === 0 && slave.breedingMark === 0) { + } else if (slave.belly >= 1500 && FutureSocieties.isActive('FSRepopulationFocus') && V.propOutcome === 0 && slave.breedingMark === 0) { text.push(`${Spoken(slave, `I know I'm an ugly fat slut. I wish my belly wasn't so big.`)}`); } else if (slave.butt > 3) { text.push(`${Spoken(slave, `I know I'm an ugly, fat-assed slut. I wish it was smaller.`)}`); diff --git a/src/npc/interaction/fPCImpreg.js b/src/npc/interaction/fPCImpreg.js index f1da2c0338c90f74da73865209f75cadddb46158..9365dc6675c3d33adb1eac04f97c3441f1d0b846 100644 --- a/src/npc/interaction/fPCImpreg.js +++ b/src/npc/interaction/fPCImpreg.js @@ -264,16 +264,16 @@ App.Interact.fPCImpreg = function(slave) { text.push(`is <span class="pregnant">carrying your child.</span>`); } - if (V.arcologies[0].FSRestart !== 'unset' && (!slave.breedingMark || V.propOutcome === 0) && V.eugenicsFullControl !== 1) { + if (FutureSocieties.isActive('FSRestart') && (!slave.breedingMark || V.propOutcome === 0) && V.eugenicsFullControl !== 1) { text.push(`Rumors spread about you fucking your slaves pregnant; the Societal Elite are <span class="reputation dec">very displeased</span> by these rumors.`); V.failedElite += 5; } - if (V.arcologies[0].FSGenderRadicalist !== 'unset' && slave.mpreg) { + if (FutureSocieties.isActive('FSGenderRadicalist') && slave.mpreg) { text.push(`Society <span class="reputation inc">approves</span> of your fucking your slaves' asses pregnant; this advances the ideal all a slave needs is ${his} rear.`); FutureSocieties.Change("FSGenderRadicalist", 1); - } else if (V.arcologies[0].FSGenderFundamentalist !== 'unset') { + } else if (FutureSocieties.isActive('FSGenderFundamentalist')) { if (slave.mpreg) { text.push(`Society <span class="reputation dec">is disgusted</span> by this degenerate form of reproduction.`); FutureSocieties.Change("FSGenderFundamentalist", -1); diff --git a/src/npc/interaction/fSlaveSelfImpreg.js b/src/npc/interaction/fSlaveSelfImpreg.js index fdb3d585842666d37630ea86647e845e4f9e3a7d..6a56ce1147569f22ab727df8bba1f79a1f48e569 100644 --- a/src/npc/interaction/fSlaveSelfImpreg.js +++ b/src/npc/interaction/fSlaveSelfImpreg.js @@ -396,16 +396,16 @@ App.Interact.fSlaveSelfImpreg = function(slave) { knockMeUp(slave, 100, 2, slave.ID); - if (V.arcologies[0].FSRestart !== "unset") { + if (FutureSocieties.isActive('FSRestart')) { if ((slave.breedingMark !== 1 || V.propOutcome === 0) && V.eugenicsFullControl !== 1) { r.push(`Rumors spread about you having your slaves breed; the Societal Elite are <span class="red"> very displeased</span> by these rumors.`); V.failedElite += 5; } } - if (V.arcologies[0].FSRepopulationFocus !== "unset" && (V.arcologies[0].FSGenderFundamentalist === "unset" || V.arcologies[0].FSRepopulationFocus >= V.arcologies[0].FSGenderFundamentalist)) { + if (FutureSocieties.isActive('FSRepopulationFocus') && (!FutureSocieties.isActive('FSGenderFundamentalist') || V.arcologies[0].FSRepopulationFocus >= V.arcologies[0].FSGenderFundamentalist)) { // seems logical that repop would trump anything else if it's equal-or-more advanced than fundamentalism. - const delt = (V.arcologies[0].FSGenderFundamentalist !== "unset") + const delt = (FutureSocieties.isActive('FSGenderFundamentalist')) ? V.arcologies[0].FSRepopulationFocus - V.arcologies[0].FSGenderFundamentalist : V.arcologies[0].FSRepopulationFocus; @@ -415,7 +415,7 @@ App.Interact.fSlaveSelfImpreg = function(slave) { } else { r.push(`The traditional elements of your society disapprove of this degenerate form of reproduction, but their complaints are countered by those who believe producing more slaves by any means necessary.`); } - } else if (V.arcologies[0].FSGenderFundamentalist !== "unset") { + } else if (FutureSocieties.isActive('FSGenderFundamentalist')) { r.push(`Society <span class="red">is disgusted</span> by this degenerate form of reproduction.`); repX(forceNeg(V.FSSingleSlaveRep*(V.arcologies[0].FSGenderFundamentalist/V.FSLockinLevel)), "futureSocieties", slave); V.arcologies[0].FSGenderFundamentalist -= 0.05*V.FSSingleSlaveRep; diff --git a/src/npc/interaction/killSlave.js b/src/npc/interaction/killSlave.js index 63d85c72287569ee3597f699c832ee9dda8d62e1..9f4f5b9743e7815c52ed8f0fdf8a49eac141dcc6 100644 --- a/src/npc/interaction/killSlave.js +++ b/src/npc/interaction/killSlave.js @@ -26,10 +26,11 @@ App.UI.SlaveInteract.killSlave = function(slave) { let weapon = ["handgun", "pistol", "sidearm"].random(); let qualifiedFS = false; - for (const fs in FS) { - if (V.arcologies[0][fs] !== "unset") { + for (const [fs, w] of Object.entries(FS)) { + if (FutureSocieties.isActive(fs)) { qualifiedFS = true; - weapon = FS[fs]; + weapon = w; + break; } } @@ -393,7 +394,7 @@ App.UI.SlaveInteract.killSlave = function(slave) { relationsDiv.appendChild(getRivalEffects(rival)); } - if (V.arcologies[0].FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist')) { relationsDiv.appendChild(getFSEffects()); } diff --git a/src/npc/interaction/passage/fSlaveImpreg.js b/src/npc/interaction/passage/fSlaveImpreg.js index 17faacd9e804fb0887d319cebef76b5e76a9316e..345a22ad45f34427a486a5e3b0915e0abc4541b7 100644 --- a/src/npc/interaction/passage/fSlaveImpreg.js +++ b/src/npc/interaction/passage/fSlaveImpreg.js @@ -396,15 +396,15 @@ App.Interact.fSlaveImpreg = function(slave, impregnatrix) { r.push(`is <span class="lime">carrying ${impregnatrix.slaveName}'s child.</span>`); } - if (V.arcologies[0].FSRestart !== "unset" && V.eugenicsFullControl !== 1) { + if (FutureSocieties.isActive('FSRestart') && V.eugenicsFullControl !== 1) { r.push(`Rumors spread about you breeding your slaves; the Societal Elite are <span class="red">displeased</span> by these rumors.`); V.failedElite += 1; } - if (V.arcologies[0].FSGenderRadicalist !== 'unset' && slave.mpreg) { + if (FutureSocieties.isActive('FSGenderRadicalist') && slave.mpreg) { r.push(`Society <span class="reputation inc">approves</span> of your breeding your slave's ass; this advances the ideal all a slave needs is ${his} rear.`); FutureSocieties.Change("FSGenderRadicalist", 1); - } else if (V.arcologies[0].FSGenderFundamentalist !== 'unset') { + } else if (FutureSocieties.isActive('FSGenderFundamentalist')) { if (slave.mpreg) { r.push(`Society <span class="reputation dec">is disgusted</span> by this degenerate form of reproduction.`); FutureSocieties.Change("FSGenderFundamentalist", -1); diff --git a/src/npc/interaction/passage/fSlaveSlaveDick.js b/src/npc/interaction/passage/fSlaveSlaveDick.js index 7eff9b504dea08470c0d47e43faff476b9d3042e..52e56d0e4d99be5eafc1271b9a48e7161a446014 100644 --- a/src/npc/interaction/passage/fSlaveSlaveDick.js +++ b/src/npc/interaction/passage/fSlaveSlaveDick.js @@ -181,7 +181,7 @@ App.Interact.fSlaveSlaveDick = function(slave, rapist) { r.push(`${dickSize} cock`); } r.push(`throbbing in anticipation at being used like a toy.`); - } else if (slave.fetish === "pregnancy" && V.arcologies[0].FSRepopulationFocus !== "unset" && canPenetrate(slave)) { + } else if (slave.fetish === "pregnancy" && FutureSocieties.isActive('FSRepopulationFocus') && canPenetrate(slave)) { r.push(`${slave.slaveName} gets off thinking about pregnancy, and in your arcology most women are pregnant or fertile. ${He} knows someone's pussy will be around ${his} ${dickSize} cock soon, and is clearly lost in ${his} fantasies as ${his} cock swells to a throbbing erection.`); } } else if (slave.attrXX > 65) { diff --git a/src/npc/interaction/passage/matchmaking.js b/src/npc/interaction/passage/matchmaking.js index dc21d0842c49a3dc3c0a99d4c62590e6f358939e..c8614a88530a18f20f5a7604dca3cf47a1c387df 100644 --- a/src/npc/interaction/passage/matchmaking.js +++ b/src/npc/interaction/passage/matchmaking.js @@ -204,7 +204,7 @@ App.Interact.matchmaking = function(slave) { r.push(`very insecure. Perhaps unsurprisingly, they soon grow to depend on each other, each relying on their partner to support their low self-esteem.`); break; case "sinful": - if (V.arcologies[0].FSChattelReligionist === "unset") { + if (!FutureSocieties.isActive('FSChattelReligionist')) { r.push(`eagerly sinful, and they grow close by opening up and sharing their fraught histories of faith with each other.`); } else { r.push(`fanatical about being slave acolytes of the new faith, and their partnership is strengthened by their belief that it's divinely ordained.`); @@ -218,7 +218,7 @@ App.Interact.matchmaking = function(slave) { slave.trust -= 10; subSlave.trust -= 10; } - if ((V.arcologies[0].FSEgyptianRevivalistIncestPolicy > 0 || V.arcologies[0].FSEgyptianRevivalist !== "unset") && areRelated(slave, subSlave)) { + if (FutureSocieties.policyActive('FSEgyptianRevivalist', 'IncestPolicy') && areRelated(slave, subSlave)) { r.push(`They've been influenced by your arcology's constant efforts to normalize slave incest, and <span class="trust inc">trust</span> that their relationship will be strengthened by their close familial ties.`); slave.trust += 10; subSlave.trust += 10; diff --git a/src/npc/surgery/bodySwap/bodySwap.js b/src/npc/surgery/bodySwap/bodySwap.js index f295d17368feddb5acf010d4cc2635e92a05b359..916c28ad4e7fa0eaec314af1066c806ff0fb1216 100644 --- a/src/npc/surgery/bodySwap/bodySwap.js +++ b/src/npc/surgery/bodySwap/bodySwap.js @@ -335,7 +335,7 @@ globalThis.huskSwapSelection = function(body) { if (soul.fuckdoll === 0) { if (!hasAnyProstheticLimbs(soul)) { if (soul.indenture === -1) { - if (soul.breedingMark === 0 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset") { + if (soul.breedingMark === 0 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || !FutureSocieties.isActive('FSRestart')) { if (WombReserveCount(soul) === 0) { if (soul.ID !== body.ID) { App.UI.DOM.appendNewElement("div", el, diff --git a/src/npc/surgery/bodySwap/bodySwapReaction.js b/src/npc/surgery/bodySwap/bodySwapReaction.js index 96dc0c3daaf37b947cf264dcf2b1a32f1d0e94df..f985fa4c90bfef877cac6ad79b8428175b7a5fe6 100644 --- a/src/npc/surgery/bodySwap/bodySwapReaction.js +++ b/src/npc/surgery/bodySwap/bodySwapReaction.js @@ -399,7 +399,7 @@ globalThis.bodySwapReaction = function(body, soul) { } else if (body.devotion > 20) { r.push(`<span class="orange">that ${his} chest is smaller.</span> ${He} shrugs this off, as ${his} devotion to you overrides any anguish this might cause.`); } else { - r.push(`<span class="orange">that ${his} chest is not as large as it once was.</span> ${He} looks at you with <span class="mediumorchid">anger</span>${(V.arcologies[0].FSSlimnessEnthusiast === "unset") ? `as this is not only a cruel manipulation of ${his} body, but ${he} is now less of a woman in the eyes of a vast majority of society` : ``}.`); + r.push(`<span class="orange">that ${his} chest is not as large as it once was.</span> ${He} looks at you with <span class="mediumorchid">anger</span>${(!FutureSocieties.isActive('FSSlimnessEnthusiast')) ? `as this is not only a cruel manipulation of ${his} body, but ${he} is now less of a woman in the eyes of a vast majority of society` : ``}.`); body.devotion -= 2; } } else { /* (No change (less than a 100 cc's of change)*/ @@ -496,7 +496,7 @@ globalThis.bodySwapReaction = function(body, soul) { } else { r.push(`faces`); } - r.push(`you with <span class="mediumorchid">anger</span>${(V.arcologies[0].FSSlimnessEnthusiast === "unset") ? `as this is not only a cruel manipulation of ${his} body, but ${he} is now less of a woman in the eyes of a vast majority of society` : ``}.`); + r.push(`you with <span class="mediumorchid">anger</span>${(!FutureSocieties.isActive('FSSlimnessEnthusiast')) ? `as this is not only a cruel manipulation of ${his} body, but ${he} is now less of a woman in the eyes of a vast majority of society` : ``}.`); body.devotion -= 2; } } else { /* (No change (less than a 100 cc's of change)*/ @@ -530,7 +530,7 @@ globalThis.bodySwapReaction = function(body, soul) { r.push(`and finds nothing. <span class="orange">Not only have ${his} implants been removed, but ${he}'s been left completely flat.</span> It is what it is.`); } else { r.push(`and finds nothing. <span class="orange">Not only have ${his} implants been removed, but ${he}'s been left completely flat.</span>`); - if (V.arcologies[0].FSSlimnessEnthusiast === "unset") { + if (!FutureSocieties.isActive('FSSlimnessEnthusiast')) { r.push(`${He} knows much of society will view ${him} as a lesser person and a part of ${him} feels the same.`); } r.push(`This feels like a cruel manipulation of ${his} body and ${he} <span class="mediumorchid">hates you</span> a little more for it.`); @@ -598,7 +598,7 @@ globalThis.bodySwapReaction = function(body, soul) { } else { r.push(`gazes`); } - r.push(`at you with <span class="mediumorchid">anger${(V.arcologies[0].FSSlimnessEnthusiast === "unset") ? `</span> as this is not only a cruel manipulation of ${his} body, but ${he} is now less of a woman in the eyes of a vast majority of society.` : `.</span>`}`); + r.push(`at you with <span class="mediumorchid">anger${(!FutureSocieties.isActive('FSSlimnessEnthusiast')) ? `</span> as this is not only a cruel manipulation of ${his} body, but ${he} is now less of a woman in the eyes of a vast majority of society.` : `.</span>`}`); body.devotion -= 2; } } else { /* (No change (less than a 100 cc's of change)*/ @@ -632,7 +632,7 @@ globalThis.bodySwapReaction = function(body, soul) { r.push(`and finds nothing; <span class="orange">${his} breasts are completely gone.</span> At least it's a literal weight off ${his} chest.`); } else { r.push(`and finds nothing; <span class="orange">${his} breasts are completely gone.</span>`); - if (V.arcologies[0].FSSlimnessEnthusiast === "unset") { + if (!FutureSocieties.isActive('FSSlimnessEnthusiast')) { r.push(`${He} knows much of society will view ${him} as a lesser person and a part of ${him} feels the same.`); } r.push(`This feels like a cruel manipulation of ${his} body and ${he} <span class="mediumorchid">hates you</span> a little more for it.`); @@ -696,7 +696,7 @@ globalThis.bodySwapReaction = function(body, soul) { } else if (body.devotion > 20) { r.push(`that <span class="orange">${his} breasts are smaller.</span> ${He} shrugs this off, as ${his} devotion to you overrides any anguish this might cause.`); } else { - r.push(`that <span class="orange">${his} chest is not as large as it once was.</span> ${He} looks at you with <span class="mediumorchid">anger${(V.arcologies[0].FSSlimnessEnthusiast === "unset") ? `</span> as this is not only a cruel manipulation of ${his} body, but ${he} is now less of a woman in the eyes of a vast majority of society.` : `.</span>`}`); + r.push(`that <span class="orange">${his} chest is not as large as it once was.</span> ${He} looks at you with <span class="mediumorchid">anger${(!FutureSocieties.isActive('FSSlimnessEnthusiast')) ? `</span> as this is not only a cruel manipulation of ${his} body, but ${he} is now less of a woman in the eyes of a vast majority of society.` : `.</span>`}`); body.devotion -= 2; } } else { /* (No change (less than a 100 cc's of change)*/ @@ -1186,7 +1186,7 @@ globalThis.bodySwapReaction = function(body, soul) { r.push(`${He} would prefer to be fitter, but this just means ${he} can work it off for your amusement.`); } else { r.push(`${He} is happy that you have given ${him} more weight for you to play`); - if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + if (FutureSocieties.isActive('FSSlimnessEnthusiast')) { r.push(`with, but is somewhat confused that you would do so against the society you created.`); } else { r.push(`with.`); @@ -1211,10 +1211,10 @@ globalThis.bodySwapReaction = function(body, soul) { } else { r.push(`${He} is <span class="mediumorchid">irritated and frustrated</span> at this new`); body.devotion -= 5; - if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + if (FutureSocieties.isActive('FSSlimnessEnthusiast')) { r.push(`weight, <span class="mediumorchid">doubly so</span> because your society will view ${him} as less of a person now.`); body.devotion -= 5; - } else if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + } else if (FutureSocieties.isActive('FSHedonisticDecadence')) { r.push(`weight, however ${he} is at least <span class="hotpink">somewhat mollified</span> with the knowledge that society will treat ${him} with a bit more reverence now.`); body.devotion += 3; } else { @@ -1228,14 +1228,14 @@ globalThis.bodySwapReaction = function(body, soul) { r.push(`${He} doesn't show much reaction to ${his} lost weight.`); } else if (body.devotion > 50) { /* devoted*/ r.push(`${He} is pleased that you have given ${him} a more slender and svelte`); - if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + if (FutureSocieties.isActive('FSSlimnessEnthusiast')) { r.push(`body and is even happier that ${his} body is more in line with your society.`); } else { r.push(`body.`); } } else { /* not devoted*/ r.push(`${He} is a bit miffed that you would modify ${his} body in such a way, knowing it has nothing to do with making ${him}`); - if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + if (FutureSocieties.isActive('FSSlimnessEnthusiast')) { r.push(`happy, but feels a bit better knowing that society will now view ${him} in a better light.`); } else { r.push(`happy.`); @@ -1254,7 +1254,7 @@ globalThis.bodySwapReaction = function(body, soul) { r.push(`${He} is happy with ${his} newfound strength and looks forward to putting this power to work for you.`); } else { r.push(`${He} is irritated that you would change something like this about ${him}`); - if (body.genes === "XX" && V.arcologies[0].FSPhysicalIdealist === "unset") { + if (body.genes === "XX" && !FutureSocieties.isActive('FSPhysicalIdealist')) { r.push(`and is <span class="mediumorchid">annoyed</span> that ${he} now looks less feminine.`); body.devotion -= 3; } else { @@ -2198,7 +2198,7 @@ globalThis.bodySwapReaction = function(body, soul) { } else if (body.devotion > 20) { r.push(`<span class="orange">that ${his} chest is smaller.</span> ${He} shrugs this off, as ${his} devotion to you overrides any anguish this might cause.`); } else { - r.push(`<span class="orange">that ${his} chest is not as large as it once was.</span> ${He} looks at you with <span class="mediumorchid">anger${(V.arcologies[0].FSSlimnessEnthusiast === "unset") ? `</span> as this is not only a cruel manipulation of ${his} body, but ${he} is now less of a woman in the eyes of a vast majority of society.` : `.</span>`}`); + r.push(`<span class="orange">that ${his} chest is not as large as it once was.</span> ${He} looks at you with <span class="mediumorchid">anger${(!FutureSocieties.isActive('FSSlimnessEnthusiast')) ? `</span> as this is not only a cruel manipulation of ${his} body, but ${he} is now less of a woman in the eyes of a vast majority of society.` : `.</span>`}`); body.devotion -= 2; } } else { /* (No change (less than a 100 cc's of change)*/ @@ -2289,7 +2289,7 @@ globalThis.bodySwapReaction = function(body, soul) { } else if (body.devotion > 20) { r.push(`<span class="orange">${his} chest is smaller.</span> ${He} shrugs this off, as ${his} devotion to you overrides any anguish this might cause.`); } else { - r.push(`<span class="orange">${his} chest is not as large as it once was.</span> ${He} looks at you with <span class="mediumorchid">anger${(V.arcologies[0].FSSlimnessEnthusiast === "unset") ? `</span> as this is not only a cruel manipulation of ${his} body, but ${he} is now less of a woman in the eyes of a vast majority of society.` : `.</span>`}`); + r.push(`<span class="orange">${his} chest is not as large as it once was.</span> ${He} looks at you with <span class="mediumorchid">anger${(!FutureSocieties.isActive('FSSlimnessEnthusiast')) ? `</span> as this is not only a cruel manipulation of ${his} body, but ${he} is now less of a woman in the eyes of a vast majority of society.` : `.</span>`}`); body.devotion -= 2; } } else { /* (No change (less than a 100 cc's of change)*/ @@ -2323,7 +2323,7 @@ globalThis.bodySwapReaction = function(body, soul) { r.push(`and finds nothing. <span class="orange">Not only have ${his} implants been removed, but ${he}'s been left completely flat.</span> It is what it is.`); } else { r.push(`and finds nothing. <span class="orange">Not only have ${his} implants been removed, but ${he}'s been left completely flat.</span>`); - if (V.arcologies[0].FSSlimnessEnthusiast === "unset") { + if (!FutureSocieties.isActive('FSSlimnessEnthusiast')) { r.push(`${He} knows much of society will view ${him} as a lesser person and a part of ${him} feels the same.`); } r.push(`This feels like a cruel manipulation of ${his} body and ${he} <span class="mediumorchid">hates you</span> a little more for it.`); @@ -2380,7 +2380,7 @@ globalThis.bodySwapReaction = function(body, soul) { r.push(`<span class="orange">and finds that ${his} implants have been removed.</span> ${He} shrugs this off, as ${his} devotion to you overrides any anguish this might cause.`); } else { r.push(`<span class="orange">and finds that ${his} chest is not as large as it once was.</span> ${He} looks at you with`); - if (V.arcologies[0].FSSlimnessEnthusiast === "unset") { + if (!FutureSocieties.isActive('FSSlimnessEnthusiast')) { r.push(`<span class="mediumorchid">anger</span> as this is not only a cruel manipulation of ${his} body, but ${he} is now less of a woman in the eyes of a vast majority of society.`); } else { r.push(`<span class="mediumorchid">anger.</span>`); @@ -2418,7 +2418,7 @@ globalThis.bodySwapReaction = function(body, soul) { r.push(`and finds nothing; <span class="orange">${his} breasts are completely gone.</span> At least it's a literal weight off ${his} chest.`); } else { r.push(`and finds nothing; <span class="orange">${his} breasts are completely gone.</span>`); - if (V.arcologies[0].FSSlimnessEnthusiast === "unset") { + if (!FutureSocieties.isActive('FSSlimnessEnthusiast')) { r.push(`${He} knows much of society will view ${him} as a lesser person and a part of ${him} feels the same.`); } r.push(`This feels like a cruel manipulation of ${his} body and ${he} <span class="mediumorchid">hates you</span> a little more for it.`); @@ -2477,7 +2477,7 @@ globalThis.bodySwapReaction = function(body, soul) { r.push(`that <span class="orange">${his} breasts are smaller.</span> ${He} shrugs this off, as ${his} devotion to you overrides any anguish this might cause.`); } else { r.push(`that <span class="orange">${his} chest is not as large as it once was.</span> ${He} looks at you with`); - if (V.arcologies[0].FSSlimnessEnthusiast === "unset") { + if (!FutureSocieties.isActive('FSSlimnessEnthusiast')) { r.push(`<span class="mediumorchid">anger</span> as this is not only a cruel manipulation of ${his} body, but ${he} is now less of a woman in the eyes of a vast majority of society.`); } else { r.push(`<span class="mediumorchid">anger.</span>`); @@ -2947,7 +2947,7 @@ globalThis.bodySwapReaction = function(body, soul) { r.push(`${He} would prefer to be fitter, but without arms and legs, ${he} gets little say in the matter.`); } else { r.push(`${He} is happy that you have given ${him} more weight for you to play`); - if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + if (FutureSocieties.isActive('FSSlimnessEnthusiast')) { r.push(`with, but is somewhat confused that you would do so against the society you created.`); } else { r.push(`with.`); @@ -2972,10 +2972,10 @@ globalThis.bodySwapReaction = function(body, soul) { } else { r.push(`${He} is <span class="mediumorchid">irritated and frustrated</span> at this new`); body.devotion -= 5; - if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + if (FutureSocieties.isActive('FSSlimnessEnthusiast')) { r.push(`weight, <span class="mediumorchid">doubly so</span> because your society will view ${him} as less of a person now.`); body.devotion -= 5; - } else if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + } else if (FutureSocieties.isActive('FSHedonisticDecadence')) { r.push(`weight, however ${he} is at least <span class="hotpink">somewhat mollified</span> with the knowledge that society will treat ${him} a with a bit more reverence now.`); body.devotion += 3; } else { @@ -2989,14 +2989,14 @@ globalThis.bodySwapReaction = function(body, soul) { r.push(`${He} doesn't show much reaction to ${his} lost weight.`); } else if (body.devotion > 50) { /* devoted*/ r.push(`${He} is pleased that you have given ${him} a more slender and svelte`); - if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + if (FutureSocieties.isActive('FSSlimnessEnthusiast')) { r.push(`body and is even happier that ${his} body is more in line with your society.`); } else { r.push(`body.`); } } else { /* not devoted*/ r.push(`${He} is a bit miffed that you would modify ${his} body in such a way, knowing it has nothing to do with making ${him} happy`); - if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") { + if (FutureSocieties.isActive('FSSlimnessEnthusiast')) { r.push(`happy, but feels a bit better knowing that society will now view ${him} in a better light.`); } else { r.push(`happy.`); @@ -3015,7 +3015,7 @@ globalThis.bodySwapReaction = function(body, soul) { r.push(`${He} is happy with ${his} newfound strength and looks forward to putting this power to work for you, as limited as it may be.`); } else { r.push(`${He} is irritated that you would change something like this about ${him}`); - if (body.genes === "XX" && V.arcologies[0].FSPhysicalIdealist === "unset") { + if (body.genes === "XX" && !FutureSocieties.isActive('FSPhysicalIdealist')) { r.push(`and is <span class="mediumorchid">annoyed</span> that ${he} now looks less feminine.`); body.devotion -= 3; } else { diff --git a/src/npc/surgery/surgery.js b/src/npc/surgery/surgery.js index 4bde1ba7f09aa91622dcdd3570f96f11b90ca76a..6b23d69b6311e59fd3ea818f6e96507545f59c38 100644 --- a/src/npc/surgery/surgery.js +++ b/src/npc/surgery/surgery.js @@ -455,7 +455,7 @@ App.Medicine.Surgery.sizingProcedures = function() { } } } - if ((slave.breedingMark !== 1 || V.propOutcome !== 1 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) { + if ((slave.breedingMark !== 1 || V.propOutcome !== 1 || V.eugenicsFullControl === 1 || !FutureSocieties.isActive('FSRestart'))) { if (App.Medicine.fleshSize(slave, "boobs") >= 2000 && pointIsCloserToRange(slave.boobs, 0, dOptions.targetSize)) { procedures.push(new App.Medicine.Surgery.Procedures.Mastectomy(slave)); } diff --git a/src/personalAssistant/assistantAppearance.js b/src/personalAssistant/assistantAppearance.js index 3eaa643029ff0a28a1bbe7ca6a2adcbc24bcd945..4a3ad2c4bf6ec14476ae7fef3dcbd0cd668a478c 100644 --- a/src/personalAssistant/assistantAppearance.js +++ b/src/personalAssistant/assistantAppearance.js @@ -13,7 +13,7 @@ globalThis.PersonalAssistantAppearance = function() { } = (V.assistant.market) ? getPronouns(assistant.pronouns().market).appendSuffix('M') : getPronouns(assistant.pronouns().main).appendSuffix('M'); // TODO: not sure how to set this is market is not defined, using main as fallback for now for testing. function assistantRace() { - if (V.arcologies[0].FSSupremacist !== "unset" && V.assistant.fsAppearance !== "subjugationist") { + if (FutureSocieties.isActive('FSSupremacist') && V.assistant.fsAppearance !== "subjugationist") { return V.arcologies[0].FSSupremacistRace; } else if (V.assistant.fsAppearance === "subjugationist") { return V.arcologies[0].FSSubjugationistRace; @@ -461,7 +461,7 @@ globalThis.PersonalAssistantAppearance = function() { break; case "angel": r.push(`${HeA}'s a gorgeous little ${assistantRace()} angel with long radiant hair and large`); - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { r.push(`black`); } else { r.push(`white`); @@ -501,7 +501,7 @@ globalThis.PersonalAssistantAppearance = function() { break; case "cherub": r.push(`${HeA}'s a cute little ${assistantRace()} minor angel with radiant hair and arm length`); - if (V.arcologies[0].FSDegradationist !== "unset") { + if (FutureSocieties.isActive('FSDegradationist')) { r.push(`black`); } else { r.push(`white`); @@ -1734,14 +1734,14 @@ globalThis.PersonalAssistantAppearance = function() { if (V.arcologies[0].FSIntellectualDependencyLawBeauty === 1) { r.push(`${HisA} lavish makeup, long nails, luxurious hair,`); if (V.arcologies[0].FSSlimnessEnthusiastLaw !== 1) { - if (V.arcologies[0].FSSlimnessEnthusiast === "unset") { - if (V.arcologies[0].FSAssetExpansionist !== "unset" || V.arcologies[0].FSTransformationFetishist !== "unset") { + if (!FutureSocieties.isActive('FSSlimnessEnthusiast')) { + if (FutureSocieties.isActive('FSAssetExpansionist') || FutureSocieties.isActive('FSTransformationFetishist')) { r.push(`heaving`); - if (V.arcologies[0].FSTransformationFetishist !== "unset") { + if (FutureSocieties.isActive('FSTransformationFetishist')) { r.push(`fake`); } r.push(`tits, downright massive`); - if (V.arcologies[0].FSTransformationFetishist !== "unset") { + if (FutureSocieties.isActive('FSTransformationFetishist')) { r.push(`implant-filled`); } r.push(`ass,`); @@ -1749,14 +1749,14 @@ globalThis.PersonalAssistantAppearance = function() { r.push(`huge tits, fat ass,`); } } else { - if (V.arcologies[0].FSTransformationFetishist !== "unset") { + if (FutureSocieties.isActive('FSTransformationFetishist')) { r.push(`breast implants, fake ass,`); } else { r.push(`tits pushing the boundary of good taste, nearly obscene ass,`); } } } - if (V.arcologies[0].FSRepopulationFocus !== "unset") { + if (FutureSocieties.isActive('FSRepopulationFocus')) { r.push(`baby bump,`); } r.push(`narrow waist, and huge dicksucking lips spell out 'bimbo' far better than ${heA} ever could.`); @@ -1942,7 +1942,7 @@ globalThis.PersonalAssistantAppearance = function() { globalThis.assistantFS = function() { const el = new DocumentFragment(); for (const FS of App.Data.Assistant.appearanceForFS.keys()) { - if (V.arcologies[0][FS] !== "unset") { + if (FutureSocieties.isActive(FS)) { const linkArray = []; const div = document.createElement("div"); div.append(App.Data.FutureSociety.records[FS].noun, " likes: "); diff --git a/src/player/desc/pLongBody.js b/src/player/desc/pLongBody.js index 1643a76f78a2be309fa37b2ffd72103c4c8bd357..bcea2e89ff38b8aa5bc453245ab4684a347996a3 100644 --- a/src/player/desc/pLongBody.js +++ b/src/player/desc/pLongBody.js @@ -99,19 +99,19 @@ App.Desc.Player.body = function(PC = V.PC) { if (PC.weight > 190) { r.push(`<span class="red">extremely obese.</span>`); } else if (PC.weight > 160) { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { r.push(`attractively heavyset, though it may be getting to be a bit much.`); } else { r.push(`<span class="red">have let yourself go; you are much too overweight.</span>`); } } else if (PC.weight > 130) { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { r.push(`coated in thick layers of pleasantly soft flesh.`); } else { r.push(`very fat.`); } } else if (PC.weight > 95) { - if (V.arcologies[0].FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence')) { r.push(`coated in a layer of pleasantly soft flesh.`); } else if (PC.hips > 1) { r.push(`extremely curvy, if a bit on the heavy side, given the way your excess fat rests on your hips.`); diff --git a/src/player/desc/pLongBoobs.js b/src/player/desc/pLongBoobs.js index c94ae65490091f53a2204ca19f96872c31436b27..ed6d5ac47fe997aac87393dffff4374eff25ab1e 100644 --- a/src/player/desc/pLongBoobs.js +++ b/src/player/desc/pLongBoobs.js @@ -437,56 +437,290 @@ App.Desc.Player.boobs = function(PC = V.PC) { // block unfinished for now! if (PC.boobs >= 90000) { r.push(`you have a <span class="orange">pair of door-jamming breasts.</span>`); + if (implantRatio >= 0.75) { + r.push(oversizedImplants); + } else if (implantRatio >= 0.50) { + r.push(obviousImplants); + } else { + r.push(boobShape()); + r.push(`They refuse to come to a rest once they get moving.`); + } + r.push(boobVolume()); } else if (PC.boobs >= 70000) { r.push(`you have a <span class="orange">pair of door-crowding breasts.</span>`); + if (implantRatio >= 0.75) { + r.push(oversizedImplants); + } else if (implantRatio >= 0.50) { + r.push(obviousImplants); + } else { + r.push(boobShape()); + r.push(`They refuse to come to a rest once they get moving.`); + } + r.push(boobVolume()); } else if (PC.boobs >= 55000) { r.push(`you have a <span class="orange">pair of lap-filling breasts.</span>`); + if (implantRatio >= 0.75) { + r.push(oversizedImplants); + } else if (implantRatio >= 0.50) { + r.push(obviousImplants); + } else { + r.push(boobShape()); + r.push(`They refuse to come to a rest once they get moving.`); + } + r.push(boobVolume()); } else if (PC.boobs >= 40000) { r.push(`you have a <span class="orange">pair of beachball-sized breasts.</span>`); + if (implantRatio >= 0.75) { + r.push(oversizedImplants); + } else if (implantRatio >= 0.50) { + r.push(obviousImplants); + } else { + r.push(boobShape()); + r.push(`They refuse to come to a rest once they get moving.`); + } + r.push(boobVolume()); } else if (PC.boobs >= 25000) { r.push(`you have a <span class="orange">pair of figure-dominating breasts.</span>`); + if (implantRatio >= 0.75) { + r.push(oversizedImplants); + } else if (implantRatio >= 0.50) { + r.push(obviousImplants); + } else { + r.push(boobShape()); + r.push(`They refuse to come to a rest once they get moving.`); + } + r.push(boobVolume()); } else if (PC.boobs >= 15000) { r.push(`you have a <span class="orange">pair of arm-filling breasts.</span>`); + if (implantRatio >= 0.75) { + r.push(oversizedImplants); + } else if (implantRatio >= 0.50) { + r.push(obviousImplants); + } else { + r.push(boobShape()); + r.push(`They refuse to come to a rest once they get moving.`); + } + r.push(boobVolume()); } else if (PC.boobs >= 10000) { r.push(`you have a <span class="orange">pair of obscenely massive breasts.</span>`); + if (implantRatio >= 0.75) { + r.push(oversizedImplants); + } else if (implantRatio >= 0.50) { + r.push(obviousImplants); + } else { + r.push(boobShape()); + r.push(`They refuse to come to a rest once they get moving.`); + } + r.push(boobVolume()); } else if (PC.boobs >= 9000) { r.push(`you have a <span class="orange">pair of unbelievable ZZZ-cup breasts.</span>`); + if (implantRatio >= 0.75) { + r.push(oversizedImplants); + } else if (implantRatio >= 0.50) { + r.push(obviousImplants); + } else { + r.push(boobShape()); + r.push(`They refuse to come to a rest once they get moving.`); + } + r.push(boobVolume()); } else if (PC.boobs >= 8500) { r.push(`you have a <span class="orange">pair of unbelievable ZZ-cup breasts.</span>`); + if (implantRatio >= 0.75) { + r.push(oversizedImplants); + } else if (implantRatio >= 0.50) { + r.push(obviousImplants); + } else { + r.push(boobShape()); + r.push(`They refuse to come to a rest once they get moving.`); + } + r.push(boobVolume()); } else if (PC.boobs >= 8000) { r.push(`you have a <span class="orange">pair of mind-blowing Z-cup breasts.</span>`); + if (implantRatio >= 0.75) { + r.push(oversizedImplants); + } else if (implantRatio >= 0.50) { + r.push(obviousImplants); + } else { + r.push(boobShape()); + r.push(`They refuse to come to a rest once they get moving.`); + } + r.push(boobVolume()); } else if (PC.boobs >= 7500) { r.push(`you have a <span class="orange">pair of mind-blowing Y-cup breasts.</span>`); + if (implantRatio >= 0.75) { + r.push(oversizedImplants); + } else if (implantRatio >= 0.50) { + r.push(obviousImplants); + } else { + r.push(boobShape()); + r.push(`They refuse to come to a rest once they get moving.`); + } + r.push(boobVolume()); } else if (PC.boobs >= 7000) { r.push(`you have a <span class="orange">pair of spectacular X-cup breasts.</span>`); + if (implantRatio >= 0.75) { + r.push(oversizedImplants); + } else if (implantRatio >= 0.50) { + r.push(obviousImplants); + } else { + r.push(boobShape()); + r.push(`They refuse to come to a rest once they get moving.`); + } + r.push(boobVolume()); } else if (PC.boobs >= 6500) { r.push(`you have a <span class="orange">pair of spectacular V-cup breasts.</span>`); + if (implantRatio >= 0.75) { + r.push(oversizedImplants); + } else if (implantRatio >= 0.50) { + r.push(obviousImplants); + } else { + r.push(boobShape()); + r.push(`They refuse to come to a rest once they get moving.`); + } + r.push(boobVolume()); } else if (PC.boobs >= 5500) { r.push(`you have a <span class="orange">pair of attention-grabbing U-cup breasts.</span>`); + if (implantRatio >= 0.75) { + r.push(oversizedImplants); + } else if (implantRatio >= 0.50) { + r.push(obviousImplants); + } else { + r.push(boobShape()); + r.push(`They refuse to come to a rest once they get moving.`); + } + r.push(boobVolume()); } else if (PC.boobs >= 5100) { r.push(`you have a <span class="orange">pair of unmissable T-cup breasts.</span>`); + if (implantRatio >= 0.75) { + r.push(oversizedImplants); + } else if (implantRatio >= 0.50) { + r.push(obviousImplants); + } else { + r.push(boobShape()); + r.push(`They refuse to come to a rest once they get moving.`); + } + r.push(boobVolume()); } else if (PC.boobs >= 4700) { r.push(`you have a <span class="orange">pair of astounding S-cup breasts.</span>`); + if (implantRatio >= 0.75) { + r.push(oversizedImplants); + } else if (implantRatio >= 0.50) { + r.push(obviousImplants); + } else { + r.push(boobShape()); + r.push(`They refuse to come to a rest once they get moving.`); + } + r.push(boobVolume()); } else if (PC.boobs >= 4300) { r.push(`you have a <span class="orange">pair of unreal R-cup breasts.</span>`); + if (implantRatio >= 0.75) { + r.push(oversizedImplants); + } else if (implantRatio >= 0.50) { + r.push(obviousImplants); + } else { + r.push(boobShape()); + r.push(`They refuse to come to a rest once they get moving.`); + } + r.push(boobVolume()); } else if (PC.boobs >= 3950) { r.push(`you have a <span class="orange">pair of shocking Q-cup breasts.</span>`); + if (implantRatio >= 0.75) { + r.push(oversizedImplants); + } else if (implantRatio >= 0.50) { + r.push(obviousImplants); + } else { + r.push(boobShape()); + r.push(`They refuse to come to a rest once they get moving.`); + } + r.push(boobVolume()); } else if (PC.boobs >= 3600) { r.push(`you have a <span class="orange">pair of disproportionate P-cup breasts.</span>`); + if (implantRatio >= 0.75) { + r.push(oversizedImplants); + } else if (implantRatio >= 0.50) { + r.push(obviousImplants); + } else { + r.push(boobShape()); + r.push(`They refuse to come to a rest once they get moving.`); + } + r.push(boobVolume()); } else if (PC.boobs >= 3250) { r.push(`you have a <span class="orange">pair of awe-inspiring O-cup breasts.</span>`); + if (implantRatio >= 0.75) { + r.push(oversizedImplants); + } else if (implantRatio >= 0.50) { + r.push(obviousImplants); + } else { + r.push(boobShape()); + r.push(`They refuse to come to a rest once they get moving.`); + } + r.push(boobVolume()); } else if (PC.boobs >= 2900) { r.push(`you have a <span class="orange">pair of tremendous N-cup breasts.</span>`); + if (implantRatio >= 0.75) { + r.push(oversizedImplants); + } else if (implantRatio >= 0.50) { + r.push(obviousImplants); + } else { + r.push(boobShape()); + r.push(`They refuse to come to a rest once they get moving.`); + } + r.push(boobVolume()); } else if (PC.boobs >= 2600) { r.push(`you have a <span class="orange">pair of magnificent M-cup breasts.</span>`); + if (implantRatio >= 0.75) { + r.push(oversizedImplants); + } else if (implantRatio >= 0.50) { + r.push(obviousImplants); + } else { + r.push(boobShape()); + r.push(`They refuse to come to a rest once they get moving.`); + } + r.push(boobVolume()); } else if (PC.boobs >= 2300) { r.push(`you have a <span class="orange">pair of stupendous L-cup breasts.</span>`); + if (implantRatio >= 0.75) { + r.push(oversizedImplants); + } else if (implantRatio >= 0.50) { + r.push(obviousImplants); + } else { + r.push(boobShape()); + r.push(`They refuse to come to a rest once they get moving.`); + } + r.push(boobVolume()); } else if (PC.boobs >= 2050) { r.push(`you have a <span class="orange">pair of titanic K-cup breasts.</span>`); + if (implantRatio >= 0.75) { + r.push(oversizedImplants); + } else if (implantRatio >= 0.50) { + r.push(obviousImplants); + } else { + r.push(boobShape()); + r.push(`They refuse to come to a rest once they get moving.`); + } + r.push(boobVolume()); } else if (PC.boobs >= 1800) { r.push(`you have a <span class="orange">pair of enormous J-cup breasts.</span>`); - } else if (PC.boobs >= 1600) { + if (implantRatio >= 0.75) { + r.push(oversizedImplants); + } else if (implantRatio >= 0.50) { + r.push(obviousImplants); + } else { + r.push(boobShape()); + r.push(`They refuse to come to a rest once they get moving.`); + } + r.push(boobVolume()); + } else if (PC.boobs >= 1600) { //could use more breast descriptions on sizes here and up r.push(`you have a <span class="orange">pair of massive I-cup breasts.</span>`); + if (implantRatio >= 0.75) { + r.push(oversizedImplants); + } else if (implantRatio >= 0.50) { + r.push(obviousImplants); + } else { + r.push(boobShape()); + r.push(`They refuse to come to a rest once they get moving.`); + } + r.push(boobVolume()); } else if (PC.boobs >= 1400) { r.push(`you have a <span class="orange">pair of huge H-cup breasts.</span>`); if (implantRatio >= 0.75) { @@ -591,11 +825,13 @@ App.Desc.Player.boobs = function(PC = V.PC) { } else { r.push(`you have nothing in the breast department. You're <span class="orange">completely flat.</span>`); } - // temp + + /* if (PC.boobs >= 1600) { r.push(boobShape()); r.push(boobVolume()); } + */ r.push( boobFreckles(), nipples() diff --git a/src/player/desc/pLongCrotch.js b/src/player/desc/pLongCrotch.js index 994f3765cad8bd172d33a11e1271eecffd90f986..de406b5342c0d37aa4fb01f9f6616f751d40acfc 100644 --- a/src/player/desc/pLongCrotch.js +++ b/src/player/desc/pLongCrotch.js @@ -1378,6 +1378,9 @@ App.Desc.Player.crotch = function(PC = V.PC) { r.push(`According to the data, it shouldn't be possible for you to prematurely give birth.`); } } + if ((V.PC.ovaries > 0 || V.PC.mpreg > 0) && V.PC.ovaryAge < 0) { // impossible for now + r.push(`You've had your ovaries replaced with genetically modified clones that will continue to produce new ova for as long as you live.`); + } if (PC.ovaImplant !== 0) { if (PC.wombImplant === "restraint") { r.push(`You ovaries are modified as well;`); diff --git a/src/player/desc/pLongFace.js b/src/player/desc/pLongFace.js index 084956a0d2ed5e080b7e72540d035e1d783f4adc..064005c1d3617b0b799bbd4d7060ac098caf3a19 100644 --- a/src/player/desc/pLongFace.js +++ b/src/player/desc/pLongFace.js @@ -190,7 +190,7 @@ App.Desc.Player.face = function(PC = V.PC) { } } if (V.showImplantEffects === 1) { - if (V.arcologies[0].FSTransformationFetishist !== "unset") { + if (FutureSocieties.isActive('FSTransformationFetishist')) { if (PC.lipsImplant > 0) { r.push(`They are about ${Math.floor((PC.lipsImplant / PC.lips) * 100)}% implant.`); } diff --git a/src/player/desc/pNotesBelly.js b/src/player/desc/pNotesBelly.js index 31ad6617d607edb1c2ce14a83c61187476043c23..0d30350ab50968925514639b4cd4a4186bfc5d9c 100644 --- a/src/player/desc/pNotesBelly.js +++ b/src/player/desc/pNotesBelly.js @@ -211,7 +211,7 @@ App.Desc.Player.pNotesBelly = function(PC = V.PC) { r.push(`in your belly.`); } else if (PC.belly >= 75000) { r.push(`Your belly is starting to become worrying to you. You're positively gigantic and quite tired of it.`); - if (V.arcologies[0].FSRepopulationFocus !== "unset") { + if (FutureSocieties.isActive('FSRepopulationFocus')) { r.push(`The last thing on peoples' minds these days is fucking you too.`); } } else if (PC.belly >= 60000) { diff --git a/src/player/doctorConsultation.js b/src/player/doctorConsultation.js index 33fdc7fce4edf7bf645858775107fa2eb9ec1d4d..e6658b925c881d01fccbfe16803254ecfb68b996 100644 --- a/src/player/doctorConsultation.js +++ b/src/player/doctorConsultation.js @@ -13,6 +13,7 @@ App.UI.doctorConsultation = function() { const {girlP} = getPronouns(V.PC).appendSuffix('P'); const arcology = V.arcologies[0]; + const hedonisticDecadenceActive = FutureSocieties.isActive('FSHedonisticDecadence', arcology); const price = Math.max(Math.min((Math.pow(5, V.baseDifficulty) * 10), 10000), 500); if (V.doctor.state > 0) { // Don't charge on the first visit. @@ -30,7 +31,7 @@ App.UI.doctorConsultation = function() { V.doctor.state = 2; } else { App.Events.addParagraph(frag, [ - `You make your way to ${arcology.name}'s main medical pavilion, which houses the largest private clinic in the arcology, intent on finding a primary physician to keep an eye on your health. ${arcology.FSHedonisticDecadence !== "unset" ? "There is a substantial wait before you're seen, owing to the increasingly eccentric people that make up your citizenry, so you have plenty of time to deal with registering and enjoy a little people-watching" : "The clinic operates like a well-oiled machine, and you barely get through registering yourself"} before your name is called. As you enter the exam room, you're greeted by an imposing, rather harried-looking ${womanU}, "Welcome, ${PlayerName()}.${V.PC.actualAge < V.minimumSlaveAge ? `" ${HeU} gives you a momentary dirty look before realizing what ${heU} did. "Apologies, I just thought you'd be a little older... never mind.` : ""} I will be serving as your doctor from here on, and while the first visit is free, future ones will run you <span class="noteworthy">${cashFormat(price)},</span> so do try to remember that. To start, would you please step onto this scale so we may begin this examination?"` + `You make your way to ${arcology.name}'s main medical pavilion, which houses the largest private clinic in the arcology, intent on finding a primary physician to keep an eye on your health. ${hedonisticDecadenceActive ? "There is a substantial wait before you're seen, owing to the increasingly eccentric people that make up your citizenry, so you have plenty of time to deal with registering and enjoy a little people-watching" : "The clinic operates like a well-oiled machine, and you barely get through registering yourself"} before your name is called. As you enter the exam room, you're greeted by an imposing, rather harried-looking ${womanU}, "Welcome, ${PlayerName()}.${V.PC.actualAge < V.minimumSlaveAge ? `" ${HeU} gives you a momentary dirty look before realizing what ${heU} did. "Apologies, I just thought you'd be a little older... never mind.` : ""} I will be serving as your doctor from here on, and while the first visit is free, future ones will run you <span class="noteworthy">${cashFormat(price)},</span> so do try to remember that. To start, would you please step onto this scale so we may begin this examination?"` ]); V.doctor.state = 1; } @@ -79,7 +80,7 @@ App.UI.doctorConsultation = function() { r.push(`On the physical side,`); if (V.PC.weight > 190) { r.push(`you are <span class="red">much too fat.</span>`); - if (arcology.FSHedonisticDecadence !== "unset") { + if (hedonisticDecadenceActive) { r.push(`But who isn't these days?" ${HeU} sighs, patting ${hisU} own growing gut. "Anyway, a little less weight would do you some good.`); } else if (PCH.condition < -20) { r.push(`All that weight is quite literally crushing you. This is why your health is in decline.`); @@ -88,7 +89,7 @@ App.UI.doctorConsultation = function() { } } else if (V.PC.weight > 160) { r.push(`you are <span class="red">too fat.</span>`); - if (arcology.FSHedonisticDecadence !== "unset") { + if (hedonisticDecadenceActive) { r.push(`But who isn't these days?" ${HeU} sighs, patting ${hisU} own growing gut. "Anyway, a little exercise and watching what you eat will keep your health up despite the weight.`); } else if (PCH.condition < -20) { r.push(`Poor health coupled with obesity puts you at serious risk of heart failure. Think about that before each meal.`); @@ -97,7 +98,7 @@ App.UI.doctorConsultation = function() { } } else if (V.PC.weight > 130) { r.push(`you are <span class="red">too fat.</span>`); - if (arcology.FSHedonisticDecadence !== "unset") { + if (hedonisticDecadenceActive) { r.push(`But who isn't these days?" ${HeU} sighs, patting ${hisU} own growing gut. "Anyway, a little exercise and watching what you eat will keep any complications at bay.`); } else if (PCH.condition < -20) { r.push(`Your weight is not a good mix with your overall health. You'll find yourself plagued with complications that will steadily drag you further and further down.`); @@ -106,7 +107,7 @@ App.UI.doctorConsultation = function() { } } else if (V.PC.weight > 95) { r.push(`you are getting rather fat.`); - if (arcology.FSHedonisticDecadence !== "unset") { + if (hedonisticDecadenceActive) { r.push(`But who isn't these days?" ${HeU} sighs, patting ${hisU} own growing gut. "Anyway, just consider your future wellbeing, is all.`); } else if (PCH.condition < -20) { r.push(`While any complications will still be minor, your poor health will make them far more frequent then you'd like.`); diff --git a/src/player/electiveSurgery.js b/src/player/electiveSurgery.js index 24ddd4e66471a49f1dd1df01bec30f1ff078e877..2f3c6da196822b4aeb1efe6b777bb7743ca8dcd9 100644 --- a/src/player/electiveSurgery.js +++ b/src/player/electiveSurgery.js @@ -20,39 +20,39 @@ App.UI.electiveSurgery = function() { } else { nurse.skin = "brown"; } - if (arcology.FSHedonisticDecadence !== "unset") { + if (FutureSocieties.isActive('FSHedonisticDecadence', arcology)) { nurse.weight = 60; } else { nurse.weight = -30; } nurse.waist = -60; - if (arcology.FSPhysicalIdealist !== "unset") { + if (FutureSocieties.isActive('FSPhysicalIdealist', arcology)) { nurse.muscles = 20; } - if (arcology.FSSlimnessEnthusiast !== "unset") { + if (FutureSocieties.isActive('FSSlimnessEnthusiast', arcology)) { nurse.boobs = 300; } else { nurse.boobs = 2000; - if (arcology.FSAssetExpansionist !== "unset") { + if (FutureSocieties.isActive('FSAssetExpansionist', arcology)) { nurse.boobs = 10000; } - if (arcology.FSTransformationFetishist !== "unset") { + if (FutureSocieties.isActive('FSTransformationFetishist', arcology)) { nurse.boobs = 10000; nurse.boobsImplant = 9800; - } else if (arcology.FSBodyPurist === "unset") { + } else if (!FutureSocieties.isActive('FSBodyPurist', arcology)) { nurse.boobsImplant = nurse.boobs - 1000; } } nurse.boobShape = "perky"; - if (arcology.FSPastoralist !== "unset") { + if (FutureSocieties.isActive('FSPastoralist', arcology)) { nurse.lactation = 2; } nurse.hips = 1; - if (arcology.FSSlimnessEnthusiast !== "unset") { + if (FutureSocieties.isActive('FSSlimnessEnthusiast', arcology)) { nurse.butt = 1; } else { nurse.butt = 4; - if (arcology.FSAssetExpansionist !== "unset") { + if (FutureSocieties.isActive('FSAssetExpansionist', arcology)) { nurse.butt = 8; nurse.buttImplant = 4; } @@ -63,9 +63,9 @@ App.UI.electiveSurgery = function() { nurse.butt = 12; nurse.hips = 3; } - if (arcology.FSTransformationFetishist !== "unset") { + if (FutureSocieties.isActive('FSTransformationFetishist', arcology)) { nurse.buttImplant = nurse.butt-2; - } else if (arcology.FSBodyPurist === "unset") { + } else if (!FutureSocieties.isActive('FSBodyPurist', arcology)) { nurse.buttImplant = 2; } } @@ -76,7 +76,7 @@ App.UI.electiveSurgery = function() { nurse.hColor = "black"; nurse.eye.left.iris = "brown"; nurse.eye.right.iris = "brown"; - if (arcology.FSIntellectualDependency !== "unset") { + if (FutureSocieties.isActive('FSIntellectualDependency', arcology)) { nurse.clothes = "a slutty nurse outfit"; } else { nurse.clothes = "a nice nurse outfit"; @@ -100,30 +100,30 @@ App.UI.electiveSurgery = function() { } } else { App.Events.addParagraph(el, [ - `You ${canWalk(V.PC) ? "wander" : "drive"} up and down ${arcology.name}'s primary medical pavilion, taking in what practices are available and their relative popularity. ${arcology.FSBodyPurist !== "unset" ? "Most of the plastic surgeons have packed up and left, but of those that chose to stay," : "While there is no shortage of plastic surgeons to choose from,"} there is a clear winner; the small suite at the end of the wing completely swarmed by patrons. It takes some effort to work your way through the crowd, but the moment the ${nurse.boobs > 2000 ? "busty" : "cute"} assistant behind the counter notices you and ${nurse.belly >= 10000 ? "waddles" : "rushes"} over${nurse.butt > 10 ? `, practically bulldozing ${himselfU} a path in the process with ${hisU} absurd hips and rear` : ""}, do you find yourself whisked away to an exam room by ${himU}. "${V.PC.visualAge < V.minimumSlaveAge ? "Oh my god! You're so cute! Does your mother know you're here? If she doesn't, your secret's safe with us!" : "You're the new owner, right? Recognized you from the newsfeeds"}. Anyway, we'll need to do a few measurements, take some biometrics, and sign a couple papers before we can put you under the knife. You know, standard business and all that." With the paperwork taken care of, and after what can only be called an "intimate fondlng" under the guise of a medical examination${nurse.butt > 10 || nurse.belly >= 5000 || nurse.boobs > 2000 ? `, with a little helping of ${hisU} larger assets rubbing against you on the side` : ""}, you're ready to look over the available procedures. ${nurse.butt > 10 || nurse.belly >= 5000 || nurse.boobs > 2000 ? `"Heh, yeah I can get a little handsy, and feeling all of this," ${heU} gestures at ${hisU} enhanced curves, "pushing against someone is just soo thrilling!` : `"Heh, yeah I can get a little handsy.`} I think that's part of why we're so popular, not that the doctor's work is shabby or anything! I mean, I came out okay, right? Plus I really do enjoy seeing what they can come up with, it's an art form, really, and boy does it get me excited." ${HeU} coughs and gets back to the heart of the matter. "You have a dream body, and we have the means to make it happen! So, what can I help you with?"` + `You ${canWalk(V.PC) ? "wander" : "drive"} up and down ${arcology.name}'s primary medical pavilion, taking in what practices are available and their relative popularity. ${FutureSocieties.isActive('FSBodyPurist', arcology) ? "Most of the plastic surgeons have packed up and left, but of those that chose to stay," : "While there is no shortage of plastic surgeons to choose from,"} there is a clear winner; the small suite at the end of the wing completely swarmed by patrons. It takes some effort to work your way through the crowd, but the moment the ${nurse.boobs > 2000 ? "busty" : "cute"} assistant behind the counter notices you and ${nurse.belly >= 10000 ? "waddles" : "rushes"} over${nurse.butt > 10 ? `, practically bulldozing ${himselfU} a path in the process with ${hisU} absurd hips and rear` : ""}, do you find yourself whisked away to an exam room by ${himU}. "${V.PC.visualAge < V.minimumSlaveAge ? "Oh my god! You're so cute! Does your mother know you're here? If she doesn't, your secret's safe with us!" : "You're the new owner, right? Recognized you from the newsfeeds"}. Anyway, we'll need to do a few measurements, take some biometrics, and sign a couple papers before we can put you under the knife. You know, standard business and all that." With the paperwork taken care of, and after what can only be called an "intimate fondlng" under the guise of a medical examination${nurse.butt > 10 || nurse.belly >= 5000 || nurse.boobs > 2000 ? `, with a little helping of ${hisU} larger assets rubbing against you on the side` : ""}, you're ready to look over the available procedures. ${nurse.butt > 10 || nurse.belly >= 5000 || nurse.boobs > 2000 ? `"Heh, yeah I can get a little handsy, and feeling all of this," ${heU} gestures at ${hisU} enhanced curves, "pushing against someone is just soo thrilling!` : `"Heh, yeah I can get a little handsy.`} I think that's part of why we're so popular, not that the doctor's work is shabby or anything! I mean, I came out okay, right? Plus I really do enjoy seeing what they can come up with, it's an art form, really, and boy does it get me excited." ${HeU} coughs and gets back to the heart of the matter. "You have a dream body, and we have the means to make it happen! So, what can I help you with?"` ]); App.Events.addParagraph(el, [ - `"Oh! I almost forgot! Since you're a new client, <span class="green">today's basic surgery is half off!</span>${arcology.FSBodyPurist !== "unset" ? ` But, <span class="red">the cost of implants is still high</span> due to policy, unfortunately...` : arcology.FSTransformationFetishist !== "unset" ? ` And with <span class="green">implants being so cheap,</span> we're practically giving them away!` : ""}"` + `"Oh! I almost forgot! Since you're a new client, <span class="green">today's basic surgery is half off!</span>${FutureSocieties.isActive('FSBodyPurist', arcology) ? ` But, <span class="red">the cost of implants is still high</span> due to policy, unfortunately...` : FutureSocieties.isActive('FSTransformationFetishist', arcology) ? ` And with <span class="green">implants being so cheap,</span> we're practically giving them away!` : ""}"` ]); freebie = 1; V.pSurgery.state = 1; } if (V.pSurgery.state > 1) { - if (arcology.FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist', arcology)) { App.Events.addParagraph(el, [ `"Oh, and thanks to your leadership, I <span class="red">can't get reasonably priced implants anymore.</span> So thanks for that."` ]); - } else if (arcology.FSTransformationFetishist !== "unset") { + } else if (FutureSocieties.isActive('FSTransformationFetishist', arcology)) { App.Events.addParagraph(el, [ `"Oh, and you should know that we have an abundance of implants being made, so <span class="green">they're quite cheap</span> these days. So thanks, I guess..."` ]); } } else if (V.pSurgery.state > 0) { - if (arcology.FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist', arcology)) { App.Events.addParagraph(el, [ `"Ah! And you should be aware that there is an implant shortage <span class="red">driving up their price.</span> I guess that's just how things are these days..."` ]); - } else if (arcology.FSTransformationFetishist !== "unset") { + } else if (FutureSocieties.isActive('FSTransformationFetishist', arcology)) { App.Events.addParagraph(el, [ `"Oh, and we're overflowing with implants, as if you couldn't tell, so <span class="green">they're really cheap!</span> I know I'm going to get some more put in soon!"` ]); @@ -147,9 +147,9 @@ App.UI.electiveSurgery = function() { price *= .5; } if (implant) { - if (arcology.FSBodyPurist !== "unset") { + if (FutureSocieties.isActive('FSBodyPurist', arcology)) { price *= 2; - } else if (arcology.FSTransformationFetishist !== "unset") { + } else if (FutureSocieties.isActive('FSTransformationFetishist', arcology)) { price *= .5; } } diff --git a/src/player/managePersonalAffairs.js b/src/player/managePersonalAffairs.js index 645d87ed87e0500133fc9a4a492666a6a091dbe7..346839ccc535d8c9aac0eba9a75401bc8bbf9518 100644 --- a/src/player/managePersonalAffairs.js +++ b/src/player/managePersonalAffairs.js @@ -39,7 +39,7 @@ App.UI.managePersonalAffairs = function() { frag.append(lactation()); } - if (V.propOutcome === 1 && arcology.FSRestart !== "unset") { + if (V.propOutcome === 1 && FutureSocieties.isActive('FSRestart', arcology)) { frag.append(breederExam()); } @@ -337,14 +337,14 @@ App.UI.managePersonalAffairs = function() { } else if (PC.preg >= 8) { text.push(`You're currently ${num(PC.preg)} ${PC.preg > 1 ? `weeks` : `week`} pregnant${V.PC.pregSource !== -1 && V.PC.pregSource !== -6 ? ", something rather unbecoming for an arcology owner" : ""}.`); - if (arcology.FSRestart === "unset" || V.eugenicsFullControl === 1 || (V.PC.pregSource !== -1 && V.PC.pregSource !== -6)) { + if (!FutureSocieties.isActive('FSRestart', arcology) || V.eugenicsFullControl === 1 || (V.PC.pregSource !== -1 && V.PC.pregSource !== -6)) { miniSceneSpan.append(abortLink); text.push(miniSceneSpan); } } else if (PC.preg >= 4 && PC.pregKnown) { text.push(`You're having morning sickness${V.PC.pregSource !== -1 && V.PC.pregSource !== -6 ? "; it isn't too late to hide your pregnancy if desired.." : ""}.`); - if (arcology.FSRestart === "unset" || V.eugenicsFullControl === 1 || (V.PC.pregSource !== -1 && V.PC.pregSource !== -6)) { + if (!FutureSocieties.isActive('FSRestart', arcology) || V.eugenicsFullControl === 1 || (V.PC.pregSource !== -1 && V.PC.pregSource !== -6)) { miniSceneSpan.append(abortLink); text.push(miniSceneSpan); } @@ -352,7 +352,7 @@ App.UI.managePersonalAffairs = function() { miniSceneSpan.append(`Your period is late, so the first thing you do is test yourself for a potential pregnancy. A pregnancy test confirms that `, App.UI.DOM.makeElement("span", `you are pregnant. `, ['pregnant'])); PC.pregKnown = 1; - if (arcology.FSRestart === "unset" || V.eugenicsFullControl === 1 || (V.PC.pregSource !== -1 && V.PC.pregSource !== -6)) { + if (!FutureSocieties.isActive('FSRestart', arcology) || V.eugenicsFullControl === 1 || (V.PC.pregSource !== -1 && V.PC.pregSource !== -6)) { miniSceneSpan.append(abortLink); text.push(miniSceneSpan); @@ -360,7 +360,7 @@ App.UI.managePersonalAffairs = function() { } else if (PC.preg > 0 && PC.pregKnown) { text.push(`You have a bun baking in the oven.`); - if (arcology.FSRestart === "unset" || V.eugenicsFullControl === 1 || (V.PC.pregSource !== -1 && V.PC.pregSource !== -6)) { + if (FutureSocieties.isActive('FSRestart', arcology) || V.eugenicsFullControl === 1 || (V.PC.pregSource !== -1 && V.PC.pregSource !== -6)) { links.push(App.UI.DOM.link(`Pop some morning after pills`, () => { WombFlush(V.PC); @@ -380,7 +380,7 @@ App.UI.managePersonalAffairs = function() { } else if (PC.preg > 0) { text.push(`Your fertile ${PC.mpreg === 1 ? "ass" : ""}pussy has been thoroughly seeded; there is a chance you are pregnant.`); - if (arcology.FSRestart === "unset" || V.eugenicsFullControl === 1 || (V.PC.pregSource !== -1 && V.PC.pregSource !== -6)) { + if (!FutureSocieties.isActive('FSRestart', arcology) || V.eugenicsFullControl === 1 || (V.PC.pregSource !== -1 && V.PC.pregSource !== -6)) { text.push(App.UI.DOM.link(`Pop some morning after pills`, () => { WombFlush(V.PC); diff --git a/src/player/personalAttentionSelect.js b/src/player/personalAttentionSelect.js index ddc90d62e74632362c2ebd0beec6c72f9ccf4138..2adaf5094ce06636af3a8712d71b5202da815493 100644 --- a/src/player/personalAttentionSelect.js +++ b/src/player/personalAttentionSelect.js @@ -664,7 +664,7 @@ App.UI.Player.personalAttention = function() { healthText(slave), ]); links.push(attentionLink(i, `Care for ${him}`, "health")); - if (V.arcologies[0].FSPaternalist === "unset") { + if (!FutureSocieties.isActive('FSPaternalist')) { if (getPersonalAttention(null, "torture")) { links.push(App.UI.DOM.disabledLink(`Make ${him} suffer`, [ `You can only torture one slave at a time` diff --git a/src/pregmod/FCTV/FCTVshows.js b/src/pregmod/FCTV/FCTVshows.js index b751f03451f477bb7cb4a6c98050abb3b1644a68..5b966375b5826a8089ad3f86a4458db9a260c372 100644 --- a/src/pregmod/FCTV/FCTVshows.js +++ b/src/pregmod/FCTV/FCTVshows.js @@ -1060,7 +1060,7 @@ App.Data.FCTV.channels = { if (V.seeDicks === 0) { r.push(`<i>greeting,</i>`); } else { - r.push(`dangling cock, even soft it looks massive,`); + r.push(`dangling cock – even soft, it looks massive –`); } r.push(`but manages to shake the proffered hand. "Thanks for having me!" She gestures widely to the room. "What's with the lights and... umm... décor?"</p>`); r.push(`<p>The milk maid smiles. "A happy cow is a productive cow, Ma'am. The cows spend lots of time here, and Master says 'a pleasant and relaxing environment makes a big difference in their production.' Master says that it's an investment to make the cows feel like they're in a fancy spa, but that it's so cheap it pays for itself in extra milk lickity-split."</p>`); @@ -1212,12 +1212,12 @@ App.Data.FCTV.channels = { { get slaves() { const slave = App.Data.FCTV.actors.FSmodel; - if (V.arcologies[0].FSGenderFundamentalist === "unset") { + if (!FutureSocieties.isActive('FSGenderFundamentalist')) { slave.dick = 6; slave.boobs = 750; slave.clothes = "nice business attire"; slave.shoes = "flats"; - } else if (V.arcologies[0].FSGenderRadicalist === "unset") { + } else if (!FutureSocieties.isActive('FSGenderRadicalist')) { slave.faceShape = "masculine"; slave.waist = 120; slave.weight = 120; @@ -1233,10 +1233,10 @@ App.Data.FCTV.channels = { }, get text() { const r = []; - if (V.arcologies[0].FSGenderFundamentalist === "unset") { + if (!FutureSocieties.isActive('FSGenderFundamentalist')) { r.push(`increasingly-popular Gender Radicalist movement titled: "Power, not Biology". After the opening credits, the documentary introduces an androgynous documentarian in a nicely-cut suit. The finely tailored suit doesn't try to hide the person's breasts, which seem to be a pretty average D-cup. Similarly, another bulge is visible stretching down one of the pants legs. The futanari opens with a pretty simple question: "Am I a man, or am I a woman?" The documentary is focused on answering that question in the context of a modern era where medical science means that genitalia are irrelevant. It argues that a person's body no longer has any relation to their sexuality or ambition, that being free means choosing the body that pleases you most, and that society needs new criteria from which to determine gender.`); r.push(`<p>The criteria suggested by the documentary is power. The idea is simple; the powerful are male, the weak are female. It argues that the biology and sexual proclivities of a person simply can't represent them any longer. The powerful are often free to choose the body and activities they wish to pursue, while the weak have those decisions made for them. It's a practical argument, and the documentary gives a long list of evidence supporting it, from expert interviews to ancient civilizations that followed a similar idea. The concept is somewhat appealing to you; after all, you wield extraordinary power, and a large part of that power includes altering the bodies of others. Whatever you choose to do, you can't see any reason to let your slaves and citizens criticize you for it.</p>`); - } else if (V.arcologies[0].FSGenderRadicalist === "unset") { + } else if (!FutureSocieties.isActive('FSGenderRadicalist')) { r.push(`conservative Gender Fundamentalism movement titled: "It's Eve, NOT Steve". After the outdated graphics finish displaying the garish opening credits, a portly man in late middle age introduces himself as Reverend Brad, the apparent commentator of the program. You don't pay much attention, but learn that apparently the Futanari Sisters are whore agents of Satan. You also learn that you're apparently destined for hell because of the medical technology in your penthouse that could be used to alter someone's naughty bits. You did get a good laugh when the reverend started yelling that choir boys are boys, and if he wanted a girl he would've found a nun.`); r.push(`<p>You have to admit that most of the show is complete bullshit, but you can't deny that it's useful for controlling your citizens. As long as they're filling their heads with this bullshit, they won't be getting any dangerous ideas from somewhere else. In a more practical sense, it's a lot easier to manage an arcology and a house full of slaves when you don't have to worry about crazy gender issues or people disliking pregnant slaves.</p>`); } @@ -1247,14 +1247,14 @@ App.Data.FCTV.channels = { get slaves() { const array = []; let slave = App.Data.FCTV.actors.FSmodel; - if (V.arcologies[0].FSSlimnessEnthusiast === "unset") { + if (!FutureSocieties.isActive('FSSlimnessEnthusiast')) { slave.dick = 4; slave.boobs = 100; slave.hLength = 10; slave.hColor = "black"; slave.clothes = "conservative clothing"; slave.shoes = "flats"; - } else if (V.arcologies[0].FSAssetExpansionist === "unset") { + } else if (!FutureSocieties.isActive('FSAssetExpansionist')) { slave.weight = -30; slave.butt = 0; slave.boobs = 450; @@ -1283,10 +1283,10 @@ App.Data.FCTV.channels = { get text() { const r = []; - if (V.arcologies[0].FSSlimnessEnthusiast === "unset") { + if (!FutureSocieties.isActive('FSSlimnessEnthusiast')) { r.push(`growing Asset Expansionist movement titled: "More of a Good Thing". After a brief set of opening credits the documentary dives immediately into short clips of numerous interviews with stacked women stating that they love having big tits and a big ass. Eventually, a man and woman are introduced as the hosts of the program. Both are finely dressed in the recent fashions, and despite the subject of the documentary, they don't have humongous assets. The woman does have huge breasts, wide hips, and a large derrière; the man has a noticeable bulge in his pants, but nothing extreme. The hosts explain that seeing Asset Expansionism as a call for ridiculous size is something of a misconception. They emphasize that it's about the freedom to enjoy more of a good thing.`); r.push(`<p>The documentary makes several arguments in favor of the movement, and is clear about explaining the natural biological attraction humans have to large assets. By interviewing stacked members of the movement and psychological experts alike, they try to demonstrate how larger assets lead to happier and more pleasurable lives, both in and out of the bedroom. The documentary neatly tops off its argument by demonstrating how assets have been expanding naturally since the start of the twentieth century, and claiming that it's silly to idolize the way humans looked before modern nutrition and medicine. Western countries in the old world already had average bust sizes of D-cup or larger by the turn of the century, the hosts claim that trying to go back to smaller sizes is synonymous with reducing the prosperity of free citizens.</p>`); - } else if (V.arcologies[0].FSAssetExpansionist === "unset") { + } else if (!FutureSocieties.isActive('FSAssetExpansionist')) { r.push(`Slimness Enthusiast counter movement titled: "Slim Is In". Artistic opening credits play across the screen before a slim woman walks up and begins talking to the camera conversationally. She seems to be in her mid to late thirties, and is wearing conservative makeup to accent her natural beauty. Her narrow waist combines with her slim hips and full shoulders to create a balanced but muted hourglass profile. It's a look that was popular for decades on fashion models in the old world, and it improves the attractiveness of her B- or C-cup breasts and taut butt. It's obvious that the woman aspires to be a role model in addition to being the documentary's commentator.`); r.push(`<p>Much of the documentary's arguments center around the concept of fashion and the privileged. They point out how in the past societal changes have altered what people find attractive, giving skin tans as an example. When most worked outside and only the privileged stayed indoors pale skin was considered attractive. When the world changed and most people worked indoors, suddenly the tan skin of those with leisure time to spend outside came into vogue. She argues that modern hormones can easily expand the assets of the masses, but that only the privileged can afford to sculpt themselves into an ideal form like hers. She points out that even though the masses may imitate with surgery, they'll never be able to copy the naturally good bone structure and vibrancy of the well-bred elite.</p>`); } @@ -1297,7 +1297,7 @@ App.Data.FCTV.channels = { get slaves() { const array = []; let slave; - if (V.arcologies[0].FSTransformationFetishist === "unset") { + if (!FutureSocieties.isActive('FSTransformationFetishist')) { slave = App.Data.FCTV.actors.FSmodel; slave.devotion = 100; slave.trust = 100; @@ -1321,7 +1321,7 @@ App.Data.FCTV.channels = { slave.clothes = "conservative clothing"; slave.shoes = "flats"; array.push(slave); - } else if (V.arcologies[0].FSBodyPurist === "unset") { + } else if (!FutureSocieties.isActive('FSBodyPurist')) { slave = BaseSlave(); slave.dick = 4; slave.boobs = 100; @@ -1335,10 +1335,10 @@ App.Data.FCTV.channels = { }, get text() { const r = []; - if (V.arcologies[0].FSTransformationFetishist === "unset") { + if (!FutureSocieties.isActive('FSTransformationFetishist')) { r.push(`spreading Body Purist movement titled: "Don't Settle for Imitations". The opening credits are displayed over a series of comparison images showing beautiful breasts and asses next to obviously artificial imitations of the same. The screen splits and shows the two hosts in their own environments side by side. One is an extremely attractive doctor, her body is exquisitely curvy underneath her lab coat and her face is an impossible combination of beautiful and cute. The other host is an artist with graying hair; he's working in his studio to create a life-size sculpture of the first host. He starts off the documentary by asking why people are so eager to destroy the natural beauty of the human form. The doctor continues by asking why people are so impatient that they get implants instead of using a superior process of targeted hormonal growth.`); r.push(`<p>The documentary keeps up the two-viewpoint style and approaches the issue from two directions. The first is the stark aesthetic differences between natural and artificial bodies. It demonstrates why implants always fall short of the beauty they seek to imitate, and how those with implants are doomed to a vicious cycle of surgery to try and recapture the beauty they lost in the initial surgery. The other angle, presented by the doctor, is a lot more practical. It points out the numerous shortcomings of implants when compared to natural growth, such as the frequent need for maintenance surgeries, the significant extra health risks, the reduced pleasure and sensitivity felt by implant patients, and the extreme difficulty of a patient to get what they want. Taken together the argument is pretty simple: why get implants when other medical options are cheaper, safer, more effective, healthier, and more attractive?</p>`); - } else if (V.arcologies[0].FSBodyPurist === "unset") { + } else if (!FutureSocieties.isActive('FSBodyPurist')) { r.push(`rise of the Transformation Fetish titled: "The Mass Insanity of Adding Mass". The opening credits are styled to look like a psychological case study from a mental institution. When the credits finish, the video cuts to a scene of a man sitting behind a desk, the whole shot is high contrast due to the harsh lighting from a lone desk lamp. The middle-aged man screams 'hard-boiled' and looks like he walked straight out of a noir film to host this documentary. His opening monologue makes it pretty clear that this documentary has a lot of parallels with a crime documentary. Worse, is that the evidence and expert witnesses available to the producers were apparently overwhelming, because the program seems rushed trying to fit as much as it can into a narrow time slot.`); r.push(`<p>Evidence and whatever else be damned, this isn't the kind of documentary that should be on the FCTV stream in your arcology. You tell ${V.assistant.name} to remind you to send a complaint in the morning.</p>`); } diff --git a/src/pregmod/blackMarket.js b/src/pregmod/blackMarket.js index 1843fb90b01af4b3b994e9d84f23fd1cb4f37ec0..69aff2d2ae4c3ab02966a8e3db14af615aefaff2 100644 --- a/src/pregmod/blackMarket.js +++ b/src/pregmod/blackMarket.js @@ -60,7 +60,7 @@ App.UI.blackMarket = function() { } /* - if (V.arcologies[0].FSPaternalist !== "unset") { + if (FutureSocieties.isActive('FSPaternalist')) { //<br><br> r.push(`A convoy of scientists from the banned wetware CPU project are present and selling their leftover wares.`); //[[Browse CPUs|Slave Markets][V.market.slaveMarket = "wetware", V.slavesSeen += 1]] | diff --git a/src/pregmod/editGenetics.js b/src/pregmod/editGenetics.js index 9d82241e4ddd6aea8302d49123b8657178bcf502..3687cb665e01cbec4a2899a194e5ce25b6cbbb75 100644 --- a/src/pregmod/editGenetics.js +++ b/src/pregmod/editGenetics.js @@ -101,7 +101,7 @@ App.UI.editGenetics = function() { return App.Events.makeNode(r); } function nameButton(s) { - const button = App.UI.DOM.makeElement("button", birthFullName(s), "slavepicker"); + const button = App.UI.DOM.makeElement("button", currentFullName(s), "slavepicker"); button.setAttribute("data-slave", s.ID); button.style.width = "100%"; return button; @@ -137,10 +137,10 @@ App.UI.editGenetics = function() { makeRow(); makeHeader(`Given name(s)`); - makeCell(s.birthName, 2); + makeCell(s.slaveName, 2); makeHeader(`Family name`); - makeCell(s.birthSurname || '', 2); + makeCell(s.slaveSurname || '', 2); makeHeader(`Karyotype`); cell = App.UI.DOM.appendNewElement("td", row, `${s.genes} (${toSex(s.genes)})`, ["editor", "choice-editor"]); @@ -180,7 +180,7 @@ App.UI.editGenetics = function() { if (s.birthName !== s.slaveName || s.birthSurname !== s.slaveSurname) { makeRow(); - cell = App.UI.DOM.appendNewElement("td", row, App.Events.makeNode([`Currently called`, currentFullName(s)]), ["note"]); + cell = App.UI.DOM.appendNewElement("td", row, App.Events.makeNode([`Born as`, birthFullName(s)]), ["note"]); cell.colSpan = 8; } diff --git a/src/pregmod/surrogacy.js b/src/pregmod/surrogacy.js index 4affba58d49674adebe1618973744670efcd6cfd..65c11f9d4d0d1e4d8c07af50d131a06b557489fe 100644 --- a/src/pregmod/surrogacy.js +++ b/src/pregmod/surrogacy.js @@ -103,7 +103,7 @@ App.UI.surrogacy = function() { r.push(`your lower belly, appreciating the new ${bulk ? "lives" : "life"} growing within you.`); if (bulk) { for (let wombi = 0; wombi < slave.womb.length; wombi++) { - if (slave.womb[wombi].age < 4 && (V.arcologies[0].FSRestart === "unset" || V.eugenicsFullControl === 1 || mother.breedingMark === 0 || V.propOutcome === 0 || (slave.womb[wombi].fatherID !== -1 && slave.womb[wombi].fatherID !== -6))) { + if (slave.womb[wombi].age < 4 && (!FutureSocieties.isActive('FSRestart') || V.eugenicsFullControl === 1 || mother.breedingMark === 0 || V.propOutcome === 0 || (slave.womb[wombi].fatherID !== -1 && slave.womb[wombi].fatherID !== -6))) { fetus = WombRemoveFetus(slave, wombi); WombAddFetus(V.PC, fetus); wombi--; @@ -121,7 +121,7 @@ App.UI.surrogacy = function() { } else { if (bulk) { for (let wombi = 0; wombi < donatrix.womb.length; wombi++) { - if (donatrix.womb[wombi].age < 4 && (V.arcologies[0].FSRestart === "unset" || V.eugenicsFullControl === 1 || mother.breedingMark === 0 || V.propOutcome === 0 || (donatrix.womb[wombi].fatherID !== -1 && donatrix.womb[wombi].fatherID !== -6))) { + if (donatrix.womb[wombi].age < 4 && (!FutureSocieties.isActive('FSRestart') || V.eugenicsFullControl === 1 || mother.breedingMark === 0 || V.propOutcome === 0 || (donatrix.womb[wombi].fatherID !== -1 && donatrix.womb[wombi].fatherID !== -6))) { fetus = WombRemoveFetus(donatrix, wombi); WombAddFetus(receptrix, fetus); wombi--;