From 592fcad0886e75086b8e0221e959ac1f7ea7749f Mon Sep 17 00:00:00 2001 From: lutepickle <28810-lutepickle@users.noreply.gitgud.io> Date: Tue, 9 Aug 2022 21:02:08 -0700 Subject: [PATCH] Change OvaryPowerThreshold to better handle very long cycles. Also have climacteric severity use an InverseLerp. --- 1.3/Assemblies/RJW_Menstruation.dll | Bin 163328 -> 163328 bytes 1.3/MilkModule/Assemblies/MilkModule.dll | Bin 5632 -> 5632 bytes .../Assemblies/SexperienceModule.dll | Bin 14848 -> 14848 bytes .../HediffComps/HediffComp_Menstruation.cs | 21 +++++++++++++++--- changelogs.txt | 1 + 5 files changed, 19 insertions(+), 3 deletions(-) diff --git a/1.3/Assemblies/RJW_Menstruation.dll b/1.3/Assemblies/RJW_Menstruation.dll index f2c1607819eed608003a6dc9173d3802a0db35d0..300bcd6d21e60831021a4457065271dc9280ad26 100644 GIT binary patch delta 7114 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 diff --git a/1.3/MilkModule/Assemblies/MilkModule.dll b/1.3/MilkModule/Assemblies/MilkModule.dll index 5061b43b0109af29b59c51fb7b80ebf2ce73563c..f032d8c182b12a038371119f93e5d2dada75603b 100644 GIT binary patch delta 68 zcmV-K0K5NyEPyPKhy(;C-MO)hzzYx|MlUpOM%7H1-6ASr9R6OjTnq>T1Sb&zt&?aD aG!VBi*;^5%+eVo9t!rQ%#kRAo4pawb;u<>u delta 68 zcmV-K0K5NyEPyPKhy?W^!`-orzzYy>26$!V28}?sud_W*o>L*STnq>T1exYb=#yv; aG!SE3yR4OA&P$|Q)o1^ZzT&g24payGi5`*w diff --git a/1.3/SexperienceModule/Assemblies/SexperienceModule.dll b/1.3/SexperienceModule/Assemblies/SexperienceModule.dll index fa2d04c9fe560761192986c9b5b1f95caad66312..308d693a140dda8e70a1734f85bf5f1ba11f1788 100644 GIT binary patch delta 68 zcmV-K0K5Nybbxe_hy-xlz|^sf1S$|iZ**+$lHWy#L3!G}D|lVApeo!41gmT1@uV$ZY0GCT)ad?085 delta 68 zcmV-K0K5Nybbxe_hy;lyllHNU1S$}jWX)pa00>2@1AC!sgh+$4peo!41YS+pj+1~g aG!SIaq1z_gmP?WL3CDOW>tD0PGCT(a>>gPF diff --git a/1.3/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs b/1.3/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs index 4c5a060..7a9b2f2 100644 --- a/1.3/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs +++ b/1.3/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs @@ -137,7 +137,22 @@ namespace RJW_Menstruation { get { - if (opcache < 0) opcache = (int)(72f * parent.pawn.def.race.lifeExpectancy / ThingDefOf.Human.race.lifeExpectancy); + if (opcache >= 0) return opcache; + // Climacteric will set in 6 (human) years before egg exhaustion + float avglittersize; + try + { + avglittersize = Mathf.Max(Rand.ByCurveAverage(parent.pawn.def.race.litterSizeCurve), 1.0f); + } + catch + { + // Any exceptions in that will have been reported elsewhere in the code by now + avglittersize = 1.0f; + }; + opcache = (int)(RaceCyclesPerYear() * + avglittersize * + 6f * + (parent.pawn.def.race.lifeExpectancy / ThingDefOf.Human.race.lifeExpectancy)); return opcache; } } @@ -1035,7 +1050,7 @@ namespace RJW_Menstruation else if (ovarypower < OvaryPowerThreshold) { Hediff hediff = HediffMaker.MakeHediff(VariousDefOf.Hediff_Climacteric, parent.pawn); - hediff.Severity = 0.008f * (OvaryPowerThreshold - ovarypower); + hediff.Severity = Mathf.InverseLerp(OvaryPowerThreshold, 0, ovarypower); parent.pawn.health.AddHediff(hediff, Genital_Helper.get_genitalsBPR(parent.pawn)); } } @@ -1391,7 +1406,7 @@ namespace RJW_Menstruation else if (Configurations.EnableMenopause && ovarypower < OvaryPowerThreshold) { Hediff hediff = HediffMaker.MakeHediff(VariousDefOf.Hediff_Climacteric, parent.pawn); - hediff.Severity = 0.008f * i; + hediff.Severity = Mathf.InverseLerp(OvaryPowerThreshold, 0, ovarypower); parent.pawn.health.AddHediff(hediff, Genital_Helper.get_genitalsBPR(parent.pawn)); GoNextStage(Stage.ClimactericLuteal); } diff --git a/changelogs.txt b/changelogs.txt index 857438d..d600e9b 100644 --- a/changelogs.txt +++ b/changelogs.txt @@ -3,6 +3,7 @@ Version 1.0.7.1 - Nipple size/transition system rewritten to be simpler under the hood. Should work with existing saves, but you might find sizes to be different, especially for very large or very small breasts. - Identical twins conceived after this update will have identical sex part sizes, properties, etc. upon being born. - Replaced HugsLib-based scheduler with normal ticking. This should reduce some 'phantom cycle' bugs. + - Redone calculation to determine low eggs remaining. This should cause climacteric to be applied at a more appropriate time in the pawn's life, especially for those with very long cycles. - For modders: - The function Hediff_MultiplePregnancy.ProcessIdenticalSibling is called on every identical sibling when born except the first. Any race-specfic genetic properties can be patched in there. - Any mods that add comps to RJW parts should copy what they need to on a postfix to Hediff_MultiplePregnancy.CopyBodyPartProperties, e.g. how menstruation itself does in that function.