diff --git a/CHANGELOG.md b/CHANGELOG.md index 27023a351e139c670e863c4c01a4aa705bc8d724..09ded861e562ac8a7fb1cae42fa6ac8c4cd129d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) ## Unreleased +* added new slimness enthusiast food policy +* fixes + ## 0.10.7.1-4.0.0-alpha.19 - 2022-08-27 + * fixes and code improvements ## 0.10.7.1-4.0.0-alpha.18 - 2022-08-26 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..88c7ab163c78a4472c8dbfd5f971518cefc4d168 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].FSSlimnessEnthusiastFoodLaw === 0 && V.arcologies[0].FSGenderRadicalistLawFuta === 0 ); }, @@ -1582,6 +1583,25 @@ App.Data.Policies.Selection = { note: `Flat slaves will enjoy increased attractiveness to citizens` } ], + "arcologies[0].FSSlimnessEnthusiastFoodLaw": [ + { + 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].FSSlimnessEnthusiastFoodLaw === 0 && V.arcologies[0].FSGenderRadicalistLawBeauty === 0 && V.arcologies[0].FSGenderFundamentalistLawBeauty === 0 && V.arcologies[0].FSPhysicalIdealistLaw === 0 && diff --git a/src/002-config/fc-version.js b/src/002-config/fc-version.js index 365517ed20f620088261e42e5a94ea2b65484bf3..ce3af0a67c1708a5136ece54f2becf7ebbe1038e 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.19", commitHash: null, - release: 1178, // When getting close to 2000, please remove the check located within the onLoad() function defined at line five of src/js/eventHandlers.js. + release: 1179, // 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 2d86ff9fbff1504d74b24d3a442dcc5f2e504812..2c1e4588b902323667b642e75672d21c78b981cf 100644 --- a/src/data/backwardsCompatibility/backwardsCompatibility.js +++ b/src/data/backwardsCompatibility/backwardsCompatibility.js @@ -707,6 +707,9 @@ App.Update.globalVariables = function(node) { } else if (typeof V.arcologies[0].FSSlimnessEnthusiastSMR === "undefined") { V.arcologies[0].FSSlimnessEnthusiastSMR = 0; } + if (typeof V.arcologies[0].FSSlimnessEnthusiastFoodLaw === "undefined") { + V.arcologies[0].FSSlimnessEnthusiastFoodLaw = 0; + } if ((typeof V.FSMaturityPreferentialist !== "undefined") && V.FSMaturityPreferentialist !== "unset") { V.arcologies[0].FSMaturityPreferentialist = V.FSMaturityPreferentialist; } else if (typeof V.arcologies[0].FSMaturityPreferentialist === "undefined") { diff --git a/src/endWeek/player/prDiet.js b/src/endWeek/player/prDiet.js index 702d24336bae7b673c94c024582adb1b635c286b..4c35d1c88d9390b4bb15e2bf6fe440d490825464 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].FSSlimnessEnthusiastFoodLaw === 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].FSSlimnessEnthusiastFoodLaw === 1 && !canEatFood(PC))) { roll *= 2; } if (random(1, roll) <= target) { diff --git a/src/endWeek/player/prHormones.js b/src/endWeek/player/prHormones.js index f229f5215932860520020f8f9576f0b1c1343b0b..3092dc196038a7b164524bfe6145bb27fad1375f 100644 --- a/src/endWeek/player/prHormones.js +++ b/src/endWeek/player/prHormones.js @@ -122,9 +122,11 @@ App.EndWeek.Player.hormones = function(PC, selfManufactured, hormonePower) { function hormonesEffects() { if (Math.abs(PC.hormoneBalance) >= 50) { if (PC.hormoneBalance > 30 && PC.geneMods.NCS !== 1) { + const slimModBreasts = (V.arcologies[0].FSSlimnessEnthusiastFoodLaw === 1 && !canEatFood(PC)) ? 0.45 : 1; // 600 average breast target, 270 target, 475 @ 350 hormone + const slimModButts = (V.arcologies[0].FSSlimnessEnthusiastFoodLaw === 1 && !canEatFood(PC)) ? 0.6 : 1; // 2.5 average butt, 1.5 target /* 'Expected' breast size based on weight for feminine-bodied player. Masculine-bodied takes a small hit. */ - normBreasts = Math.trunc((100 + (PC.weight + 100) * 5 + 2 * PC.lactationAdaptation) * (0.85 + PC.hormoneBalance / 400) * gigantomastiaMod / Math.max(PC.title * 1.25, 1)); - normButt = ((PC.weight + 100) * 0.025 * (0.9 + PC.hormoneBalance / 600) * (rearLipedemaMod / 2 + 1) / Math.max(PC.title * 1.10, 1)); + normBreasts = Math.trunc((100 + (PC.weight + 100) * 5 + 2 * PC.lactationAdaptation) * (0.85 + PC.hormoneBalance / 400) * gigantomastiaMod * slimModBreasts / Math.max(PC.title * 1.25, 1)); + normButt = ((PC.weight + 100) * 0.025 * (0.9 + PC.hormoneBalance / 600) * (rearLipedemaMod / 2 + 1) * slimModButts / Math.max(PC.title * 1.10, 1)); } if (PC.hormoneBalance >= 350) { diff --git a/src/endWeek/player/prPregnancy.js b/src/endWeek/player/prPregnancy.js index 40e78c80fe0cda3a06239402296cc2c953a47b51..b6c9cc27be57962f28a5709177337ea9d4416f14 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].FSSlimnessEnthusiastFoodLaw === 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..17d12f2f5f093fe165dd013b2a2145e9647d44ac 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].FSSlimnessEnthusiastFoodLaw === 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].FSSlimnessEnthusiastFoodLaw === 1) { roll *= 2; } if (random(1, roll) <= target) { diff --git a/src/endWeek/saHormonesEffects.js b/src/endWeek/saHormonesEffects.js index 053971b00123c4801acf7461a0be0046928b78c3..a054f79cb79f046ae1c2dc584d17b3912db1585d 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].FSSlimnessEnthusiastFoodLaw === 1) ? 0.45 : 1; // 600 average breast target, 270 target, 475 @ 350 hormone + const slimModButts = (V.arcologies[0].FSSlimnessEnthusiastFoodLaw === 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..d1184aa9649a19c3e62ee93c928b51e711159fa8 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].FSSlimnessEnthusiastFoodLaw === 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/events/intro/initNationalities.js b/src/events/intro/initNationalities.js index 213a1bdf0c6fa63dd90ca00c50b2ceb5a4b8c7ac..7aaeeec2563ad769bc131d65baa262d02b186e0c 100644 --- a/src/events/intro/initNationalities.js +++ b/src/events/intro/initNationalities.js @@ -334,6 +334,7 @@ App.Intro.initNationalities = function() { V.arcologies[0].FSMaturityPreferentialistSMR = 0; V.arcologies[0].FSSlimnessEnthusiastSMR = 0; V.arcologies[0].FSSlimnessEnthusiastLaw = 0; + V.arcologies[0].FSSlimnessEnthusiastFoodLaw = 0; V.arcologies[0].FSAssetExpansionistSMR = 0; V.arcologies[0].FSPastoralistLaw = 0; V.arcologies[0].FSPastoralistSMR = 0; diff --git a/src/futureSocieties/futureSociety.js b/src/futureSocieties/futureSociety.js index ac1d705d18aaa75f5a8329f844ec1c08593183d4..e9f299f9ac5afcda44ba2e1fb856cdcc1b2e7132 100644 --- a/src/futureSocieties/futureSociety.js +++ b/src/futureSocieties/futureSociety.js @@ -297,6 +297,11 @@ globalThis.FutureSocieties = (function() { case "FSAssetExpansionist": arcology[FSSMR] = 0; break; + case "FSSlimnessEnthusiast": + arcology.FSSlimnessEnthusiastLaw = 0; + arcology.FSSlimnessEnthusiastFoodLaw = 0; + arcology.FSSlimnessEnthusiastSMR = 0; + break; case "FSPhysicalIdealist": arcology.FSPhysicalIdealistLaw = 0; arcology.FSPhysicalIdealistSMR = 0; diff --git a/src/js/economyJS.js b/src/js/economyJS.js index 9911372e1d3310e7720356d22166c35dd3e3c2ff..0bb95adce6a724182f6bd2c4f7f41f145c2afa36 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].FSSlimnessEnthusiastFoodLaw === 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].FSSlimnessEnthusiastFoodLaw === 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