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()
|
static Class1()
|
||||||
{
|
{
|
||||||
RJWcopy.Racegroupdictbuilder();
|
RJWcopy.Racegroupdictbuilder();
|
||||||
foreach (RaceGroupDef raceGroupDef2 in DefDatabase<RaceGroupDef>.AllDefs)
|
//foreach (RaceGroupDef raceGroupDef2 in DefDatabase<RaceGroupDef>.AllDefs)
|
||||||
{
|
//{
|
||||||
//Log.Message("defName = " + raceGroupDef2.defName);
|
//Log.Message("defName = " + raceGroupDef2.defName);
|
||||||
if (raceGroupDef2.raceNames != null)
|
// if (raceGroupDef2.raceNames != null)
|
||||||
{
|
// {
|
||||||
foreach (string race in raceGroupDef2.raceNames)
|
// foreach (string race in raceGroupDef2.raceNames)
|
||||||
{
|
// {
|
||||||
//Log.Message(race);
|
//Log.Message(race);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,5 +85,65 @@ namespace RJW_BGS
|
||||||
}
|
}
|
||||||
return genelist;
|
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> genes = PregnancyUtility.GetInheritedGenes(dad, mother);
|
||||||
List<GeneDef> beastgenes = InheritanceUtility.AnimalInheritedGenes(dad, mother);
|
List<GeneDef> beastgenes = InheritanceUtility.AnimalInheritedGenes(dad, mother);
|
||||||
|
InheritanceUtility.AddGenes(baby, beastgenes);
|
||||||
foreach (GeneDef gene in beastgenes)
|
InheritanceUtility.AddGenes(baby, genes);
|
||||||
{
|
//foreach (GeneDef gene in beastgenes)
|
||||||
baby.genes.AddGene(gene, false);
|
//{
|
||||||
}
|
// baby.genes.AddGene(gene, false);
|
||||||
foreach (GeneDef gene in genes)
|
//}
|
||||||
{
|
//foreach (GeneDef gene in genes)
|
||||||
baby.genes.AddGene(gene, false);
|
//{
|
||||||
}
|
// 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="Harmony_Init.cs" />
|
||||||
<Compile Include="InheritanceUtility.cs" />
|
<Compile Include="InheritanceUtility.cs" />
|
||||||
<Compile Include="PatchRJWBestialityPregnancyUtility.cs" />
|
<Compile Include="PatchRJWBestialityPregnancyUtility.cs" />
|
||||||
|
<Compile Include="PatchRJWHediffInsect_Egg.cs" />
|
||||||
<Compile Include="PatchVanillaPregnancyUtility.cs" />
|
<Compile Include="PatchVanillaPregnancyUtility.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="RaceGeneDef.cs" />
|
<Compile Include="RaceGeneDef.cs" />
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
a5d60a90fbe0915a4fbdad7293220b682c74b0b1
|
bbcef32adb57331bca8d9d64ae20e770e4ed1e71
|
||||||
|
|
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue