mirror of
				https://github.com/Shabakur/RJW_Animal_Gene_Inheritance.git
				synced 2024-08-14 22:46:41 +00:00 
			
		
		
		
	Made a patch for insectegg pregnancy
This commit is contained in:
		
							parent
							
								
									ddd55d1400
								
							
						
					
					
						commit
						3d6c84f66f
					
				
					 13 changed files with 121 additions and 19 deletions
				
			
		
							
								
								
									
										
											BIN
										
									
								
								About/Preview.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								About/Preview.png
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 568 KiB  | 
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -14,17 +14,17 @@ namespace RJW_BGS
 | 
			
		|||
        static Class1()
 | 
			
		||||
        {
 | 
			
		||||
            RJWcopy.Racegroupdictbuilder();
 | 
			
		||||
            foreach (RaceGroupDef raceGroupDef2  in DefDatabase<RaceGroupDef>.AllDefs)      
 | 
			
		||||
            {
 | 
			
		||||
            //foreach (RaceGroupDef raceGroupDef2  in DefDatabase<RaceGroupDef>.AllDefs)      
 | 
			
		||||
            //{
 | 
			
		||||
                //Log.Message("defName = " + raceGroupDef2.defName);
 | 
			
		||||
                if (raceGroupDef2.raceNames != null)
 | 
			
		||||
                {
 | 
			
		||||
                    foreach (string race in raceGroupDef2.raceNames)
 | 
			
		||||
                    {
 | 
			
		||||
            //    if (raceGroupDef2.raceNames != null)
 | 
			
		||||
            //    {
 | 
			
		||||
            //        foreach (string race in raceGroupDef2.raceNames)
 | 
			
		||||
            //        {
 | 
			
		||||
                        //Log.Message(race);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            //        }
 | 
			
		||||
            //    }
 | 
			
		||||
           //}
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -85,5 +85,65 @@ namespace RJW_BGS
 | 
			
		|||
            }
 | 
			
		||||
            return genelist;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void AddGenes(Pawn pawn, List<GeneDef> genes)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (GeneDef gene in genes)
 | 
			
		||||
            {
 | 
			
		||||
                pawn.genes.AddGene(gene, false);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void NewGenes(Pawn mother, Pawn dad, Pawn baby)
 | 
			
		||||
        {
 | 
			
		||||
            if (baby.RaceProps.Humanlike)
 | 
			
		||||
            {
 | 
			
		||||
                if (baby.genes == null)
 | 
			
		||||
                {
 | 
			
		||||
                    baby.genes = new Pawn_GeneTracker(baby);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                //Remove the hair and skin genes pawns always start with, should get correct ones from human parent anyway.
 | 
			
		||||
                for (int i = baby.genes.Endogenes.Count - 1; i >= 0; i--)
 | 
			
		||||
                {
 | 
			
		||||
                    baby.genes.RemoveGene(baby.genes.Endogenes[i]);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                List<GeneDef> genes = PregnancyUtility.GetInheritedGenes(dad, mother);
 | 
			
		||||
                List<GeneDef> beastgenes = InheritanceUtility.AnimalInheritedGenes(dad, mother);
 | 
			
		||||
                InheritanceUtility.AddGenes(baby, beastgenes);
 | 
			
		||||
                InheritanceUtility.AddGenes(baby, genes);
 | 
			
		||||
                if(baby.genes.GetFirstEndogeneByCategory(EndogeneCategory.Melanin) == null)
 | 
			
		||||
                {
 | 
			
		||||
                    AddSkinColor(mother, dad, baby);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void AddSkinColor(Pawn mother, Pawn father, Pawn baby)
 | 
			
		||||
        {
 | 
			
		||||
            if (mother != null && mother.genes != null)
 | 
			
		||||
            {
 | 
			
		||||
                GeneDef gene = mother.genes.GetFirstEndogeneByCategory(EndogeneCategory.Melanin);
 | 
			
		||||
                if (gene != null)
 | 
			
		||||
                {
 | 
			
		||||
                    baby.genes.AddGene(gene, false);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else if (father != null && father.genes != null)
 | 
			
		||||
            {
 | 
			
		||||
                GeneDef gene = father.genes.GetFirstEndogeneByCategory(EndogeneCategory.Melanin);
 | 
			
		||||
                if (gene != null)
 | 
			
		||||
                {
 | 
			
		||||
                    baby.genes.AddGene(gene, false);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                Log.Message("Could not find skincolor of " + baby.Name + "'s parents, giving random skincolor.");
 | 
			
		||||
                baby.genes.AddGene(PawnSkinColors.RandomSkinColorGene(baby), false);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,15 +33,16 @@ namespace RJW_BGS
 | 
			
		|||
 | 
			
		||||
                    List<GeneDef> genes = PregnancyUtility.GetInheritedGenes(dad, mother);
 | 
			
		||||
                    List<GeneDef> beastgenes = InheritanceUtility.AnimalInheritedGenes(dad, mother);
 | 
			
		||||
 | 
			
		||||
                    foreach (GeneDef gene in beastgenes)
 | 
			
		||||
                    {
 | 
			
		||||
                        baby.genes.AddGene(gene, false);
 | 
			
		||||
                    }
 | 
			
		||||
                    foreach (GeneDef gene in genes)
 | 
			
		||||
                    {
 | 
			
		||||
                        baby.genes.AddGene(gene, false);
 | 
			
		||||
                    }
 | 
			
		||||
                    InheritanceUtility.AddGenes(baby, beastgenes);
 | 
			
		||||
                    InheritanceUtility.AddGenes(baby, genes);
 | 
			
		||||
                    //foreach (GeneDef gene in beastgenes)
 | 
			
		||||
                    //{
 | 
			
		||||
                    //    baby.genes.AddGene(gene, false);
 | 
			
		||||
                    //}
 | 
			
		||||
                    //foreach (GeneDef gene in genes)
 | 
			
		||||
                    //{
 | 
			
		||||
                    //    baby.genes.AddGene(gene, false);
 | 
			
		||||
                    //}
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										40
									
								
								Source/RJW_BGS/PatchRJWHediffInsect_Egg.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								Source/RJW_BGS/PatchRJWHediffInsect_Egg.cs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,40 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
using System.Reflection.Emit;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using HarmonyLib;
 | 
			
		||||
using rjw;
 | 
			
		||||
using RimWorld;
 | 
			
		||||
using Verse;
 | 
			
		||||
 | 
			
		||||
namespace RJW_BGS
 | 
			
		||||
{
 | 
			
		||||
    [HarmonyPatch(typeof(Hediff_InsectEgg), "GiveBirth")]
 | 
			
		||||
    public static class PatchRJWHediffInsect_Egg
 | 
			
		||||
    {
 | 
			
		||||
        [HarmonyTranspiler]
 | 
			
		||||
        public static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions)
 | 
			
		||||
        {
 | 
			
		||||
            MethodInfo newgenes = AccessTools.Method(typeof(InheritanceUtility), "NewGenes", null, null);
 | 
			
		||||
            FieldInfo implanter = AccessTools.Field(typeof(Hediff_InsectEgg), "implanter");
 | 
			
		||||
            FieldInfo father = AccessTools.Field(typeof(Hediff_InsectEgg), "father");
 | 
			
		||||
 | 
			
		||||
            foreach (CodeInstruction instruction in instructions)
 | 
			
		||||
            {
 | 
			
		||||
                if(instruction.opcode == OpCodes.Call && instruction.operand.ToString() == "Void BabyPostBirth(Verse.Pawn, Verse.Pawn, Verse.Pawn)")
 | 
			
		||||
                {
 | 
			
		||||
                    yield return new CodeInstruction(OpCodes.Ldloc_0, null);
 | 
			
		||||
                    yield return new CodeInstruction(OpCodes.Ldfld, implanter);
 | 
			
		||||
                    yield return new CodeInstruction(OpCodes.Ldarg_0, null);
 | 
			
		||||
                    yield return new CodeInstruction(OpCodes.Ldfld, father);
 | 
			
		||||
                    yield return new CodeInstruction(OpCodes.Ldloc_1, null);
 | 
			
		||||
                    yield return new CodeInstruction(OpCodes.Call, newgenes);
 | 
			
		||||
                }
 | 
			
		||||
                yield return instruction;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -61,6 +61,7 @@
 | 
			
		|||
    <Compile Include="Harmony_Init.cs" />
 | 
			
		||||
    <Compile Include="InheritanceUtility.cs" />
 | 
			
		||||
    <Compile Include="PatchRJWBestialityPregnancyUtility.cs" />
 | 
			
		||||
    <Compile Include="PatchRJWHediffInsect_Egg.cs" />
 | 
			
		||||
    <Compile Include="PatchVanillaPregnancyUtility.cs" />
 | 
			
		||||
    <Compile Include="Properties\AssemblyInfo.cs" />
 | 
			
		||||
    <Compile Include="RaceGeneDef.cs" />
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1 +1 @@
 | 
			
		|||
a5d60a90fbe0915a4fbdad7293220b682c74b0b1
 | 
			
		||||
bbcef32adb57331bca8d9d64ae20e770e4ed1e71
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											Binary file not shown.
										
									
								
							
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue