diff --git a/1.4/Assemblies/RJW_Menstruation.dll b/1.4/Assemblies/RJW_Menstruation.dll index 4e04199..32d579b 100644 Binary files a/1.4/Assemblies/RJW_Menstruation.dll and b/1.4/Assemblies/RJW_Menstruation.dll differ diff --git a/1.4/Languages/English/Keyed/RJW_Menstruation.xml b/1.4/Languages/English/Keyed/RJW_Menstruation.xml index a1c65b3..3df2d06 100644 --- a/1.4/Languages/English/Keyed/RJW_Menstruation.xml +++ b/1.4/Languages/English/Keyed/RJW_Menstruation.xml @@ -120,8 +120,6 @@ Hookup minimum opinion in estrus Estimated sperm lifespan Estimated egg lifespan - Ovulation {0} - Chance of each egg being released during ovulation. Implantation chance of fertilized eggs. Chance of fertilization this hour: {0}% Use basic RJW pregnancy Use menstruation multiple pregnancy diff --git a/1.4/MilkModule/Assemblies/MilkModule.dll b/1.4/MilkModule/Assemblies/MilkModule.dll index 174e407..5c953b2 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/DebugActions.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/DebugActions.cs index fe98f5a..3a8fdb5 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/DebugActions.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/DebugActions.cs @@ -10,7 +10,7 @@ namespace RJW_Menstruation private static void SetFollicular(Pawn p) { foreach (HediffComp_Menstruation comp in p.GetMenstruationComps()) - comp.GoNextStage(HediffComp_Menstruation.Stage.Follicular); + comp.curStage = HediffComp_Menstruation.Stage.Follicular; Messages.Message($"{p} is now follicular", p, MessageTypeDefOf.NeutralEvent, false); } @@ -18,7 +18,7 @@ namespace RJW_Menstruation private static void SetOvulatory(Pawn p) { foreach (HediffComp_Menstruation comp in p.GetMenstruationComps()) - comp.GoNextStage(HediffComp_Menstruation.Stage.Ovulatory); + comp.curStage = HediffComp_Menstruation.Stage.Ovulatory; Messages.Message($"{p} is now ovulatory", p, MessageTypeDefOf.NeutralEvent, false); } @@ -26,7 +26,7 @@ namespace RJW_Menstruation private static void SetLuteal(Pawn p) { foreach (HediffComp_Menstruation comp in p.GetMenstruationComps()) - comp.GoNextStage(HediffComp_Menstruation.Stage.Luteal); + comp.curStage = HediffComp_Menstruation.Stage.Luteal; Messages.Message($"{p} is now luteal", p, MessageTypeDefOf.NeutralEvent, false); } @@ -34,7 +34,7 @@ namespace RJW_Menstruation private static void SetBleeding(Pawn p) { foreach (HediffComp_Menstruation comp in p.GetMenstruationComps()) - comp.GoNextStage(HediffComp_Menstruation.Stage.Bleeding); + comp.curStage = HediffComp_Menstruation.Stage.Bleeding; Messages.Message($"{p} is now bleeding", p, MessageTypeDefOf.NeutralEvent, false); } /* diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/DrugOutcomeDoers.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/DrugOutcomeDoers.cs index 7b0ab74..6e8c375 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/DrugOutcomeDoers.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/DrugOutcomeDoers.cs @@ -16,7 +16,7 @@ namespace RJW_Menstruation ) { comp.SetEstrus(); - comp.GoNextStage(HediffComp_Menstruation.Stage.Ovulatory); + comp.curStage = HediffComp_Menstruation.Stage.Ovulatory; comp.ovarypower--; } } @@ -32,7 +32,7 @@ namespace RJW_Menstruation ) { comp.SetEstrus(); - comp.GoNextStage(HediffComp_Menstruation.Stage.Ovulatory); + comp.curStage = HediffComp_Menstruation.Stage.Ovulatory; comp.eggstack += ingested.stackCount - 1; } } 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 a9cf99a..ef575f0 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 @@ -203,7 +203,7 @@ namespace RJW_Menstruation get { if (!Configurations.EnableMenopause || Props.infertile) return Mathf.Max(1.0f, ovarypower / OvaryPowerThreshold); - else return (float)ovarypower / OvaryPowerThreshold; + else return ovarypower / OvaryPowerThreshold; } } @@ -280,63 +280,16 @@ namespace RJW_Menstruation return 1.0f; } } - - // I hate doing this, but it's the least bad option - public bool calculatingOvulationChance = false; - - public float OvulationChance - { - get - { - float ovulationChance = 1.0f; - if (EggHealth <= 0.0f) return 0.0f; - if (EggHealth < 1.0f / 3.0f) ovulationChance = 0.8f; - if (ModsConfig.BiotechActive && xxx.is_human(Pawn)) - { - if (Pawn.SterileGenes()) return 0.0f; - // Replicate how rjw.PawnCapacityWorker_Fertility.CalculateCapacityLevel does it, but without the age factor - if (!Pawn.RaceHasFertility()) return 0.0f; - if (AndroidsCompatibility.IsAndroid(Pawn) && parent.def != Genital_Helper.archotech_vagina) return 0.0f; - foreach (var part in StatDefOf.Fertility.parts) - { - if(part is StatPart_FertilityByGenderAge fertilityByAge) - { - float factor = 1.0f; - fertilityByAge.TransformValue(StatRequest.For(Pawn), ref factor); - if (factor <= 0.0f) return 0.0f; // Too young or too old - } - else part.TransformValue(StatRequest.For(Pawn), ref ovulationChance); - } - try - { - calculatingOvulationChance = true; - ovulationChance *= PawnCapacityUtility.CalculateCapacityLevel(Pawn.health.hediffSet, xxx.reproduction); - } - finally { calculatingOvulationChance = false; } - } - return ovulationChance; - } - } - public float ImplantChance + //effect on implant chance + public float ImplantFactor { get { float factor = 1.0f; if (Pawn.Has(Quirk.Breeder)) factor = 10.0f; - - if (ModsConfig.BiotechActive && xxx.is_human(Pawn)) - { - // Implant factor will be based solely on pawn age, plus any rollover from ovulation chance - StatPart_FertilityByGenderAge fertilityStatPart = StatDefOf.Fertility.GetStatPart(); - fertilityStatPart?.TransformValue(StatRequest.For(Pawn), ref factor); - float ovulationOverflow = OvulationChance; - if (ovulationOverflow > 1.0f) factor *= ovulationOverflow; - return Props.baseImplantationChanceFactor * FertilityModifier * factor; - } - else return Pawn.health.capacities.GetLevel(xxx.reproduction) * Props.baseImplantationChanceFactor * FertilityModifier * factor; + return Pawn.health.capacities.GetLevel(xxx.reproduction) * Props.baseImplantationChanceFactor * FertilityModifier * factor; } } - public IEnumerable GetCumsInfo { get @@ -392,13 +345,13 @@ namespace RJW_Menstruation switch (CurrentVisibleStage) { case Stage.Follicular: - return Translations.Stage_Follicular + (EggHealth < 1f ? " " + Translations.Stage_Climacteric : ""); + return Translations.Stage_Follicular + (EggHealth < 1f ? Translations.Stage_Climacteric : ""); case Stage.Ovulatory: - return Translations.Stage_Ovulatory + (EggHealth < 1f ? " " + Translations.Stage_Climacteric : ""); + return Translations.Stage_Ovulatory + (EggHealth < 1f ? Translations.Stage_Climacteric : ""); case Stage.Luteal: - return Translations.Stage_Luteal + (EggHealth < 1f ? " " + Translations.Stage_Climacteric : ""); + return Translations.Stage_Luteal + (EggHealth < 1f ? Translations.Stage_Climacteric : ""); case Stage.Bleeding: - return Translations.Stage_Bleeding + (EggHealth < 1f ? " " + Translations.Stage_Climacteric : ""); + return Translations.Stage_Bleeding + (EggHealth < 1f ? Translations.Stage_Climacteric : ""); case Stage.Pregnant: return Translations.Stage_Pregnant; case Stage.Recover: @@ -422,13 +375,13 @@ namespace RJW_Menstruation switch (CurrentVisibleStage) { case Stage.Follicular: - return Translations.Stage_Follicular_Desc + (EggHealth < 1f ? " " + Translations.Stage_Climacteric_Desc : ""); + return Translations.Stage_Follicular_Desc + (EggHealth < 1f ? Translations.Stage_Climacteric_Desc : ""); case Stage.Ovulatory: - return Translations.Stage_Ovulatory_Desc + (EggHealth < 1f ? " " + Translations.Stage_Climacteric_Desc : ""); + return Translations.Stage_Ovulatory_Desc + (EggHealth < 1f ? Translations.Stage_Climacteric_Desc : ""); case Stage.Luteal: - return Translations.Stage_Luteal_Desc + (EggHealth < 1f ? " " + Translations.Stage_Climacteric_Desc : ""); + return Translations.Stage_Luteal_Desc + (EggHealth < 1f ? Translations.Stage_Climacteric_Desc : ""); case Stage.Bleeding: - return Translations.Stage_Bleeding_Desc + (EggHealth < 1f ? " " + Translations.Stage_Climacteric_Desc : ""); + return Translations.Stage_Bleeding_Desc + (EggHealth < 1f ? Translations.Stage_Climacteric_Desc : ""); case Stage.Pregnant: return Translations.Stage_Pregnant_Desc; case Stage.Recover: @@ -725,7 +678,7 @@ namespace RJW_Menstruation BeforeSimulator(); - if (pregnancy == null && (ImplantChance <= 0.0f || EggHealth <= 0)) GoNextStage(Stage.Infertile); + if (pregnancy == null && (Pawn.health.capacities.GetLevel(xxx.reproduction) <= 0 || EggHealth <= 0 || Pawn.SterileGenes())) GoNextStage(Stage.Infertile); switch (curStage) { case Stage.Follicular: @@ -1158,12 +1111,9 @@ namespace RJW_Menstruation if (cycleSpeed < 0f) cycleSpeed = Utility.RandGaussianLike(0.8f, 1.2f); if (cycleVariability < 0f) cycleVariability = MenstruationUtility.RandomVariabilityPercent(); - - InitOvary(); - if (currentIntervalHours < 0) { - if (ImplantChance <= 0.0f || EggHealth <= 0) curStage = Stage.Infertile; + if (Pawn.health.capacities.GetLevel(xxx.reproduction) <= 0 || Pawn.SterileGenes()) curStage = Stage.Infertile; else if (!IsBreedingSeason()) curStage = Stage.Anestrus; else curStage = RandomStage(); if (curStage == Stage.Follicular) @@ -1178,6 +1128,8 @@ namespace RJW_Menstruation if (cums == null) cums = new List(); if (eggs == null) eggs = new List(); + + InitOvary(); TakeLoosePregnancy(); //Log.Message(Pawn.Label + " - Initialized menstruation comp"); @@ -1331,7 +1283,7 @@ namespace RJW_Menstruation float totalFertPower = eligibleCum.Sum(cum => cum.FertVolume); - if (Rand.Chance(Mathf.Pow(1.0f - Configurations.FertilizeChance, totalFertPower * Props.basefertilizationChanceFactor))) + if (Rand.Range(0.0f, 1.0f) > 1.0f - Mathf.Pow(1.0f - Configurations.FertilizeChance, totalFertPower * Props.basefertilizationChanceFactor)) return null; Pawn.records.AddTo(VariousDefOf.AmountofFertilizedEggs, 1); @@ -1372,7 +1324,7 @@ namespace RJW_Menstruation deadeggs.Add(egg); continue; } - else if (Rand.Chance(Configurations.ImplantationChance * ImplantChance * InterspeciesImplantFactor(egg.fertilizer))) + else if (Rand.Range(0.0f, 1.0f) <= Configurations.ImplantationChance * ImplantFactor * InterspeciesImplantFactor(egg.fertilizer)) { if (Configurations.Debug) Log.Message($"Implanting fertilized egg of {Pawn} into {parent}, father {egg.fertilizer}"); if (pregnancy != null) @@ -1575,7 +1527,7 @@ namespace RJW_Menstruation } else if (curStageHrs >= currentIntervalHours) { - GoNextStage(Stage.Ovulatory); + GoOvulatoryStage(); } else { @@ -1610,10 +1562,8 @@ namespace RJW_Menstruation eggnum *= ovulationFactor; ovulated = (int)eggnum + eggstack; - float ovulationChance = OvulationChance; for (int i = 0; i < ovulated; i++) - if (i < eggstack || Rand.Chance(ovulationChance)) // eggstack comes from drugs and are guaranteed ovulated - eggs.Add(new Egg((int)(EggLifespanHours / CycleFactor))); + eggs.Add(new Egg((int)(EggLifespanHours / CycleFactor))); ovarypower -= ovulated; eggstack = 0; @@ -1634,7 +1584,7 @@ namespace RJW_Menstruation if (curStageHrs >= currentIntervalHours) { eggs.Clear(); - if (EggHealth < 1f / 4f || (EggHealth < 1f / 3f && Rand.Chance(0.3f))) //skips bleeding + if (EggHealth < 1f / 4f || (EggHealth < 1f / 3f && Rand.Range(0.0f, 1.0f) < 0.3f)) //skips bleeding { GoNextStage(Stage.Follicular); } @@ -1713,7 +1663,7 @@ namespace RJW_Menstruation { if (curStageHrs >= currentIntervalHours) { - if (ImplantChance <= 0.0f || EggHealth <= 0) + if (Pawn.health.capacities.GetLevel(xxx.reproduction) == 0 || EggHealth <= 0 || Pawn.SterileGenes()) { GoNextStage(Stage.Infertile); } @@ -1735,7 +1685,7 @@ namespace RJW_Menstruation protected virtual void InfertileAction() { - if (ImplantChance <= 0 || EggHealth <= 0) + if (Pawn.health.capacities.GetLevel(xxx.reproduction) <= 0 || EggHealth <= 0 || Pawn.SterileGenes()) { StayCurrentStageConst(Stage.Infertile); } @@ -1822,7 +1772,7 @@ namespace RJW_Menstruation TaleRecorder.RecordTale(VariousDefOf.TaleCameInside, new object[] { cummer, Pawn }); } - public void GoNextStage(Stage nextstage, bool calculateHours = true) + protected void GoNextStage(Stage nextstage, bool calculateHours = true) { curStageHrs = 0; if (calculateHours) currentIntervalHours = PeriodRandomizer(nextstage); @@ -1831,7 +1781,12 @@ namespace RJW_Menstruation protected virtual void GoOvulatoryStage() { - GoNextStage(Stage.Ovulatory); + if (EggHealth < 1.0f / 3.0f && Rand.Range(0.0f, 1.0f) < 0.2f) // Skip ovulation if deep into climacteric + { + estrusflag = false; + GoNextStage(Stage.Luteal); + } + else GoNextStage(Stage.Ovulatory); } //stage can be interrupted in other reasons diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/MenstruationUtility.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/MenstruationUtility.cs index d67fbb4..a7e2918 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/MenstruationUtility.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/HediffComps/MenstruationUtility.cs @@ -1,5 +1,4 @@ using RimWorld; -using RimWorld.Planet; using rjw; using System; using System.Collections.Generic; @@ -219,8 +218,6 @@ namespace RJW_Menstruation } public static Texture2D GetEggIcon(this HediffComp_Menstruation comp, bool includeOvary) { - const float ovaryChanceToShow_01 = 0.4f; - const float ovaryChanceToShow_02 = 1.0f; switch (comp.CurrentVisibleStage) { case HediffComp_Menstruation.Stage.Follicular: @@ -231,20 +228,15 @@ namespace RJW_Menstruation job.Sexprops != null && !job.Sexprops.usedCondom && (job.Sexprops.sexType == xxx.rjwSextype.Vaginal || job.Sexprops.sexType == xxx.rjwSextype.DoublePenetration)) - return ContentFinder.Get((comp.OvulationChance >= ovaryChanceToShow_01) ? "Ovaries/Ovary_01" : "Ovaries_Ovary_00", true); + return ContentFinder.Get("Ovaries/Ovary_01", true); else break; } if (comp.curStageHrs > comp.CurStageIntervalHours - 30) // Approximate time for ovulation to occur - return ContentFinder.Get((comp.OvulationChance >= ovaryChanceToShow_01) ? "Ovaries/Ovary_01" : "Ovaries_Ovary_00", true); + return ContentFinder.Get("Ovaries/Ovary_01", true); else break; case HediffComp_Menstruation.Stage.Ovulatory: if (!includeOvary) break; - if (comp.OvulationChance >= ovaryChanceToShow_02) - return ContentFinder.Get("Ovaries/Ovary_02", true); - else if (comp.OvulationChance >= ovaryChanceToShow_01) - return ContentFinder.Get("Ovaries/Ovary_01", true); - else - return ContentFinder.Get("Ovaries/Ovary_00", true); + return ContentFinder.Get("Ovaries/Ovary_02", true); case HediffComp_Menstruation.Stage.Luteal: if (!comp.IsEggExist) break; int fertstage = comp.IsFertilized; diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/Patch/RJW_Patch.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/Patch/RJW_Patch.cs index b754557..cc1ff7c 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/Patch/RJW_Patch.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/Patch/RJW_Patch.cs @@ -129,11 +129,11 @@ namespace RJW_Menstruation else if (pawn.GetMenstruationComps().Any()) return false; else return pawn.IsPregnant(); } - private static readonly MethodInfo IsPregnant = AccessTools.Method(typeof(PawnExtensions), nameof(PawnExtensions.IsPregnant), new System.Type[] { typeof(Pawn), typeof(bool) }); + private static readonly MethodInfo IsPregnant = AccessTools.Method(typeof(PawnExtensions), nameof(PawnExtensions.IsPregnant), new System.Type[] {typeof(Pawn), typeof(bool)}); public static IEnumerable Transpiler(IEnumerable instructions) { if (IsPregnant == null || IsPregnant.ReturnType != typeof(bool)) throw new System.InvalidOperationException("IsPregnant not found"); - foreach (CodeInstruction instruction in instructions) + foreach(CodeInstruction instruction in instructions) { if (instruction.Calls(IsPregnant)) yield return CodeInstruction.Call(typeof(CanImpregnate_Patch), nameof(PregnancyBlocksImpregnation)); @@ -371,27 +371,4 @@ namespace RJW_Menstruation } } - - [HarmonyPatch(typeof(PawnCapacityWorker_Fertility), nameof(PawnCapacityWorker_Fertility.CalculateCapacityLevel))] - public static class PawnCapacityWorker_Fertility_Patch - { - private static float GetFertilityStatOrOne(Thing thing, StatDef stat, bool applyPostProcess, int cacheStaleAfterTicks) - { - Pawn pawn = (Pawn)thing; - if (pawn.GetMenstruationComps().Any(comp => comp.calculatingOvulationChance)) - return 1.0f; - else return thing.GetStatValue(stat, applyPostProcess, cacheStaleAfterTicks); - } - private static readonly MethodInfo GetStatValue = AccessTools.Method(typeof(StatExtension), "GetStatValue", new System.Type[] { typeof(Thing), typeof(StatDef), typeof(bool), typeof(int) }); - public static IEnumerable Transpiler(IEnumerable instructions) - { - if (GetStatValue == null || GetStatValue.ReturnType != typeof(float)) throw new System.InvalidOperationException("GetStatValue not found"); - foreach (CodeInstruction instruction in instructions) - { - if (instruction.Calls(GetStatValue)) - yield return CodeInstruction.Call(typeof(PawnCapacityWorker_Fertility_Patch), nameof(GetFertilityStatOrOne)); - else yield return instruction; - } - } - } } diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/Translations.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/Translations.cs index 1a67ebf..7b0862d 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/Translations.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/Translations.cs @@ -134,8 +134,6 @@ namespace RJW_Menstruation public static readonly string EstimatedCumLifespan = "EstimatedCumLifespan".Translate(); public static readonly string EstimatedEggLifespan = "EstimatedEggLifespan".Translate(); - public static string OvulationChanceLabel(string value) => "OvulationChanceLabel".Translate(value); - public static readonly string OvulationChanceDesc = "OvulationChanceDesc".Translate(); public static string FertilityDesc(string value) => "FertilityDesc".Translate(value); public static readonly string Gizmo_GatherCum = "Gizmo_GatherCum".Translate(); diff --git a/1.4/source/RJW_Menstruation/RJW_Menstruation/UI/Dialog_WombStatus.cs b/1.4/source/RJW_Menstruation/RJW_Menstruation/UI/Dialog_WombStatus.cs index ec93cfd..4d428a9 100644 --- a/1.4/source/RJW_Menstruation/RJW_Menstruation/UI/Dialog_WombStatus.cs +++ b/1.4/source/RJW_Menstruation/RJW_Menstruation/UI/Dialog_WombStatus.cs @@ -450,18 +450,11 @@ namespace RJW_Menstruation statvalue = pawn.records.GetValue(xxx.CountOfBirthEgg); FillableBarLabeled(lineRect, " " + xxx.CountOfBirthEgg.LabelCap.CapitalizeFirst() + " " + statvalue, statvalue / 100, TextureCache.RecoverTexture, Texture2D.blackTexture, xxx.CountOfBirthEgg.description); - lineRect.y += height * 3; + lineRect.y += height * 4; - if (ModsConfig.BiotechActive) - { - statvalue = comp.OvulationChance; - FillableBarLabeled(lineRect, " " + Translations.OvulationChanceLabel(statvalue.ToStringPercent()), statvalue, TextureCache.LutealTexture, Texture2D.blackTexture, Translations.OvulationChanceDesc); - } - lineRect.y += height; - - statvalue = Configurations.ImplantationChance * comp.ImplantChance; + statvalue = Configurations.ImplantationChance * comp.ImplantFactor; float fertchance = comp.GetFertilityChance(); - FillableBarLabeled(lineRect, " " + xxx.reproduction.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue, TextureCache.LutealTexture, Texture2D.blackTexture, Translations.FertilityDesc(string.Format("{0:0.##}", fertchance * 100))); + FillableBarLabeled(lineRect, " " + xxx.reproduction.LabelCap.CapitalizeFirst() + " " + statvalue.ToStringPercent(), statvalue, TextureCache.LutealTexture, Texture2D.blackTexture, Translations.FertilityDesc(String.Format("{0:0.##}", fertchance * 100))); Rect overayRect = new Rect(lineRect.x, lineRect.y, lineRect.width * Math.Min(1.0f, fertchance), lineRect.height); GUI.DrawTexture(overayRect, TextureCache.FertChanceTex); lineRect.y += height; diff --git a/About/Manifest.xml b/About/Manifest.xml index 24b2e46..5477ddb 100644 --- a/About/Manifest.xml +++ b/About/Manifest.xml @@ -1,7 +1,7 @@ RJW Menstruation - 1.0.8.8 + 1.0.8.7 diff --git a/changelogs.txt b/changelogs.txt index 1c41775..160c7f5 100644 --- a/changelogs.txt +++ b/changelogs.txt @@ -1,11 +1,3 @@ -Version 1.0.8.8 - - Fix pawns skipping straight to menopause instead of going through climacteric stages. - - Rework ovulation mechanics. A pawn's implantation chance is now dependent 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. - - If Biotech is disabled or not installed, the old fertility system will apply instead. - Version 1.0.8.7 - Fix missing texture when using Milkable Colonists. - Fix estrus and egg lifespan lasting far longer than intended.