diff --git a/Common/Assemblies/Rjw-Genes.dll b/Common/Assemblies/Rjw-Genes.dll index c4c89b1..7c86465 100644 Binary files a/Common/Assemblies/Rjw-Genes.dll and b/Common/Assemblies/Rjw-Genes.dll differ diff --git a/Common/Defs/Xenotypes/Succubus.xml b/Common/Defs/Xenotypes/Succubus.xml index 66e73b6..b3967c6 100644 --- a/Common/Defs/Xenotypes/Succubus.xml +++ b/Common/Defs/Xenotypes/Succubus.xml @@ -28,7 +28,6 @@
  • rjw_genes_female_only
  • rjw_genes_lifeforce
  • rjw_genes_lifeforce_drain
  • -
  • rjw_genes_cum_eater
  • rjw_genes_vaginal_absorber
  • rjw_genes_anal_absorber
  • diff --git a/Source/Genes/Life_Force/Patch_Vanilla_Inheritance_Fertilin.cs b/Source/Genes/Life_Force/Patch_Vanilla_Inheritance_Fertilin.cs new file mode 100644 index 0000000..94c427f --- /dev/null +++ b/Source/Genes/Life_Force/Patch_Vanilla_Inheritance_Fertilin.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using HarmonyLib; +using RimWorld; +using Verse; + +namespace RJW_Genes +{ + /// + /// This Patch is applied to add a absorption gene for fertilin if it has none, but it does have the fertilin gene + /// First tries to get one from the parents else chooses one of them at random + /// the genes are determined and "simply added". + /// + [HarmonyPatch(typeof(PregnancyUtility), "GetInheritedGeneSet", new Type[] + { + typeof(Pawn), + typeof(Pawn), + //typeof(bool) + } + )] + public static class PatchVanillaPregnancyFertilin + { + [HarmonyPostfix] + public static void InheritedGenes(Pawn father, Pawn mother, ref GeneSet __result) + { + //Also make a setting for this + if (__result.GenesListForReading.Contains(GeneDefOf.rjw_genes_lifeforce)) + { + List gene_list = __result.GenesListForReading; + + //If no absorption gene get one from the parents, else a random one + if(!(gene_list.Contains(GeneDefOf.rjw_genes_drainer) || gene_list.Contains(GeneDefOf.rjw_genes_cum_eater) + || gene_list.Contains(GeneDefOf.rjw_genes_vaginal_absorber) || gene_list.Contains(GeneDefOf.rjw_genes_anal_absorber))) + { + List absorption_genes_list = new List { GeneDefOf.rjw_genes_drainer, GeneDefOf.rjw_genes_cum_eater + , GeneDefOf.rjw_genes_vaginal_absorber, GeneDefOf.rjw_genes_anal_absorber }; + List absorption_genes_parents = new List(); + foreach (GeneDef geneDef in absorption_genes_list) + { + if(mother.genes != null && mother.genes.HasGene(geneDef)) + { + absorption_genes_parents.Add(geneDef); + } + if (father.genes != null && father.genes.HasGene(geneDef)) + { + absorption_genes_parents.Add(geneDef); + } + } + if (!absorption_genes_parents.NullOrEmpty()) + { + __result.AddGene(absorption_genes_parents.RandomElement()); + } + else + { + __result.AddGene(absorption_genes_list.RandomElement()); + } + } + } + } + } +} diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj index 165662b..f7ab5e9 100644 --- a/Source/Rjw-Genes.csproj +++ b/Source/Rjw-Genes.csproj @@ -141,6 +141,7 @@ +