mirror of
				https://github.com/vegapnk/RJW-Genes.git
				synced 2024-08-15 00:23:31 +00:00 
			
		
		
		
	Changed Image for Insect Breeder Gene, new Approach for Insect Egg Fertilization
This commit is contained in:
		
							parent
							
								
									12c3b20971
								
							
						
					
					
						commit
						6304ccf475
					
				
					 5 changed files with 115 additions and 14 deletions
				
			
		
										
											Binary file not shown.
										
									
								
							| 
						 | 
					@ -15,7 +15,7 @@
 | 
				
			||||||
    <defName>rjw_genes_insectincubator</defName>
 | 
					    <defName>rjw_genes_insectincubator</defName>
 | 
				
			||||||
    <label>InsectIncubator</label>	
 | 
					    <label>InsectIncubator</label>	
 | 
				
			||||||
    <description>Pawns with this gene are able to hold more insect eggs.</description>
 | 
					    <description>Pawns with this gene are able to hold more insect eggs.</description>
 | 
				
			||||||
    <iconPath>World/WorldObjects/Expanding/Mechanoids</iconPath>
 | 
					    <iconPath>Genes/Icons/More_Egg_Space</iconPath>
 | 
				
			||||||
    <displayOrderInCategory>52</displayOrderInCategory>
 | 
					    <displayOrderInCategory>52</displayOrderInCategory>
 | 
				
			||||||
	<displayCategory>rjw_genes_breeding</displayCategory>
 | 
						<displayCategory>rjw_genes_breeding</displayCategory>
 | 
				
			||||||
  </GeneDef>
 | 
					  </GeneDef>
 | 
				
			||||||
