Compare commits

..

3 commits

Author SHA1 Message Date
lutepickle
7bf9f80742 Add a missing using directive to PregnancyCommon 2023-01-07 21:23:08 -08:00
lutepickle
8aff96e5a4 Prevent two humanlikes from creating an animal for Biotech pregnancies 2023-01-07 20:58:28 -08:00
lutepickle
12c760d16c Fix periodic ovulator cycle variability 2023-01-07 20:26:13 -08:00
4 changed files with 15 additions and 6 deletions

View file

@ -75,14 +75,14 @@ namespace RJW_Menstruation
base.PregnantAction(); base.PregnantAction();
if (curStage != Stage.Pregnant) if (curStage != Stage.Pregnant)
// Go halfway into the cycle // Go halfway into the cycle
hoursToNextCycle = (int)(averageCycleIntervalHours * Rand.Range(-cycleVariability, cycleVariability)) / 2; hoursToNextCycle = (int)(averageCycleIntervalHours * (1 + Rand.Range(-cycleVariability, cycleVariability))) / 2;
} }
protected override void AnestrusAction() protected override void AnestrusAction()
{ {
if (hoursToNextCycle <= 0) if (hoursToNextCycle <= 0)
{ {
hoursToNextCycle = (int)(averageCycleIntervalHours * Rand.Range(-cycleVariability, cycleVariability)); hoursToNextCycle = (int)(averageCycleIntervalHours * (1 + Rand.Range(-cycleVariability, cycleVariability)));
if (IsBreedingSeason()) GoNextStage(Stage.Follicular); if (IsBreedingSeason()) GoNextStage(Stage.Follicular);
return; return;
} }

View file

@ -37,6 +37,7 @@ namespace RJW_Menstruation
// But it is possible that there is no new hediff (be it a birth, miscarrage, or dev edit) // But it is possible that there is no new hediff (be it a birth, miscarrage, or dev edit)
base.CompPostPostRemoved(); base.CompPostPostRemoved();
// Send the babies from this comp to the new one
switch (parent) switch (parent)
{ {
case Hediff_Pregnant hediff_Pregnant: case Hediff_Pregnant hediff_Pregnant:
@ -70,7 +71,7 @@ namespace RJW_Menstruation
public void AddNewBaby(Pawn mother, Pawn father) public void AddNewBaby(Pawn mother, Pawn father)
{ {
if (babies == null) babies = new List<Pawn>(); if (babies == null) babies = new List<Pawn>();
PawnKindDef babyPawnKind = PregnancyCommon.BabyPawnKindDecider(mother, father); PawnKindDef babyPawnKind = PregnancyCommon.BabyPawnKindDecider(mother, father, true);
PawnGenerationRequest request = new PawnGenerationRequest PawnGenerationRequest request = new PawnGenerationRequest
( (
kind: babyPawnKind, kind: babyPawnKind,
@ -115,7 +116,7 @@ namespace RJW_Menstruation
baby.story.furDef = firstbaby.story.furDef; baby.story.furDef = firstbaby.story.furDef;
} }
if (baby.genes != null && ModsConfig.BiotechActive) if (baby.genes != null)
{ {
baby.genes.SetXenotypeDirect(firstbaby.genes.Xenotype); baby.genes.SetXenotypeDirect(firstbaby.genes.Xenotype);
baby.genes.xenotypeName = firstbaby.genes.xenotypeName; baby.genes.xenotypeName = firstbaby.genes.xenotypeName;

View file

@ -313,7 +313,7 @@ namespace RJW_Menstruation
allowAddictions: false, allowAddictions: false,
relationWithExtraPawnChanceFactor: 0, relationWithExtraPawnChanceFactor: 0,
fixedLastName: lastname, fixedLastName: lastname,
kind: PregnancyCommon.BabyPawnKindDecider(mother, father), kind: PregnancyCommon.BabyPawnKindDecider(mother, father, false),
//fixedIdeo: mother.Ideo, //fixedIdeo: mother.Ideo,
forbidAnyTitle: true, forbidAnyTitle: true,
forceNoBackstory: true, forceNoBackstory: true,

View file

@ -1,5 +1,6 @@
using RimWorld; using RimWorld;
using rjw; using rjw;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
@ -61,7 +62,8 @@ namespace RJW_Menstruation
/// <param name="father"></param> /// <param name="father"></param>
/// <returns></returns> /// <returns></returns>
public static PawnKindDef BabyPawnKindDecider(Pawn mother, Pawn father) /// <param name="noAnimalsFromHumanlikes"></param>
public static PawnKindDef BabyPawnKindDecider(Pawn mother, Pawn father, bool noAnimalsFromHumanlikes)
{ {
PawnKindDef motherKindDef = Utility.GetRacesPawnKind(mother); PawnKindDef motherKindDef = Utility.GetRacesPawnKind(mother);
PawnKindDef fatherKindDef = Utility.GetRacesPawnKind(father); PawnKindDef fatherKindDef = Utility.GetRacesPawnKind(father);
@ -177,6 +179,12 @@ namespace RJW_Menstruation
if (!spawn_kind_def_list.NullOrEmpty()) spawn_kind_def = spawn_kind_def_list.RandomElement(); if (!spawn_kind_def_list.NullOrEmpty()) spawn_kind_def = spawn_kind_def_list.RandomElement();
} }
// If both parents are humanlike, Biotech will attempt to assign genes to the child
// Normally not a problem, but with the hybrid system, two humanlikes might produce an animal
// So override it and force the child to be human
if (noAnimalsFromHumanlikes && mother.genes != null && father?.genes != null && !spawn_kind_def.race.race.Humanlike)
spawn_kind_def = Rand.Chance(RJWPregnancySettings.humanlike_DNA_from_mother) ? motherKindDef : fatherKindDef;
return spawn_kind_def; return spawn_kind_def;
} }