diff --git a/src/Mods/Catmod/events/CMRESS/catWorship.js b/src/Mods/Catmod/events/CMRESS/catWorship.js index 9957fbe6059993f02ba1a767716a816f83f1fec2..028df7f68eecd9ef18fc931ff2d878a2683c711d 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.FSEgyptianRevivalist !== "undefined" + () => V.arcologies[0].FSEgyptianRevivalist !== "unset" ]; } diff --git a/src/Mods/Catmod/events/CMRESS/spoiledCat.js b/src/Mods/Catmod/events/CMRESS/spoiledCat.js index 8e1a8d0bd6f01f487240d4edc6539de84f61f31e..f6162d048e0ff218a0da8d544f2c3be63897686c 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.FSEgyptianRevivalist !== "undefined" + () => V.arcologies[0].FSEgyptianRevivalist !== "unset" ]; } diff --git a/src/data/backwardsCompatibility/datatypeCleanup.js b/src/data/backwardsCompatibility/datatypeCleanup.js index fd94e50960166a60f8656085790ba697753fa47b..5ecbed5c0c20942b020b0c1c23c8e9c011b049e6 100644 --- a/src/data/backwardsCompatibility/datatypeCleanup.js +++ b/src/data/backwardsCompatibility/datatypeCleanup.js @@ -2288,6 +2288,7 @@ App.Update.FScheatDatatypeCleanup = function() { V.arcologies[0].FSBodyPurist = Number(V.arcologies[0].FSBodyPurist) || "unset"; V.arcologies[0].FSBodyPuristDecoration = Number(V.arcologies[0].FSBodyPuristDecoration) || 0; V.arcologies[0].FSBodyPuristLaw = Number(V.arcologies[0].FSBodyPuristLaw) || 0; + V.arcologies[0].FSBodyPuristCatLaw = Number(V.arcologies[0].FSBodyPuristCatLaw) || 0; } if (V.arcologies[0].FSTransformationFetishist !== "unset") { V.arcologies[0].FSTransformationFetishist = Number(V.arcologies[0].FSTransformationFetishist) || "unset"; diff --git a/src/endWeek/saSocialEffects.js b/src/endWeek/saSocialEffects.js index df5eeb25fb619d9ef6ab5fcee68cb0bfaf54d294..e7aa1ba860827c2238a17b8a403b09cf8097d7e7 100644 --- a/src/endWeek/saSocialEffects.js +++ b/src/endWeek/saSocialEffects.js @@ -574,17 +574,17 @@ App.SlaveAssignment.saSocialEffects = function(slave) { if (slave.race !== "catgirl" || V.arcologies[0].FSBodyPuristCatLaw === 0) { if ((slave.earShape !== "normal" && slave.earShape !== "damaged") || slave.earT !== "none") { t.push(new SocialEffect("Body Purist", -1, `Inhuman ears`, - `Society finds ${his} inhuman ears <span class="red">appalling.</span>`)); - } + `Society finds ${his} inhuman ears <span class="red">appalling.</span>`)); + } if (slave.horn !== "none" || slave.tail !== "none") { t.push(new SocialEffect("Body Purist", -1, `Inhuman tail or horns`, - `Society <span class="red">is disgusted</span> by ${his} inhuman attributes.`)); - } -} - if (slave.race === "catgirl" && V.arcologies[0].FSBodyPuristCatLaw === 0) { - t.push(new SocialEffect("Body Purist", -2, `Nonhuman`, - `Society <span class="red">is disgusted</span> by ${his} feline nature.`)); - } + `Society <span class="red">is disgusted</span> by ${his} inhuman attributes.`)); + } + } + if (slave.race === "catgirl" && V.arcologies[0].FSBodyPuristCatLaw === 0) { + t.push(new SocialEffect("Body Purist", -2, `Nonhuman`, + `Society <span class="red">is disgusted</span> by ${his} feline nature.`)); + } if (slave.faceImplant <= 5 && slave.race === slave.origRace) { t.push(new SocialEffect("Body Purist", 1, `Unaltered`, `Society <span class="green">approves</span> of ${his} natural, untouched appearance, advancing the fashion for unaltered slaves.`)); diff --git a/src/events/intro/initNationalities.js b/src/events/intro/initNationalities.js index eead7190f1cbbffe26edb3123031233f88636892..dfa24c6782e16d1652d00ea5bc33574365c38fa4 100644 --- a/src/events/intro/initNationalities.js +++ b/src/events/intro/initNationalities.js @@ -165,6 +165,7 @@ App.Intro.initNationalities = function() { } function initArcologies() { + /** @type {Array<FC.ArcologyDirection>} */ const seed = ["east", "north", "northeast", "northwest", "south", "southeast", "southwest", "west"]; const govtypes = ["a committee", "a corporation", "an individual", "an oligarchy", "direct democracy", "elected officials"]; diff --git a/src/events/reNickname.js b/src/events/reNickname.js index 499b106bee4ba4c640f45a51c77bc399f9c639f9..90279df55f893fa5b86ed7cd7df79cf678e487d8 100644 --- a/src/events/reNickname.js +++ b/src/events/reNickname.js @@ -39,11 +39,10 @@ App.Events.RENickname = class RENickname extends App.Events.BaseEvent { getQualifiedNicknames(slave) { const _qualifiedNicknames = new Set(); - if (slave.nationality) { - _qualifiedNicknames.add("nationality"); + if (slave.nationality) { + _qualifiedNicknames.add("nationality"); } - if (V.seeRace === 1) { switch (slave.race) { case "amerindian": @@ -1168,11 +1167,11 @@ App.Events.RENickname = class RENickname extends App.Events.BaseEvent { notApplyDesc = `may feel some gratitude due to your preference that ${he} not be defined by ${his} ethnicity, but this is counterbalanced by the increased independence your kindness inspires.`; break; - case "catgirl": + case "catgirl": nicknameArray = ["Ace", "Bandit", "Bubbles", "Butterscotch", "Cupcake", "Cutie", "Dottie", "Dandelion", "Fluffy", "Furball", "Garfield", "Ginger", "Hairball", "Kitten", "Tiger", "Twitchy", "Whiskers", "Spots", "Stormy", "Sunshine", "Oreo", "Ziggy"]; - situationDesc = `is a catgirl, a highly unusual result of advanced genetic engineering in the postmodern age. Their pronounced cat-like features mark them apart from the rest of your slave, from the twitching, sensitive ears to the light coating of silky fur across their body, and tend to be the first thing anyone notices when looking at them.`; - applyDesc = `now has a constant and humiliating reminder that their cat-like features define $him above all else.`; - notApplyDesc = `seems rather ambivalent about your decision to not define $him by $his catlike nature. $He just mrowls at you in a way that could be interpeted as either gratitude or annoyance.`; + situationDesc = `is a catgirl, a highly unusual result of advanced genetic engineering in the postmodern age. Their pronounced cat-like features mark them apart from the rest of your slaves, from the twitching, sensitive ears to the light coating of silky fur across their body, and tend to be the first thing anyone notices when looking at them.`; + applyDesc = `now has a constant and humiliating reminder that their cat-like features define ${him} above all else.`; + notApplyDesc = `seems rather ambivalent about your decision to not define ${him} by ${his} catlike nature. ${He} just mrowls at you in a way that could be interpeted as either gratitude or annoyance.`; break; case "semitic": diff --git a/src/futureSocieties/futureSociety.js b/src/futureSocieties/futureSociety.js index 70c0891dcfc8e690a64470191d6cd55bff68639e..ad90a950eb7a754123189f054ea835c08517760b 100644 --- a/src/futureSocieties/futureSociety.js +++ b/src/futureSocieties/futureSociety.js @@ -351,6 +351,11 @@ globalThis.FutureSocieties = (function() { arcology.FSStatuesqueGlorificationLaw2 = 0; arcology.FSStatuesqueGlorificationSMR = 0; break; + case "FSBodyPurist": + arcology[FSLaw] = 0; + arcology[FSSMR] = 0; + arcology.FSBodyPuristCatLaw = 0; + break; case "FSNull": break; default: // all others have one law and one SMR diff --git a/src/js/slaveCostJS.js b/src/js/slaveCostJS.js index eee1a58e91b7c35629b1af98322526c62063bc74..f80c85ec9fb1ec4b0e8ce9a419a2994951390287 100644 --- a/src/js/slaveCostJS.js +++ b/src/js/slaveCostJS.js @@ -2494,39 +2494,25 @@ globalThis.slaveCostBeauty = (function() { multiplier -= 0.2; } } - if (V.seeCats === 1) { - if (arcology.FSBodyPurist === "unset" && V.projectN.techReleased === 1) { - if (slave.race === "catgirl") { + if (V.seeCats === 1 && slave.race === "catgirl") { + if (arcology.FSBodyPurist === "unset" && V.projectN.techReleased === 1) { multiplier += 0.5; - } - } else if (arcology.FSBodyPurist === "unset" && V.projectN.techReleased === 0) { - if (slave.race === "catgirl") { + } else if (arcology.FSBodyPurist === "unset" && V.projectN.techReleased === 0) { multiplier += 0.9; - } - } else if (arcology.FSBodyPurist !== "unset" && arcology.FSBodyPuristCatLaw === 0) { - if (slave.race === "catgirl") { + } else if (arcology.FSBodyPurist !== "unset" && arcology.FSBodyPuristCatLaw === 0) { multiplier -= 0.5; - } - } else if (arcology.FSBodyPurist !== "unset" && arcology.FSBodyPuristCatLaw === 1 && V.projectN.techreleased === 1) { - if (slave.race === "catgirl") { + } else if (arcology.FSBodyPurist !== "unset" && arcology.FSBodyPuristCatLaw === 1 && V.projectN.techreleased === 1) { multiplier += 0.5; - } - } else if (arcology.FSBodyPurist !== "unset" && arcology.FSBodyPuristCatLaw === 1 && V.projectN.techreleased === 0) { - if (slave.race === "catgirl") { + } else if (arcology.FSBodyPurist !== "unset" && arcology.FSBodyPuristCatLaw === 1 && V.projectN.techreleased === 0) { multiplier += 0.9; } - } - if (arcology.FSEgyptianRevivalist !== "unset") { - if (slave.race === "catgirl") { + if (arcology.FSEgyptianRevivalist !== "unset") { multiplier += 0.2; } - } - if (arcology.FSTransformationFetishist !== "unset") { - if (slave.race === "catgirl") { + if (arcology.FSTransformationFetishist !== "unset") { multiplier += 0.2; } } - } if (arcology.FSRepopulationFocusSMR !== 0) { if (slave.preg > 0) { multiplier += 0.1; diff --git a/src/npc/children/longChildDescription.js b/src/npc/children/longChildDescription.js index 831da4c968d61289b1e8ac297cb5903cbf6a03de..e56d81b684d8e9c4963baaed4b4c73f37a0f111e 100644 --- a/src/npc/children/longChildDescription.js +++ b/src/npc/children/longChildDescription.js @@ -18,8 +18,8 @@ App.Facilities.Nursery.LongChildDescription = function(child, {market = 0, event he, him, his, hers, himself, boy, He, His, girl } = getPronouns(child); - const skintype = (slave.race === "catgirl") ? "skin" : "fur" - const freckled = (slave.race === "catgirl") ? "freckled" : "spotted" + const skintype = (child.race === "catgirl") ? "skin" : "fur"; + const freckled = (child.race === "catgirl") ? "freckled" : "spotted"; // helper functions function accent(child) { diff --git a/src/npc/descriptions/mouth.js b/src/npc/descriptions/mouth.js index 4a1d8a9bfa80c2f0e4c35b4ef03bcd169785a8d8..8641125e1a5a6bbad84379b5d77700e38dced229 100644 --- a/src/npc/descriptions/mouth.js +++ b/src/npc/descriptions/mouth.js @@ -108,10 +108,10 @@ App.Desc.mouth = function(slave) { r.push(`${His} teeth have been replaced with realistic implants that mimic the dentition of a carnivore. ${His} smiles are frightening, and ${he} can bare them to become truly terrifying.`); } else if (slave.teeth === "fangs") { if (slave.race === "catgirl") { - r.push(`${His} upper canine teeth are sharp feline fangs that distinctly mark ${him} as a bioengineered cat${girl} every time ${he} opens ${his} mouth. ${His} smiles are frightening, and ${he} can bare them to become truly terrifying.`); - } else { - r.push(`${His} upper canine teeth have been replaced with realistic implants that mimic fangs. ${His} smiles are frightening, and ${he} can bare them to become truly terrifying.`); - } + r.push(`${His} upper canine teeth are sharp feline fangs that distinctly mark ${him} as a bioengineered cat${girl} every time ${he} opens ${his} mouth. ${His} smiles are frightening, and ${he} can bare them to become truly terrifying.`); + } else { + r.push(`${His} upper canine teeth have been replaced with realistic implants that mimic fangs. ${His} smiles are frightening, and ${he} can bare them to become truly terrifying.`); + } } else if (slave.teeth === "fang") { r.push(`One of ${his} upper canine teeth has been replaced with realistic implant shaped like a fang.`); if (slave.faceShape === "cute") { diff --git a/src/npc/descriptions/skin.js b/src/npc/descriptions/skin.js index 129c051ff7c74da61afd0223bd71a7c328ee79d4..9c991237ac906ecf4007c09e74f730fbec38d1ab 100644 --- a/src/npc/descriptions/skin.js +++ b/src/npc/descriptions/skin.js @@ -12,7 +12,7 @@ App.Desc.skin = function(slave, {market, eventDescription} = {}) { } = getPronouns(slave); - const skin = (slave.race === "catgirl") ? "fur" : "skin" + const skin = (slave.race === "catgirl") ? "fur" : "skin"; if (slave.fuckdoll > 0) { r.push(`The small areas of visible ${skin} are`);