diff --git a/Common/Assemblies/Rjw-Genes.dll b/Common/Assemblies/Rjw-Genes.dll
index 5e1c60b..bd8049f 100644
Binary files a/Common/Assemblies/Rjw-Genes.dll and b/Common/Assemblies/Rjw-Genes.dll differ
diff --git a/Common/Defs/Genes/GeneDefs_Breeding.xml b/Common/Defs/Genes/GeneDefs_Breeding.xml
index 7779b7f..fa65c52 100644
--- a/Common/Defs/Genes/GeneDefs_Breeding.xml
+++ b/Common/Defs/Genes/GeneDefs_Breeding.xml
@@ -15,7 +15,7 @@
rjw_genes_insectincubator
Pawns with this gene are able to hold more insect eggs.
- World/WorldObjects/Expanding/Mechanoids
+ Genes/Icons/More_Egg_Space
52
rjw_genes_breeding
@@ -24,7 +24,7 @@
rjw_genes_insectbreeder
Pawns with this gene are able to fertilize eggs with any fertile penis.
- Genes/Icons/More_Egg_Space
+ World/WorldObjects/Expanding/Insects
53
rjw_genes_breeding
diff --git a/Source/Genes/Breeding/Patch_EggFertilization.cs b/Source/Genes/Breeding/Patch_EggFertilization.cs
new file mode 100644
index 0000000..46ec598
--- /dev/null
+++ b/Source/Genes/Breeding/Patch_EggFertilization.cs
@@ -0,0 +1,99 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using HarmonyLib;
+using Verse;
+using rjw;
+
+namespace RJW_Genes
+{
+ ///
+ /// This Class patches the AfterSexUtility to also fertilize eggs if Pawn A has "InsectBreeder" and Pawn B has Insect Eggs.
+ /// Patched Class is https://gitgud.io/Ed86/rjw/-/blob/master/1.4/Source/Common/Helpers/SexUtility.cs
+ ///
+ /// Normal Egg-Pregnancy logic is in https://gitgud.io/Ed86/rjw/-/blob/master/1.4/Source/Modules/Pregnancy/Pregnancy_Helper.cs
+ ///
+ [HarmonyPatch(typeof(SexUtility), "Aftersex")]
+ static class PatchEggFertilizationHelper
+ {
+ [HarmonyTranspiler]
+ public static void Postfix(SexProps props)
+ {
+ // Only Fertilize on vaginal / anal sex
+ if (!(props.sexType == xxx.rjwSextype.Vaginal || props.sexType == xxx.rjwSextype.Anal))
+ {
+ return;
+ }
+
+
+ if (canDoEggFertilization(props.pawn, props.partner))
+ {
+ // Pawn has gene and Partner has eggs
+ if (props.pawn.genes.GenesListForReading.Any(x => x.def == GeneDefOf.rjw_genes_insectbreeder) && !getEggsforPawn(props.partner).NullOrEmpty())
+ {
+ Pawn eggHolder = props.partner;
+ Pawn impregnator = props.pawn;
+
+ foreach (Hediff_InsectEgg egg in getEggsforPawn(eggHolder))
+ {
+ if (!egg.fertilized)
+ egg.Fertilize(impregnator);
+ }
+ }
+
+ // Partner has gene and Pawn has eggs
+ if (props.partner.genes.GenesListForReading.Any(x => x.def == GeneDefOf.rjw_genes_insectbreeder) && !getEggsforPawn(props.pawn).NullOrEmpty())
+ {
+ Pawn eggHolder = props.pawn;
+ Pawn impregnator = props.partner;
+
+ foreach (Hediff_InsectEgg egg in getEggsforPawn(eggHolder))
+ {
+ if (!egg.fertilized)
+ egg.Fertilize(impregnator);
+ }
+ }
+
+
+ }
+ }
+
+
+ private static Boolean canDoEggFertilization(Pawn a, Pawn b)
+ {
+
+ // No Partner / Other Errors
+ if (a != null || b != null)
+ return false;
+ // None of the pawns has the relevant gene
+ if (!a.genes.GenesListForReading.Any(x => x.def == GeneDefOf.rjw_genes_insectbreeder) && !b.genes.GenesListForReading.Any(x => x.def == GeneDefOf.rjw_genes_insectbreeder))
+ return false;
+ // None of the pawns has eggs
+ if (getEggsforPawn(a).NullOrEmpty() && getEggsforPawn(b).NullOrEmpty())
+ return false;
+
+ // A has gene and B has eggs
+ if (a.genes.GenesListForReading.Any(x => x.def == GeneDefOf.rjw_genes_insectbreeder) && !getEggsforPawn(b).NullOrEmpty())
+ {
+ return true;
+ }
+ // B has gene and A has eggs
+ if (b.genes.GenesListForReading.Any(x => x.def == GeneDefOf.rjw_genes_insectbreeder) && !getEggsforPawn(a).NullOrEmpty())
+ {
+ return true;
+ }
+ // Any other case: Do nothing
+ return false;
+ }
+
+ private static List getEggsforPawn(Pawn pawn)
+ {
+ List eggs = new List();
+ pawn.health.hediffSet.GetHediffs(ref eggs);
+ foreach (var egg in eggs)
+ egg.Fertilize(pawn);
+
+ return eggs;
+ }
+ }
+}
diff --git a/Source/Genes/Genitalia/GenitaliaUtility.cs b/Source/Genes/Genitalia/GenitaliaUtility.cs
index e11f06f..4dc289a 100644
--- a/Source/Genes/Genitalia/GenitaliaUtility.cs
+++ b/Source/Genes/Genitalia/GenitaliaUtility.cs
@@ -23,16 +23,17 @@ namespace RJW_Genes
if (!gene.Overridden)
return gene.def;
}
-
- return GeneDefOf.rjw_genes_human_genitalia;
+ return null;
}
public static HediffDef GetPenisForGene(GeneDef gene)
{
+ if (gene == null)
+ return Genital_Helper.average_penis;
+
switch (gene.defName)
{
- case "rjw_genes_human_genitalia": return Genital_Helper.average_penis;
case "rjw_genes_equine_genitalia": return Genital_Helper.equine_penis;
case "rjw_genes_canine_genitalia": return Genital_Helper.canine_penis;
case "rjw_genes_feline_genitalia": return Genital_Helper.feline_penis;
@@ -48,9 +49,11 @@ namespace RJW_Genes
public static HediffDef GetVaginaForGene(GeneDef gene)
{
+ if (gene == null)
+ return Genital_Helper.average_vagina;
+
switch (gene.defName)
{
- case "rjw_genes_human_genitalia": return Genital_Helper.average_vagina;
case "rjw_genes_equine_genitalia": return Genital_Helper.equine_vagina;
case "rjw_genes_canine_genitalia": return Genital_Helper.canine_vagina;
case "rjw_genes_feline_genitalia": return Genital_Helper.feline_vagina;
@@ -65,10 +68,11 @@ namespace RJW_Genes
public static HediffDef GetAnusForGene(GeneDef gene)
{
+ if (gene == null)
+ return Genital_Helper.average_anus;
switch (gene.defName)
{
//TODO: Do I want the default to be generic or average for feline,equine and canine?
- case "rjw_genes_human_genitalia": return Genital_Helper.average_anus;
case "rjw_genes_equine_genitalia": return Genital_Helper.average_anus;
case "rjw_genes_canine_genitalia": return Genital_Helper.average_anus;
case "rjw_genes_feline_genitalia": return Genital_Helper.average_anus;
@@ -83,10 +87,12 @@ namespace RJW_Genes
public static HediffDef GetBreastsForGene(GeneDef gene)
{
+ if (gene == null)
+ return Genital_Helper.average_breasts;
+
switch (gene.defName)
{
//TODO: Do I want the default to be generic or average?
- case "rjw_genes_human_genitalia": return Genital_Helper.average_breasts;
case "rjw_genes_equine_genitalia": return Genital_Helper.average_breasts;
case "rjw_genes_canine_genitalia": return Genital_Helper.average_breasts;
case "rjw_genes_feline_genitalia": return Genital_Helper.average_breasts;
diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj
index 4f0beb0..94d2403 100644
--- a/Source/Rjw-Genes.csproj
+++ b/Source/Rjw-Genes.csproj
@@ -70,11 +70,12 @@
-
+
+
@@ -99,10 +100,6 @@
-
-
-
-
@@ -116,7 +113,6 @@
-