diff --git a/1.4/Assemblies/RJW_Menstruation.dll b/1.4/Assemblies/RJW_Menstruation.dll index eb24398..24fccb9 100644 Binary files a/1.4/Assemblies/RJW_Menstruation.dll and b/1.4/Assemblies/RJW_Menstruation.dll differ diff --git a/1.4/MilkModule/Assemblies/MilkModule.dll b/1.4/MilkModule/Assemblies/MilkModule.dll index 1881466..174e407 100644 Binary files a/1.4/MilkModule/Assemblies/MilkModule.dll and b/1.4/MilkModule/Assemblies/MilkModule.dll differ diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs index 346a759..ca34673 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_Menstruation.cs @@ -700,16 +700,6 @@ namespace RJW_Menstruation return false; } - public bool ShouldBeInfertile() - { - if (pregnancy != null) return false; - if (ImplantChance <= 0.0f) return true; - // Give the last egg ovulated a chance to implant - if (curStage == Stage.Luteal || curStage == Stage.Bleeding || curStage == Stage.Recover) return false; - if (EggHealth <= 0.0f) return true; - return false; - } - public override void CompPostTick(ref float severityAdjustment) { base.CompPostTick(ref severityAdjustment); @@ -737,7 +727,7 @@ namespace RJW_Menstruation BeforeSimulator(); - if (ShouldBeInfertile()) GoNextStage(Stage.Infertile); + if (pregnancy == null && (ImplantChance <= 0.0f || EggHealth <= 0)) GoNextStage(Stage.Infertile); switch (curStage) { case Stage.Follicular: @@ -1175,7 +1165,7 @@ namespace RJW_Menstruation if (currentIntervalHours < 0) { - if (ShouldBeInfertile()) curStage = Stage.Infertile; + if (ImplantChance <= 0.0f || EggHealth <= 0) curStage = Stage.Infertile; else if (!IsBreedingSeason()) curStage = Stage.Anestrus; else curStage = RandomStage(); if (curStage == Stage.Follicular) @@ -1629,14 +1619,21 @@ namespace RJW_Menstruation eggs.Add(new Egg((int)(EggLifespanHours / CycleFactor))); ++ovulated; } - if(ovulated < ovarypower) ovulated = Math.Max(ovarypower, eggstack); - ovarypower -= ovulated; - eggstack = 0; if (Configurations.Debug && ovulated != toOvulate) Log.Message($"{Pawn} ovulated {ovulated}/{toOvulate} eggs ({ovulationChance.ToStringPercent()} chance)"); - GoNextStage(Stage.Luteal); + eggstack = 0; + if (EggHealth <= 0) + { + eggs.Clear(); + ovarypower = 0; + GoNextStage(Stage.Infertile); + } + else + { + GoNextStage(Stage.Luteal); + } } protected virtual void LutealAction() @@ -1723,7 +1720,7 @@ namespace RJW_Menstruation { if (curStageHrs >= currentIntervalHours) { - if (ShouldBeInfertile()) + if (ImplantChance <= 0.0f || EggHealth <= 0) { GoNextStage(Stage.Infertile); } @@ -1745,7 +1742,7 @@ namespace RJW_Menstruation protected virtual void InfertileAction() { - if (ShouldBeInfertile()) + if (ImplantChance <= 0 || EggHealth <= 0) { StayCurrentStageConst(Stage.Infertile); } diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_PregeneratedBabies.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_PregeneratedBabies.cs index 8d7ab50..979077a 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_PregeneratedBabies.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/HediffComp_PregeneratedBabies.cs @@ -214,10 +214,6 @@ namespace RJW_Menstruation PregnancyUtility.ApplyBirthOutcome(thisOutcome, quality, ritual, genes, geneticMother, birtherThing, thisFather, doctor, lordJobRitual, assignments); // No more babies if mom dies halfway through. Unrealistic maybe, but saves a lot of headache in ApplyBirthOutcome if (mother.health.Dead) break; - if (xxx.is_human(baby)) - mother.records.Increment(xxx.CountOfBirthHuman); - else if (xxx.is_animal(baby)) - mother.records.Increment(xxx.CountOfBirthAnimal); thisOutcome = ((RitualOutcomeEffectWorker_ChildBirth)precept_Ritual.outcomeEffect).GetOutcome(birthQuality, null); } while (comp.HasBaby); @@ -267,10 +263,6 @@ namespace RJW_Menstruation PregnancyUtility.ApplyBirthOutcome(outcome, quality, ritual, genes, geneticMother, birtherThing, thisFather, doctor, lordJobRitual, assignments); if (mother.health.Dead) break; - if (xxx.is_human(baby)) - mother.records.Increment(xxx.CountOfBirthHuman); - else if (xxx.is_animal(baby)) - mother.records.Increment(xxx.CountOfBirthAnimal); } while (comp.HasBaby); // The ritual version doesn't use the return value, either diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/Utility.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/Utility.cs index 4f8b62f..af02fef 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/Utility.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/Utility.cs @@ -463,10 +463,6 @@ namespace RJW_Menstruation { return Color.white; } - catch (InvalidOperationException) // And sometimes it can try to pull the value of a Nullable without checking, too - { - return Color.white; - } } } } diff --git a/changelogs.txt b/changelogs.txt index 55c1283..222a0e8 100644 --- a/changelogs.txt +++ b/changelogs.txt @@ -2,7 +2,7 @@ Version 1.0.8.8 - Fix pawns skipping straight to menopause instead of going through climacteric stages. - Fix father appearing as "Null" in womb dialog for some Biotech pregnancies. - Other bug fixes - - Rework ovulation mechanics. A pawn's implantation chance is now dependent only on their age and climacteric effects. + - Rework ovulation mechanics. A pawn's implantation chance is now dependent only on their age. - All other fertility-altering effects instead change the odds of ovulation occuring, rolled per-egg. This chance appears in the womb dialog. - If the chance of ovulation goes above 100%, the implantation chance is increased. - Drugs that increase the number of eggs ovulated are still guaranteed to work.