From 5d35102338233abe670e7a4429e88754cd054db1 Mon Sep 17 00:00:00 2001 From: Vegapnk Date: Sun, 4 Jun 2023 15:46:30 +0200 Subject: [PATCH 1/3] Hardened Fertilin per Ingestion, should help with #39 --- Source/Genes/GeneUtility.cs | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/Source/Genes/GeneUtility.cs b/Source/Genes/GeneUtility.cs index fa23fe7..c46e6e1 100644 --- a/Source/Genes/GeneUtility.cs +++ b/Source/Genes/GeneUtility.cs @@ -17,23 +17,29 @@ namespace RJW_Genes public static void OffsetLifeForce(IGeneResourceDrain drain, float offset) { - float old_value = drain.Resource.Value; - drain.Resource.Value += offset; - PostOffSetLifeForce(drain, old_value); + if (drain.Resource != null && drain.Resource.Active) { + float old_value = drain.Resource.Value; + drain.Resource.Value += offset; + PostOffSetLifeForce(drain, old_value); + } } public static void PostOffSetLifeForce(IGeneResourceDrain drain, float old_value) { - if (old_value > 0.2f && drain.Resource.Value <= 0.2f) - { - //TODO: Mood debuff - } - else if (old_value > 0f && drain.Resource.Value <= 0f) + + if (drain.Resource != null && drain.Resource.Active) { - Pawn pawn = drain.Pawn; - if (!drain.Pawn.health.hediffSet.HasHediff(HediffDefOf.rjw_genes_fertilin_craving)) + if (old_value > 0.2f && drain.Resource.Value <= 0.2f) { - drain.Pawn.health.AddHediff(HediffDefOf.rjw_genes_fertilin_craving); + //TODO: Mood debuff + } + else if (old_value > 0f && drain.Resource.Value <= 0f) + { + Pawn pawn = drain.Pawn; + if (!drain.Pawn.health.hediffSet.HasHediff(HediffDefOf.rjw_genes_fertilin_craving)) + { + drain.Pawn.health.AddHediff(HediffDefOf.rjw_genes_fertilin_craving); + } } } } From 1471eeea62becec357675d9aa14c182b426a49f6 Mon Sep 17 00:00:00 2001 From: Vegapnk Date: Sun, 4 Jun 2023 16:48:45 +0200 Subject: [PATCH 2/3] Notes about Gestation and Fertilization, #38 --- Source/Genes/Hive/Genes/Gene_InsectIncubator.cs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/Source/Genes/Hive/Genes/Gene_InsectIncubator.cs b/Source/Genes/Hive/Genes/Gene_InsectIncubator.cs index 559ec2c..5173dd0 100644 --- a/Source/Genes/Hive/Genes/Gene_InsectIncubator.cs +++ b/Source/Genes/Hive/Genes/Gene_InsectIncubator.cs @@ -33,6 +33,9 @@ namespace RJW_Genes { List eggs = new List(); pawn.health.hediffSet.GetHediffs(ref eggs); + // This part works as intended and shows Non-Human Eggs too + //if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"Gene_InsectIncubator: Found {eggs.Count} Hediff_InsectEgg in {pawn}"); + foreach (Hediff_InsectEgg egg in eggs) { @@ -42,7 +45,17 @@ namespace RJW_Genes if (!egg.fertilized && egg.implanter != null) { egg.Fertilize(pawn); - if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"Gene_InsectIncubator: fertilized egg {egg} in {pawn}"); + // DevNote Issue 38: Sometimes Eggs are not fertilized here, because the normal Fertilize Function is called which has an upper Limit on Gestation. + // I will not do anything about it here, maybe upstream, but I print here. + if (RJW_Genes_Settings.rjw_genes_detailed_debug) + { + if (egg.fertilized) + ModLog.Message($"Gene_InsectIncubator: fertilized egg {egg} in {pawn}"); + else if (egg.GestationProgress > 0.5) + ModLog.Message($"Gene_InsectIncubator: Failed to fertilize {egg} in {pawn} due to high gestation progress"); + else + ModLog.Message($"Gene_InsectIncubator: failed to fertiliz egg {egg} in {pawn}"); + } } // DevNote: There is an issue with Eggs reaching too much gestation progress (>100%), which causes DownStream bugs. To avoid this, there are some extra checks in place. else if (egg.fertilized && egg.GestationProgress <= .93) From 2ad91a10760bc8318f3877baa8cfc45e4018ec45 Mon Sep 17 00:00:00 2001 From: Vegapnk Date: Sun, 4 Jun 2023 17:03:11 +0200 Subject: [PATCH 3/3] Letter on Queen Birth --- Source/Genes/Hive/Helpers/HiveBirthLogic.cs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Source/Genes/Hive/Helpers/HiveBirthLogic.cs b/Source/Genes/Hive/Helpers/HiveBirthLogic.cs index faf8534..d5ca5f0 100644 --- a/Source/Genes/Hive/Helpers/HiveBirthLogic.cs +++ b/Source/Genes/Hive/Helpers/HiveBirthLogic.cs @@ -50,8 +50,7 @@ namespace RJW_Genes { pawn.genes.SetXenotype(queenDef); if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"{pawn} born as a new queen with xenotype {queenDef.defName} ({hiveOffspringChanceDef.queenChance * 100}% chance,rolled {roll})"); - // TODO: Make a letter ? Letter doesn't show :( - Find.LetterStack.ReceiveLetter("New Queen", "A new Queen was born! Make sure to adress inheritance before the new queen reaches adolesence.", LetterDefOf.BabyBirth, (LookTargets)(Thing)pawn); + MakeQueenBornLetter(pawn); } // Case 2.b: New Drone born else if (roll < hiveOffspringChanceDef.droneChance + hiveOffspringChanceDef.queenChance) @@ -115,6 +114,16 @@ namespace RJW_Genes return null; } + public static void MakeQueenBornLetter(Pawn bornQueen) + { + if (bornQueen == null) return; + + var letter= LetterMaker.MakeLetter( + "New Queen", "A new Queen was born! Make sure to adress inheritance before the new queen reaches adolesence.", LetterDefOf.NeutralEvent, bornQueen + ); + //letter.Start(); + Find.LetterStack.ReceiveLetter(letter); + } /// /// Looks up if there is a Xenotype with Queen-Gene for the pawns parents.