| 
						 | 
					@ -24,7 +24,7 @@
 | 
				
			||||||
    <defName>rjw_genes_insectbreeder</defName>
 | 
					    <defName>rjw_genes_insectbreeder</defName>
 | 
				
			||||||
    <label>InsectBreeder</label>	
 | 
					    <label>InsectBreeder</label>	
 | 
				
			||||||
    <description>Pawns with this gene are able to fertilize eggs with any fertile penis.</description>
 | 
					    <description>Pawns with this gene are able to fertilize eggs with any fertile penis.</description>
 | 
				
			||||||
    <iconPath>Genes/Icons/More_Egg_Space</iconPath>
 | 
					    <iconPath>World/WorldObjects/Expanding/Insects</iconPath>
 | 
				
			||||||
    <displayOrderInCategory>53</displayOrderInCategory>
 | 
					    <displayOrderInCategory>53</displayOrderInCategory>
 | 
				
			||||||
	  <displayCategory>rjw_genes_breeding</displayCategory>
 | 
						  <displayCategory>rjw_genes_breeding</displayCategory>
 | 
				
			||||||
  </GeneDef>
 | 
					  </GeneDef>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										99
									
								
								Source/Genes/Breeding/Patch_EggFertilization.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								Source/Genes/Breeding/Patch_EggFertilization.cs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,99 @@
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using HarmonyLib;
 | 
				
			||||||
 | 
					using Verse;
 | 
				
			||||||
 | 
					using rjw;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace RJW_Genes
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// 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
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
 | 
					    [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<Hediff_InsectEgg> getEggsforPawn(Pawn pawn)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            List<Hediff_InsectEgg> eggs = new List<Hediff_InsectEgg>();
 | 
				
			||||||
 | 
					            pawn.health.hediffSet.GetHediffs(ref eggs);
 | 
				
			||||||
 | 
					            foreach (var egg in eggs)
 | 
				
			||||||
 | 
					                egg.Fertilize(pawn);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return eggs;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -23,16 +23,17 @@ namespace RJW_Genes
 | 
				
			||||||
                    if (!gene.Overridden)
 | 
					                    if (!gene.Overridden)
 | 
				
			||||||
                        return gene.def;
 | 
					                        return gene.def;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
                
 | 
					            return null;
 | 
				
			||||||
            return GeneDefOf.rjw_genes_human_genitalia;
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public static HediffDef GetPenisForGene(GeneDef gene)
 | 
					        public static HediffDef GetPenisForGene(GeneDef gene)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            if (gene == null)
 | 
				
			||||||
 | 
					                return Genital_Helper.average_penis;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            switch (gene.defName)
 | 
					            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_equine_genitalia":      return Genital_Helper.equine_penis;
 | 
				
			||||||
                case "rjw_genes_canine_genitalia":      return Genital_Helper.canine_penis;
 | 
					                case "rjw_genes_canine_genitalia":      return Genital_Helper.canine_penis;
 | 
				
			||||||
                case "rjw_genes_feline_genitalia":      return Genital_Helper.feline_penis;
 | 
					                case "rjw_genes_feline_genitalia":      return Genital_Helper.feline_penis;
 | 
				
			||||||
| 
						 | 
					@ -48,9 +49,11 @@ namespace RJW_Genes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public static HediffDef GetVaginaForGene(GeneDef gene)
 | 
					        public static HediffDef GetVaginaForGene(GeneDef gene)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            if (gene == null)
 | 
				
			||||||
 | 
					                return Genital_Helper.average_vagina;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            switch (gene.defName)
 | 
					            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_equine_genitalia": return Genital_Helper.equine_vagina;
 | 
				
			||||||
                case "rjw_genes_canine_genitalia": return Genital_Helper.canine_vagina;
 | 
					                case "rjw_genes_canine_genitalia": return Genital_Helper.canine_vagina;
 | 
				
			||||||
                case "rjw_genes_feline_genitalia": return Genital_Helper.feline_vagina;
 | 
					                case "rjw_genes_feline_genitalia": return Genital_Helper.feline_vagina;
 | 
				
			||||||
| 
						 | 
					@ -65,10 +68,11 @@ namespace RJW_Genes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public static HediffDef GetAnusForGene(GeneDef gene)
 | 
					        public static HediffDef GetAnusForGene(GeneDef gene)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            if (gene == null)
 | 
				
			||||||
 | 
					                return Genital_Helper.average_anus;
 | 
				
			||||||
            switch (gene.defName)
 | 
					            switch (gene.defName)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                //TODO: Do I want the default to be generic or average for feline,equine and canine?
 | 
					                //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_equine_genitalia": return Genital_Helper.average_anus;
 | 
				
			||||||
                case "rjw_genes_canine_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;
 | 
					                case "rjw_genes_feline_genitalia": return Genital_Helper.average_anus;
 | 
				
			||||||
| 
						 | 
					@ -83,10 +87,12 @@ namespace RJW_Genes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public static HediffDef GetBreastsForGene(GeneDef gene)
 | 
					        public static HediffDef GetBreastsForGene(GeneDef gene)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            if (gene == null)
 | 
				
			||||||
 | 
					                return Genital_Helper.average_breasts;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            switch (gene.defName)
 | 
					            switch (gene.defName)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                //TODO: Do I want the default to be generic or average?
 | 
					                //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_equine_genitalia": return Genital_Helper.average_breasts;
 | 
				
			||||||
                case "rjw_genes_canine_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;
 | 
					                case "rjw_genes_feline_genitalia": return Genital_Helper.average_breasts;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -70,11 +70,12 @@
 | 
				
			||||||
    <Compile Include="Animal_Inheritance\RJWcopies.cs" />
 | 
					    <Compile Include="Animal_Inheritance\RJWcopies.cs" />
 | 
				
			||||||
    <Compile Include="Animal_Inheritance\RJW_BGSSettings.cs" />
 | 
					    <Compile Include="Animal_Inheritance\RJW_BGSSettings.cs" />
 | 
				
			||||||
    <Compile Include="Animal_Inheritance\RJW_BGSSettingsController.cs" />
 | 
					    <Compile Include="Animal_Inheritance\RJW_BGSSettingsController.cs" />
 | 
				
			||||||
    <Compile Include="Animal_Inheritance\GeneChance.cs" />
 | 
					    <Compile Include="Animal_Inheritance\BestialityGeneInheritanceDef.cs" />
 | 
				
			||||||
    <Compile Include="GeneDefOf.cs" />
 | 
					    <Compile Include="GeneDefOf.cs" />
 | 
				
			||||||
    <Compile Include="Genes\Breeding\Gene_MechBreeder.cs" />
 | 
					    <Compile Include="Genes\Breeding\Gene_MechBreeder.cs" />
 | 
				
			||||||
    <Compile Include="Genes\Breeding\PatchMechBirth.cs" />
 | 
					    <Compile Include="Genes\Breeding\PatchMechBirth.cs" />
 | 
				
			||||||
    <Compile Include="Genes\Breeding\PatchPawnExtensions.cs" />
 | 
					    <Compile Include="Genes\Breeding\PatchPawnExtensions.cs" />
 | 
				
			||||||
 | 
					    <Compile Include="Genes\Breeding\Patch_EggFertilization.cs" />
 | 
				
			||||||
    <Compile Include="Genes\Breeding\PatchPregnancyHelper.cs" />
 | 
					    <Compile Include="Genes\Breeding\PatchPregnancyHelper.cs" />
 | 
				
			||||||
    <Compile Include="Genes\Cum\CumUtility.cs" />
 | 
					    <Compile Include="Genes\Cum\CumUtility.cs" />
 | 
				
			||||||
    <Compile Include="Genes\Cum\Gene_VeryMuchCum.cs" />
 | 
					    <Compile Include="Genes\Cum\Gene_VeryMuchCum.cs" />
 | 
				
			||||||
| 
						 | 
					@ -99,10 +100,6 @@
 | 
				
			||||||
    <Compile Include="Genes\GenitaliaSize\Gene_BigBreasts.cs" />
 | 
					    <Compile Include="Genes\GenitaliaSize\Gene_BigBreasts.cs" />
 | 
				
			||||||
    <Compile Include="Genes\GenitaliaSize\Gene_LooseAnus.cs" />
 | 
					    <Compile Include="Genes\GenitaliaSize\Gene_LooseAnus.cs" />
 | 
				
			||||||
    <Compile Include="Genes\GenitaliaSize\Gene_LooseFemaleGenitalia.cs" />
 | 
					    <Compile Include="Genes\GenitaliaSize\Gene_LooseFemaleGenitalia.cs" />
 | 
				
			||||||
    <Compile Include="Genes\GenitaliaSize\Gene_NormalFemaleGenitalia.cs" />
 | 
					 | 
				
			||||||
    <Compile Include="Genes\GenitaliaSize\Gene_NormalAnus.cs" />
 | 
					 | 
				
			||||||
    <Compile Include="Genes\GenitaliaSize\Gene_NormalBreasts.cs" />
 | 
					 | 
				
			||||||
    <Compile Include="Genes\GenitaliaSize\Gene_NormalMaleGenitalia.cs" />
 | 
					 | 
				
			||||||
    <Compile Include="Genes\GenitaliaSize\Gene_TightAnus.cs" />
 | 
					    <Compile Include="Genes\GenitaliaSize\Gene_TightAnus.cs" />
 | 
				
			||||||
    <Compile Include="Genes\GenitaliaSize\Gene_SmallBreasts.cs" />
 | 
					    <Compile Include="Genes\GenitaliaSize\Gene_SmallBreasts.cs" />
 | 
				
			||||||
    <Compile Include="Genes\GenitaliaSize\Gene_TightFemaleGenitalia.cs" />
 | 
					    <Compile Include="Genes\GenitaliaSize\Gene_TightFemaleGenitalia.cs" />
 | 
				
			||||||
| 
						 | 
					@ -116,7 +113,6 @@
 | 
				
			||||||
    <Compile Include="Genes\Genitalia\Gene_OvipositorGenitalia.cs" />
 | 
					    <Compile Include="Genes\Genitalia\Gene_OvipositorGenitalia.cs" />
 | 
				
			||||||
    <Compile Include="Genes\Genitalia\Gene_DemonicGenitalia.cs" />
 | 
					    <Compile Include="Genes\Genitalia\Gene_DemonicGenitalia.cs" />
 | 
				
			||||||
    <Compile Include="Genes\Genitalia\Gene_EquineGenitalia.cs" />
 | 
					    <Compile Include="Genes\Genitalia\Gene_EquineGenitalia.cs" />
 | 
				
			||||||
    <Compile Include="Genes\Genitalia\Gene_HumanGenitalia.cs" />
 | 
					 | 
				
			||||||
    <Compile Include="Genes\Genitalia\GenitaliaChanger.cs" />
 | 
					    <Compile Include="Genes\Genitalia\GenitaliaChanger.cs" />
 | 
				
			||||||
    <Compile Include="Genes\RJW_Gene.cs" />
 | 
					    <Compile Include="Genes\RJW_Gene.cs" />
 | 
				
			||||||
    <Compile Include="Genes\Genitalia\GenitaliaUtility.cs" />
 | 
					    <Compile Include="Genes\Genitalia\GenitaliaUtility.cs" />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue