diff --git a/devTools/types/FC/arcology.d.ts b/devTools/types/FC/arcology.d.ts index a0a48a7315e75a7a456de13732e266dd562d6423..0aa28cf91c15cb07474cc165f58d3f4b8a180308 100644 --- a/devTools/types/FC/arcology.d.ts +++ b/devTools/types/FC/arcology.d.ts @@ -74,7 +74,7 @@ declare namespace FC { }; FSChattelReligionist: { noun: "Chattel Religionism", adj: "Chattel Religionist", deco: "Chattel Religionist", - research: undefined, SMR: true, policy: "Law", choice: undefined + research: undefined, SMR: true, policy: "Law" | "Law2", choice: undefined }; FSNull: { noun: "Multiculturalism", adj: "Multiculturalist", deco: undefined, diff --git a/js/003-data/policiesData.js b/js/003-data/policiesData.js index 53ff399abb680f386922432192462322f3ad8c3a..d3ea8334c2bb730369513211298f75fc6ab337e1 100644 --- a/js/003-data/policiesData.js +++ b/js/003-data/policiesData.js @@ -1747,6 +1747,16 @@ App.Data.Policies.Selection = { note: `Will increase your renown` } ], + "arcologies[0].FSChattelReligionistLaw2": [ + { + title: "Holy Nudism", + titleClass: "lime", + text: "religious clothing standards will shift from modesty to exposure.", + activatedText: "religious clothing standards emphasize exposure rather than modesty.", + get requirements() { return (V.arcologies[0].FSChattelReligionist >= 60); }, + note: `Along with nudity, certain revealing clothing, including the chattel habit, will remain acceptable attire.` + } + ], "arcologies[0].FSChattelReligionistCreed": [ { title: "Chattel Religionist Creed", diff --git a/src/002-config/fc-version.js b/src/002-config/fc-version.js index e2a43ee391c8dded736fcb3cad8289fb5013d1b0..23b5a826f3915d3c0a28f771e48be7304ffc7e5d 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.17", commitHash: null, - release: 1175, // When getting close to 2000, please remove the check located within the onLoad() function defined at line five of src/js/eventHandlers.js. + release: 1176, // 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/data/backwardsCompatibility/backwardsCompatibility.js b/src/data/backwardsCompatibility/backwardsCompatibility.js index 4ccdbd7d84857d8bc4d7c2a936e1b2b876404e14..198bfea0f4ade3ae2f891c0a1d4e0557b5a6f387 100644 --- a/src/data/backwardsCompatibility/backwardsCompatibility.js +++ b/src/data/backwardsCompatibility/backwardsCompatibility.js @@ -747,6 +747,9 @@ App.Update.globalVariables = function(node) { } else if (typeof V.arcologies[0].FSChattelReligionistLaw === "undefined") { V.arcologies[0].FSChattelReligionistLaw = 0; } + if (typeof V.arcologies[0].FSChattelReligionistLaw2 === "undefined") { + V.arcologies[0].FSChattelReligionistLaw2 = 0; + } if ((typeof V.FSRomanRevivalist !== "undefined") && V.FSRomanRevivalist !== "unset") { V.arcologies[0].FSRomanRevivalist = V.FSRomanRevivalist; } else if (typeof V.arcologies[0].FSRomanRevivalist === "undefined") { diff --git a/src/descriptions/arcologyDescription.js b/src/descriptions/arcologyDescription.js index 332409c6f9f6ca46ca0e51e1aed01093272c4b95..e7148542fac003dd6a0add06cb9a2e1ac016cdb2 100644 --- a/src/descriptions/arcologyDescription.js +++ b/src/descriptions/arcologyDescription.js @@ -772,7 +772,12 @@ App.Desc.playerArcology = function(lastElement) { buffer.push(`On several raised stands around the plaza, female slaves are stripping for the pleasure of passersby.`); } if (A.FSChattelReligionistDecoration >= 80) { - buffer.push(`A handful of slaves are in religious attire, praying. They help if asked, and will even lead brief religious services if requested.`); + if (A.FSChattelReligionistLaw2 === 1) { + buffer.push(`A handful of nude slaves are praying.`); + } else { + buffer.push(`A handful of slaves are in religious attire, praying.`); + } + buffer.push(`They help if asked, and will even lead brief religious services if requested.`); } if (A.FSDegradationistDecoration >= 80) { buffer.push(`Numerous downtrodden slaves are working on the plaza at menial tasks. Some are even carrying citizens in sedan chairs.`); diff --git a/src/descriptions/officeDescription.js b/src/descriptions/officeDescription.js index 29f72b3a6974c8d9bf0359c7ba3cd50bbde98257..38eb166d4a4c571e2fe452cd3a573d05ebf05118 100644 --- a/src/descriptions/officeDescription.js +++ b/src/descriptions/officeDescription.js @@ -260,11 +260,9 @@ App.Desc.officeDescription = function(lastElement) { break; case "shemale": r.push(`a pinup of ${himselfA} to its plating: ${heA}'s depicted straddling a battle rifle so closely that it looks like ${heA}'s intimately entangled in the action.`); - break; case "amazon": r.push(`a pinup of ${himselfA} to its plating: ${heA}'s depicted in a classic nude bodybuilder's pose, but with a cutely coquettish expression.`); - break; case "businesswoman": r.push(`a pinup of ${himselfA} to its plating: ${heA}'s depicted wearing underwear, for once, and looking very severe as ${heA} straddles a cruise missile in a classic bombshell pose.`); diff --git a/src/endWeek/saChoosesOwnClothes.js b/src/endWeek/saChoosesOwnClothes.js index 57d40f7c4d7a3fb3d95611cdd03a56fbddeccc3c..6bd2d8e4f58fb267b296fd5fa0fe570b85c8d269 100644 --- a/src/endWeek/saChoosesOwnClothes.js +++ b/src/endWeek/saChoosesOwnClothes.js @@ -92,7 +92,11 @@ App.SlaveAssignment.choosesOwnClothes = function saChoosesOwnClothes(slave) { if (slave.fetish === "mindbroken") { if (V.arcologies[0].FSChattelReligionist > 0) { - selection = {text: `${he} commonly sees others wearing chattel habits and is drawn to doing so ${himself}.`, clothes: "a chattel habit"}; + if (V.arcologies[0].FSChattelReligionistLaw2 === 1) { + selection = {text: `${he} sees others wearing nothing at all, and stays nude ${himself}.`, clothes: "no clothing"}; + } else { + selection = {text: `${he} commonly sees others wearing chattel habits and is drawn to doing so ${himself}.`, clothes: "a chattel habit"}; + } } else { /** @type {string} */ let text; @@ -350,7 +354,11 @@ App.SlaveAssignment.choosesOwnClothes = function saChoosesOwnClothes(slave) { } wardrobeAssignment.push({text: `and dons a slutty outfit. If ${his} breasts are going to hang out, might as well wear something to complement them.`, clothes: "a slutty outfit"}); } else if (slave.assignment === Job.BODYGUARD) { - wardrobeAssignment.push({text: `and wears a bodysuit to show off ${his} curves without hindering ${his} deadliness.`, clothes: "a comfortable bodysuit"}); + if (isItemAccessible.entry("a tight Imperial bodysuit") && V.arcologies[0].FSNeoImperialist > 0) { + wardrobeAssignment.push({text: `and wears a tight Imperial bodysuit to show off ${his} curves without hindering ${his} deadliness.`, clothes: "a tight Imperial bodysuit"}); + } else { + wardrobeAssignment.push({text: `and wears a bodysuit to show off ${his} curves without hindering ${his} deadliness.`, clothes: "a comfortable bodysuit"}); + } if (isItemAccessible.entry("a military uniform") === true) { wardrobeAssignment.push({text: `and wears a military uniform to look the part of the honor guard.`, clothes: "a military uniform"}); } @@ -669,6 +677,12 @@ App.SlaveAssignment.choosesOwnClothes = function saChoosesOwnClothes(slave) { } } if (V.arcologies[0].FSChattelReligionist > 0) { + if (V.arcologies[0].FSChattelReligionistLaw2 === 1) { + wardrobeFS.push({text: `but chooses to stay nude to promote Holy Nudism.`, clothes: "no clothing"}); + if (isItemAccessible.entry("body oil") === true) { + wardrobeFS.push({text: `and coats ${his} body in oil to highlight what God has given ${him}.`, clothes: "body oil"}); + } + } wardrobeFS.push({text: `and wears a chattel habit to conform to your arcology's culture.`, clothes: "a chattel habit"}); } @@ -984,13 +998,13 @@ App.SlaveAssignment.choosesOwnClothes = function saChoosesOwnClothes(slave) { } if (V.arcologies[0].FSChattelReligionist > 0) { // Chattel religionism is currently the only FS with a hard advancement link to clothing. Accepting slaves should never voluntarily select an outfit that won't help. - clothing.deleteWith(c => { - const clothes = App.Data.clothes.get(c.clothes); - const goodForChattel = clothes.fs && clothes.fs.loves && clothes.fs.loves.has("FSChattelReligionist"); - return !goodForChattel; - }); + clothing.deleteWith(c => !ChattelReligionistClothingPass(c.clothes)); if (clothing.length < 1) { - clothing.push({text: `and wears a chattel habit to conform to your arcology's culture.`, clothes: "a chattel habit"}); + if (V.arcologies[0].FSChattelReligionistLaw2 === 1) { + clothing.push({text: `but chooses to stay nude to promote Holy Nudism.`, clothes: "no clothing"}); + } else { + clothing.push({text: `and wears a chattel habit to conform to your arcology's culture.`, clothes: "a chattel habit"}); + } } } selection = jsEither(clothing); diff --git a/src/endWeek/saRecruitGirls.js b/src/endWeek/saRecruitGirls.js index d3fa389e6b104a298661f9b6eb4ca461000e6593..d66c57aabca7a743f36eccfc8a1583e4ce97632d 100644 --- a/src/endWeek/saRecruitGirls.js +++ b/src/endWeek/saRecruitGirls.js @@ -1413,20 +1413,33 @@ App.SlaveAssignment.recruitGirls = function recruitGirls(slave) { const clothes = App.Data.clothes.get(slave.clothes); if (arcology.FSChattelReligionist !== "unset") { if (totalInt > 15 && (slave.devotion > 95 || slave.trust > 95)) { - if (clothes.fs && clothes.fs.loves && clothes.fs.loves.has("FSChattelReligionist")) { - 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 += 1; - } else if (arcology.FSNeoImperialist !== "unset" && 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") { - 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") { - 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; + 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") { + 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") { + 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") { + 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 { + pushFS(`${He} heads to the atrium to deliver a powerful, faith-based appeal for everyone to join the new moral order, though one cynical onlooker heckles ${him} about ${his} style of dress.`); + } } else { - pushFS(`${He} heads to the atrium to deliver a powerful, faith-based appeal for everyone to join the new moral order, though one cynical onlooker heckles ${him} about ${his} style of dress.`); + if (clothes.exposure > 3) { + pushFS(`${He} preaches to the atrium clad in essentially nothing but what God gave him. ${His} absolute faith in your revelations is unmistakable, and ${he} wins many converts.`); + seed += 2; + } else if (ChattelReligionistClothingPass(slave.clothes)) { + pushFS(`Clad in ${his} holy garb (which leaves ${him} attractively exposed), ${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 += 1; + } else { + // no free pass for any other clothing if you're going the Holy Nudist route, sorry + pushFS(`${He} heads to the atrium to deliver a powerful, faith-based appeal for everyone to join the new moral order, though ${he} drew chuckles from the crowd when ${he} argued for Holy Nudism while fully clothed.`); + } } seed += 1; FSdefend++; diff --git a/src/endWeek/saSocialEffects.js b/src/endWeek/saSocialEffects.js index 3b2f13b8a29449bf5002fb738c659c4e25e9b6f3..cf0677c829d548d97fac151bdfe1749e1cb429a4 100644 --- a/src/endWeek/saSocialEffects.js +++ b/src/endWeek/saSocialEffects.js @@ -6,7 +6,7 @@ App.SlaveAssignment.saSocialEffects = function(slave) { const {His, his, him, he, girl, wife} = getPronouns(slave); /** Build a social effect object - * @param {FC.FutureSocietyDeco} FS + * @param {FC.FutureSocietyDeco|""} FS * @param {number} magnitude positive or negative value (a small integer, or a fraction between -1 and 1) * @param {string} shortDesc for compact/list mode (text string) * @param {string} longDesc for expanded mode (HTML string) @@ -849,13 +849,33 @@ App.SlaveAssignment.saSocialEffects = function(slave) { `Society <span class="green">approves</span> of ${slave.slaveName}'s collar as an expression of the old ideal of mortification of the flesh, advancing the combination of religious originalism and modern slavery.`)); } const clothes = App.Data.clothes.get(slave.clothes); - if (clothes && clothes.fs && clothes.fs.loves && clothes.fs.loves.has("FSChattelReligionist")) { - t.push(new SocialEffect("Chattel Religionist", 1, `Religious clothing`, - `Society <span class="green">approves</span> of ${his} religiously themed clothing, strengthening the connection between sexual servitude and faith.`)); - } else if (clothes && clothes.fs && clothes.fs.tolerates && clothes.fs.tolerates.has("FSChattelReligionist")) { - t.push(new SocialEffect("Chattel Religionist", 0, `Spartan clothing`, - `Society accepts ${his} spartan clothing, seeing it as permissible under the new religious mores.`)); - } else if (slave.fuckdoll === 0) { + let clothesOK = false; + if (V.arcologies[0].FSChattelReligionistLaw2 !== 1) { + if (ChattelReligionistClothingPass(slave.clothes)) { + t.push(new SocialEffect("Chattel Religionist", 1, `Religious clothing`, + `Society <span class="green">approves</span> of ${his} religiously themed clothing, strengthening the connection between sexual servitude and faith.`)); + clothesOK = true; + } else if (clothes && clothes.fs && clothes.fs.tolerates && clothes.fs.tolerates.has("FSChattelReligionist")) { + t.push(new SocialEffect("Chattel Religionist", 0, `Spartan clothing`, + `Society accepts ${his} spartan clothing, seeing it as permissible under the new religious mores.`)); + clothesOK = true; + } + } else { + if (clothes && clothes.exposure > 3) { + t.push(new SocialEffect("Chattel Religionist", 2, `Holy Nudism`, + `Society <span class="green">strongly approves</span> of ${his} holy nudism, strengthening the connection between sexual servitude and faith.`)); + clothesOK = true; + } else if (ChattelReligionistClothingPass(slave.clothes)) { + t.push(new SocialEffect("Chattel Religionist", 1, `Revealing religious clothing`, + `Society <span class="green">approves</span> of ${his} revealing, religiously themed clothing, strengthening the connection between sexual servitude and faith.`)); + clothesOK = true; + } else if (clothes && clothes.fs && clothes.fs.loves && clothes.fs.loves.has("FSChattelReligionist")) { + t.push(new SocialEffect("Chattel Religionist", 0, `Conservative religious clothing`, + `Society accepts ${his} religiously themed clothing, but finds it insufficiently revealing to promote Holy Nudism.`)); + clothesOK = true; + } + } + if (!clothesOK && slave.fuckdoll === 0) { t.push(new SocialEffect("Chattel Religionist", -1, `Extravagant clothing`, `Society <span class="red">disapproves</span> of ${his} unnecessarily gaudy attire; this slows acceptance of a link between faith and sexual servitude.`)); } diff --git a/src/events/RE/rePregInventorShowOff.js b/src/events/RE/rePregInventorShowOff.js index 253d4c39e3455a8687d8e09d01dedb1b085f1152..eae35d4fb198ab05c18c841426e285f1c88265b8 100644 --- a/src/events/RE/rePregInventorShowOff.js +++ b/src/events/RE/rePregInventorShowOff.js @@ -140,7 +140,12 @@ App.Events.rePregInventorShowOff = class rePregInventorShowOff extends App.Event } else if (V.arcologies[0].FSHedonisticDecadence > 60) { r.push(`surprisingly strong, given how plush they are, and well suited for their job,`); } else if (V.arcologies[0].FSChattelReligionist > 60) { - r.push(`dressed in skimpy monks habits and eyes flashing with exalted fervor as they go about their duties,`); + if (V.arcologies[0].FSChattelReligionistLaw2 === 0) { + r.push(`dressed in skimpy monks habits`); + } else { + r.push(`completely nude`); + } + r.push(`and eyes flashing with exalted fervor as they go about their duties,`); } else if (V.arcologies[0].FSYouthPreferentialist > 60) { r.push(`just barely the legal age for consent in your arcology and clearly eager to prove themselves,`); } else if (V.arcologies[0].FSMaturityPreferentialist > 60) { diff --git a/src/events/assistant/assistantFS.js b/src/events/assistant/assistantFS.js index 2e5caa9ccaa215605ed274405bac1d4df72831fc..66e26ceb7213d4804546035dce257cdc2868feaa 100644 --- a/src/events/assistant/assistantFS.js +++ b/src/events/assistant/assistantFS.js @@ -234,7 +234,11 @@ App.Events.assistantFS = class assistantFS extends App.Events.BaseEvent { } else if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { r.push(`adjusts ${hisA} height to conform with your vision of a society glorifying the tall.`); } else if (V.arcologies[0].FSChattelReligionist !== "unset") { - r.push(`adjusts ${hisA} outfit to resemble a crusader of your new religion.`); + 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") { 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") { @@ -350,7 +354,7 @@ App.Events.assistantFS = class assistantFS extends App.Events.BaseEvent { } else if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { r.push(`adjusts ${hisA} height to conform with your vision of a society glorifying the tall.`); } else if (V.arcologies[0].FSChattelReligionist !== "unset") { - r.push(`adjusts ${hisA} outfit to prominently display a religious symbol of your new religion.`); + 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") { 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") { @@ -411,7 +415,7 @@ App.Events.assistantFS = class assistantFS extends App.Events.BaseEvent { } else if (V.arcologies[0].FSStatuesqueGlorification !== "unset") { r.push(`adjusts ${hisA} height to conform with your vision of a society glorifying the tall.`); } else if (V.arcologies[0].FSChattelReligionist !== "unset") { - r.push(`adjusts ${hisA} outfit to prominently display a religious symbol of your new religion.`); + 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") { 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") { diff --git a/src/events/intro/initNationalities.js b/src/events/intro/initNationalities.js index a4005c1d1bddc65b3c0c9ed5a8a3ac3c7108f8f3..213a1bdf0c6fa63dd90ca00c50b2ceb5a4b8c7ac 100644 --- a/src/events/intro/initNationalities.js +++ b/src/events/intro/initNationalities.js @@ -341,6 +341,7 @@ App.Intro.initNationalities = function() { V.arcologies[0].FSPhysicalIdealistLaw = 0; V.arcologies[0].FSPhysicalIdealistStrongFat = 0; V.arcologies[0].FSChattelReligionistLaw = 0; + V.arcologies[0].FSChattelReligionistLaw2 = 0; V.arcologies[0].FSChattelReligionistSMR = 0; V.arcologies[0].FSChattelReligionistCreed = 0; V.arcologies[0].FSRomanRevivalistLaw = 0; diff --git a/src/events/recFS/recfsChattelReligionist.js b/src/events/recFS/recfsChattelReligionist.js index 1fffa066d8b57294d5b1451231dc4a4789ea9f97..ed074148f9c96dd53d52a73a303d0fdc00754772 100644 --- a/src/events/recFS/recfsChattelReligionist.js +++ b/src/events/recFS/recfsChattelReligionist.js @@ -19,7 +19,7 @@ App.Events.recFSChattelReligionist = class recFSChattelReligionist extends App.E const { He, - his, he, him, himself, girl + his, he, him, himself, girl, woman } = getPronouns(slave); const {HeA} = getPronouns(assistant.pronouns().main).appendSuffix("A"); const contractCost = 1000; @@ -49,7 +49,7 @@ App.Events.recFSChattelReligionist = class recFSChattelReligionist extends App.E function enslave() { const frag = new DocumentFragment(); r = []; - r.push(`${He} lets out a convulsive sob when you accept ${his} servitude, and is painfully obsequious as you complete the formalities of enslavement. Your exam reveals several minor indications of self-harm — chewed nails, bitten lips, and such. But for all that, a remarkable look of peace has settled on the poor woman's face. ${He} waits patiently for a hint of your will,`); + r.push(`${He} lets out a convulsive sob when you accept ${his} servitude, and is painfully obsequious as you complete the formalities of enslavement. Your exam reveals several minor indications of self-harm — chewed nails, bitten lips, and such. But for all that, a remarkable look of peace has settled on the poor ${woman}'s face. ${He} waits patiently for a hint of your will,`); if (canAchieveErection(slave)) { r.push(`${his} cock painfully erect`); } else if (slave.dick > 0) { diff --git a/src/events/scheduled/sePlayerBirth.js b/src/events/scheduled/sePlayerBirth.js index a4f3f5dd4a3c23b9d8d941f437a7f86040894e63..2ab4b6afa016c7c5e67aa0e9616b0beb93442bee 100644 --- a/src/events/scheduled/sePlayerBirth.js +++ b/src/events/scheduled/sePlayerBirth.js @@ -950,7 +950,7 @@ App.Events.SEPlayerBirth = class SEPlayerBirth extends App.Events.BaseEvent { if (V.PC.pregSource > 0 && curBabies > 0) { - let pb = findFather(V.PC.pregSource); + const pb = findFather(V.PC.pregSource); if (pb) { if (V.arcologies[0].FSRestartDecoration === 100 && V.eugenicsFullControl !== 1) { r.push(`Word spreads fast through your peers that you gave birth to`); @@ -965,13 +965,7 @@ App.Events.SEPlayerBirth = class SEPlayerBirth extends App.Events.BaseEvent { r.push(`Rumors spread that The Prophet gave birth to a slave's ${(curBabies > 1) ? "children" : "child"}.`); if (V.arcologies[0].FSSupremacist !== "unset") { if (pb.race !== V.arcologies[0].FSSupremacistRace) { - r.push(`Word is that your child`); - if (curBabies > 1) { - r.push(`ren were`); - } else { - r.push(`was`); - } - r.push(`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>`); + 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; } } @@ -982,23 +976,11 @@ App.Events.SEPlayerBirth = class SEPlayerBirth extends App.Events.BaseEvent { } } } else { - r.push(`Rumors spread that your child`); - if (curBabies > 1) { - r.push(`ren were`); - } else { - r.push(`was`); - } - r.push(`fathered by a slave, <span class="red">harming your lasting reputation.</span>`); + 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 (pb.race !== V.arcologies[0].FSSupremacistRace) { - r.push(`Furthermore, word is that your child`); - if (curBabies > 1) { - r.push(`ren were`); - } else { - r.push(`was`); - } - r.push(`not ${V.arcologies[0].FSSupremacistRace}, <span class="red">further hurting your lasting reputation.</span>`); + 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; } } diff --git a/src/futureSocieties/futureSociety.js b/src/futureSocieties/futureSociety.js index a6245aa4d737ae9bc05f36cefe8b1f83065ea8fa..ac1d705d18aaa75f5a8329f844ec1c08593183d4 100644 --- a/src/futureSocieties/futureSociety.js +++ b/src/futureSocieties/futureSociety.js @@ -313,6 +313,7 @@ globalThis.FutureSocieties = (function() { break; case "FSChattelReligionist": arcology.FSChattelReligionistLaw = 0; + arcology.FSChattelReligionistLaw2 = 0; arcology.FSChattelReligionistSMR = 0; arcology.FSChattelReligionistCreed = 0; if (_.get(V, "SecExp.edicts")) { diff --git a/src/js/utilsSlave.js b/src/js/utilsSlave.js index d9d2c5c52ae94fd414516499a9c82ffac9f83d30..d39a573d085221d0b57ba3386d16fd044cff3e93 100644 --- a/src/js/utilsSlave.js +++ b/src/js/utilsSlave.js @@ -3186,3 +3186,19 @@ App.Utils.showSlaveChanges = function(edited, original, dispatch, crumb = "") { globalThis.stretchedAnusSize = function(dickSize) { return /** @type {FC.AnusType} */ (Math.clamp(dickSize, 0, 4)); }; + +/** Determines whether an outfit passes Chattel Religionism's strictest cultural clothing requirements (either base or Holy Nudism) + * @param {FC.Clothes} outfit + * @returns {boolean} + */ +globalThis.ChattelReligionistClothingPass = function(outfit) { + const clothes = App.Data.clothes.get(outfit); + const fsLovesClothes = clothes && clothes.fs && clothes.fs.loves && clothes.fs.loves.has("FSChattelReligionist"); + const fsToleratesClothes = clothes && clothes.fs && clothes.fs.tolerates && clothes.fs.tolerates.has("FSChattelReligionist"); + + if (V.arcologies[0].FSChattelReligionistLaw2 === 1) { + return clothes.exposure === 4 || (clothes.exposure === 3 && (fsLovesClothes || fsToleratesClothes)); + } else { + return fsLovesClothes; + } +} diff --git a/src/personalAssistant/assistantAppearance.js b/src/personalAssistant/assistantAppearance.js index fa8d3eec9c525f89cc519c58b62631d7ddb9ad66..b0ce9b3be5b065cfd1ef77e3ccb589b161da2094 100644 --- a/src/personalAssistant/assistantAppearance.js +++ b/src/personalAssistant/assistantAppearance.js @@ -1022,7 +1022,7 @@ globalThis.PersonalAssistantAppearance = function() { "edo revivalist": `wearing a Japanese warrior's robe with a pair of swords tucked into its sash.`, "arabian revivalist": `with a bare chest, loose pantaloons, and a broad silk sash wound around ${hisA} waist with a scimitar thrust into it.`, "chinese revivalist": `wearing loose silk robes belted with rope and carrying a simple warrior monk's staff.`, - "chattel religionist": `wearing a crusader's mail. ${HisA} long blonde hair cascades down the back of ${hisA} surcoat in golden glory.`, + "chattel religionist": V.arcologies[0].FSChattelReligionistLaw2 === 1 ? `with your religion's holy symbol painted on ${hisA} nude body. ${HisA} long blonde hair cascades down ${hisA} back in golden glory.` : `wearing a crusader's mail. ${HisA} long blonde hair cascades down the back of ${hisA} surcoat in golden glory.`, "repopulation focus": `with an enormous belly. Its oversized occupant kicks and squirms ferociously, eager to be born.`, eugenics: `with a complex bone chastity belt blocking ${hisA} vagina.`, "physical idealist": `whose muscles are lovingly rendered in lifelike detail.`,