diff --git a/devTools/types/FC/arcology.d.ts b/devTools/types/FC/arcology.d.ts index 1ce42f9e1bcb2f12221724e0d757f8c403097b99..f116eae9487c80d83061d6bda0d6ed47a5c16c1a 100644 --- a/devTools/types/FC/arcology.d.ts +++ b/devTools/types/FC/arcology.d.ts @@ -50,7 +50,7 @@ declare namespace FC { }; FSSlimnessEnthusiast: { noun: "Slimness Enthusiasm", adj: "Slimness Enthusiast", deco: "Slimness Enthusiast", - research: true, SMR: true, policy: "Law", choice: undefined + research: true, SMR: true, policy: "Law" | "FoodLaw", choice: undefined }; FSAssetExpansionist: { noun: "Asset Expansionism", adj: "Asset Expansionist", deco: "Asset Expansionist", diff --git a/js/003-data/policiesData.js b/js/003-data/policiesData.js index e5ad057b92a9668ef6d673aae539d1d86617b485..cb4d218c4ad8b210720719de0e1787203c48b047 100644 --- a/js/003-data/policiesData.js +++ b/js/003-data/policiesData.js @@ -1237,6 +1237,7 @@ App.Data.Policies.Selection = { V.seeDicks !== 0 && V.arcologies[0].FSGenderRadicalist > 60 && V.arcologies[0].FSSlimnessEnthusiastLaw === 0 && + V.arcologies[0].FSSlimnessFoodLaw === 0 && V.arcologies[0].FSGenderRadicalistLawFuta === 0 ); }, @@ -1583,6 +1584,25 @@ App.Data.Policies.Selection = { } ], }, + "arcologies[0].FSSlimnessFoodLaw": [ + { + title: "Asset Slimming Food", + titleClass: "lime", + text: "slave food production will be required to follow a recipe that keeps chattel nice and trim, reducing the growth of disgusting flesh on their T&A.", + activatedText: "you have standardized a slave food recipe to keep your chattel nice and trim, reducing the amount of oversized T&A in the arcology.", + get requirements() { + return ( + V.arcologies[0].FSGenderRadicalistLawBeauty === 0 && + V.arcologies[0].FSGenderFundamentalistLawBeauty === 0 && + V.arcologies[0].FSGenderRadicalistLawFuta !== 3 && + V.arcologies[0].FSHedonisticDecadenceLaw2 === 0 && + V.arcologies[0].FSPhysicalIdealistLaw === 0 && + V.arcologies[0].FSSlimnessEnthusiast > 20 + ); + }, + note: `Slaves will struggle to grow beyond the ideal amount of T&A. ` + } + ], FSAssetExpansionist: { "arcologies[0].FSAssetExpansionistSMR": [ { @@ -1693,6 +1713,7 @@ App.Data.Policies.Selection = { get requirements() { return ( V.arcologies[0].FSSlimnessEnthusiastLaw === 0 && + V.arcologies[0].FSSlimnessFoodLaw === 0 && V.arcologies[0].FSGenderRadicalistLawBeauty === 0 && V.arcologies[0].FSGenderFundamentalistLawBeauty === 0 && V.arcologies[0].FSPhysicalIdealistLaw === 0 && diff --git a/src/endWeek/player/prDiet.js b/src/endWeek/player/prDiet.js index dc428a71812cfb189e5e261c51848c9af14545b3..1cb3472e50fc2fa966ac8a8af0b4bc56d81efc75 100644 --- a/src/endWeek/player/prDiet.js +++ b/src/endWeek/player/prDiet.js @@ -827,7 +827,7 @@ App.EndWeek.Player.diet = function(PC = V.PC) { roll = 75; target = Math.trunc(Math.clamp(weightMod * 2 - (boobSize - growthGoal) / 20, 0, 68)); } - if (PC.geneMods.NCS === 1) { + if (PC.geneMods.NCS === 1 || (V.arcologies[0].FSSlimnessFoodLaw === 1 && !canEatFood(PC))) { roll *= 2; } // PC food is not laced with hormones normally, so galactorrhea is not triggered here. @@ -844,7 +844,7 @@ App.EndWeek.Player.diet = function(PC = V.PC) { roll = 80000; target = Math.trunc(Math.clamp(weightMod * 1000 - (buttSize * 1000 - growthGoal) * 4, 0, 72000)); } - if (PC.geneMods.NCS === 1) { + if (PC.geneMods.NCS === 1 || (V.arcologies[0].FSSlimnessFoodLaw === 1 && !canEatFood(PC))) { roll *= 2; } if (random(1, roll) <= target) { diff --git a/src/endWeek/player/prPregnancy.js b/src/endWeek/player/prPregnancy.js index 40e78c80fe0cda3a06239402296cc2c953a47b51..a3197867d826b6f792a68b35d884d0b47d0e1e3d 100644 --- a/src/endWeek/player/prPregnancy.js +++ b/src/endWeek/player/prPregnancy.js @@ -269,6 +269,7 @@ App.EndWeek.Player.pregnancy = function(PC = V.PC) { function pregnancyPhysicalEffects() { let boobTarget; + const slimnessFoodMod = (V.arcologies[0].FSSlimnessFoodLaw === 1 && !canEatFood(PC)) ? 0.5 : 1; if (PC.geneMods.NCS === 1) { // NCS: always working against secondary sexual characteristics even in pregnancies. boobTarget = 0; @@ -322,6 +323,7 @@ App.EndWeek.Player.pregnancy = function(PC = V.PC) { } } boobTarget *= gigantomastiaMod; + boobTarget *= slimnessFoodMod; if (PC.geneMods.NCS === 0) { if (PC.pregType >= 30) { if (PC.weight <= 65) { diff --git a/src/endWeek/saDiet.js b/src/endWeek/saDiet.js index 933a49ebb647c90ef2cb3b5b2835b0780d85e8e3..e3032f2ab03caee4ba5e88930db368184cc60b7f 100644 --- a/src/endWeek/saDiet.js +++ b/src/endWeek/saDiet.js @@ -1443,7 +1443,7 @@ App.SlaveAssignment.diet = function saDiet(slave) { roll = 75; target = Math.trunc(Math.clamp(weightGain * 2 - (boobSize - growthGoal) / 20, 0, 68)); } - if (slave.geneMods.NCS === 1) { + if (slave.geneMods.NCS === 1 || V.arcologies[0].FSSlimnessFoodLaw === 1) { roll *= 2; } if (random(1, roll) <= target) { @@ -1464,7 +1464,7 @@ App.SlaveAssignment.diet = function saDiet(slave) { roll = 80000; target = Math.trunc(Math.clamp(weightGain * 1000 - (buttSize * 1000 - growthGoal) * 4, 0, 72000)); } - if (slave.geneMods.NCS === 1) { + if (slave.geneMods.NCS === 1 || V.arcologies[0].FSSlimnessFoodLaw === 1) { roll *= 2; } if (random(1, roll) <= target) { diff --git a/src/endWeek/saHormonesEffects.js b/src/endWeek/saHormonesEffects.js index 053971b00123c4801acf7461a0be0046928b78c3..d573416597fd4f08502e5095ffed74d2f25e6110 100644 --- a/src/endWeek/saHormonesEffects.js +++ b/src/endWeek/saHormonesEffects.js @@ -318,9 +318,11 @@ App.SlaveAssignment.hormonesEffects = function saHormonesEffects(slave) { let normBreasts = 0; let normButt = 0; if (slave.hormoneBalance > 30 && slave.geneMods.NCS !== 1) { + const slimModBreasts = (V.arcologies[0].FSSlimnessFoodLaw === 1) ? 0.45 : 1; // 600 average breast target, 270 target, 475 @ 350 hormone + const slimModButts = (V.arcologies[0].FSSlimnessFoodLaw === 1) ? 0.6 : 1; // 2.5 average butt, 1.5 target /* 'Expected' breast size based on weight for feminine-bodied slaves */ - normBreasts = Math.trunc((100 + (slave.weight + 100) * 5 + 2 * slave.lactationAdaptation) * (0.85 + slave.hormoneBalance / 400) * gigantomastiaMod); - normButt = ((slave.weight + 100) * 0.025 * (0.9 + slave.hormoneBalance / 600) * (rearLipedemaMod / 2 + 1)); + normBreasts = Math.trunc((100 + (slave.weight + 100) * 5 + 2 * slave.lactationAdaptation) * (0.85 + slave.hormoneBalance / 400) * gigantomastiaMod * slimModBreasts); + normButt = ((slave.weight + 100) * 0.025 * (0.9 + slave.hormoneBalance / 600) * (rearLipedemaMod / 2 + 1) * slimModButts); } if (slave.hormoneBalance >= 350) { diff --git a/src/endWeek/saPregnancy.js b/src/endWeek/saPregnancy.js index 5be39258e4041050677301d2c7b4c8c3a5a01779..fe68632c4cef9272e4e19c51b39ecb10685aebfd 100644 --- a/src/endWeek/saPregnancy.js +++ b/src/endWeek/saPregnancy.js @@ -615,6 +615,7 @@ App.SlaveAssignment.pregnancy = function saPregnancy(slave) { */ function pregnancyPhysicalEffects(slave) { let boobTarget; + const slimnessFoodMod = V.arcologies[0].FSSlimnessFoodLaw === 1 ? 0.5 : 1; if (slave.geneMods.NCS === 1) { // NCS: always working against secondary sexual characteristics even in pregnancies. boobTarget = 0; @@ -668,6 +669,7 @@ App.SlaveAssignment.pregnancy = function saPregnancy(slave) { } } boobTarget *= gigantomastiaMod; + boobTarget *= slimnessFoodMod; if (slave.geneMods.NCS === 0) { const boobSize = slave.boobs - slave.boobsImplant - slave.boobsMilk; const buttSize = slave.butt - slave.buttImplant; diff --git a/src/js/economyJS.js b/src/js/economyJS.js index 9911372e1d3310e7720356d22166c35dd3e3c2ff..602cfc5b41f39a2c509453a28965b9cc5c868965 100644 --- a/src/js/economyJS.js +++ b/src/js/economyJS.js @@ -806,7 +806,8 @@ globalThis.calculateCosts = (function() { } function getPCFoodCosts() { - const foodCost = V.mods.food.cost; + const slimnessFoodMod = V.arcologies[0].FSSlimnessFoodLaw === 1 && !canEatFood(V.PC) ? 1.15 : 1; + const foodCost = V.mods.food.cost * slimnessFoodMod; let costs = 0; // Well this ought to be a mess. // Basic food costs @@ -1124,8 +1125,9 @@ globalThis.getSlaveCostArray = function(s) { let cost = 0; let retval = []; let t = ""; + const slimnessFoodMod = V.arcologies[0].FSSlimnessFoodLaw === 1 ? 1.15 : 1; const rulesCost = V.rulesCost; - const foodCost = V.mods.food.cost; + const foodCost = V.mods.food.cost * slimnessFoodMod; const drugsCost = V.drugsCost; // Living expenses