Compare commits

..

3 commits

Author SHA1 Message Date
vegapnk
1ebc75dbfe
Merge pull request #3 from Shabakur/main
Added animal inheritance to RJW-genes code
2022-12-18 09:55:45 +01:00
Shabakur
33c0fa3e3b Modified how racegenedefs are formatted 2022-12-17 20:52:10 +01:00
Shabakur
33a37f26de Added animal inheritance to RJW-genes code 2022-12-01 15:29:26 +01:00
17 changed files with 778 additions and 9 deletions

Binary file not shown.

View file

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<RJW_BGS.RaceGeneDef Name="Insect_base" Abstract="True">
<defName>Insect_base</defName>
<genes>
<li>
<defName>AG_InsectBlood</defName>
<chance>0.5</chance>
</li>
<li>
<defName>rjw_genes_ovipositor_genitalia</defName>
<chance>0.5</chance>
</li>
</genes>
</RJW_BGS.RaceGeneDef>
<RJW_BGS.RaceGeneDef Name="Slime_base" Abstract="True">
<defName>Slime_base</defName>
<genes>
<li>
<defName>AG_SlimeBlood</defName>
<chance>0.5</chance>
</li>
<li>
<defName>rjw_genes_slime_genitalia</defName>
<chance>0.5</chance>
</li>
</genes>
</RJW_BGS.RaceGeneDef>
</Defs>

View file

@ -0,0 +1,116 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<RJW_BGS.RaceGeneDef Name = "Canine">
<defName>Canine</defName>
<raceGroup>Canine_Group</raceGroup>
<genes>
<li>
<defName>Ears_Floppy</defName>
<chance>0.9</chance>
</li>
</genes>
</RJW_BGS.RaceGeneDef>
<RJW_BGS.RaceGeneDef>
<defName>Insect</defName>
<raceGroup>Insect_Group</raceGroup>
<genes>
<li>
<defName>Beauty_Ugly</defName>
<chance>0.5</chance>
</li>
</genes>
</RJW_BGS.RaceGeneDef>
<RJW_BGS.RaceGeneDef>
<defName>Feline</defName>
<raceGroup>Feline_Group</raceGroup>
<genes>
<li>
<defName>Ears_Cat</defName>
<chance>0.9</chance>
</li>
<li>
<defName>Sleepy</defName>
<chance>0.25</chance>
</li>
<li>
<defName>DarkVision</defName>
<chance>0.25</chance>
</li>
</genes>
</RJW_BGS.RaceGeneDef>
<!--
<RJW_BGS.RaceGeneDef>
<defName>Equine</defName>
<raceGroup>Equine_Group</raceGroup>
<genes>
<li>
<defName>StrongStomach</defName>
<chance>0.5</chance>
</li>
</genes>
</RJW_BGS.RaceGeneDef>
-->
<RJW_BGS.RaceGeneDef>
<defName>Dragon</defName>
<raceGroup>Dragon_Group</raceGroup>
<genes>
<li>
<defName>Unstoppable</defName>
<chance>0.25</chance>
</li>
<li>
<defName>Headbone_CenterHorn</defName>
<chance>0.9</chance>
</li>
</genes>
</RJW_BGS.RaceGeneDef>
<RJW_BGS.RaceGeneDef>
<defName>Rodent</defName>
<raceGroup>Rodent_Group</raceGroup>
<genes>
<li>
<defName>Fertile</defName>
<chance>0.25</chance>
</li>
</genes>
</RJW_BGS.RaceGeneDef>
<RJW_BGS.RaceGeneDef>
<defName>Racoon</defName>
<raceGroup>Raccon_Group</raceGroup>
<genes>
<li>
<defName>StrongStomach</defName>
<chance>0.5</chance>
</li>
</genes>
</RJW_BGS.RaceGeneDef>
<!--
<RJW_BGS.RaceGeneDef>
<defName>Needle</defName>
<raceGroup>Needle_Group</raceGroup>
<genes>
<li>
<defName>StrongStomach</defName>
<chance>0.5</chance>
</li>
</genes>
</RJW_BGS.RaceGeneDef>
-->
<!--
<RJW_BGS.RaceGeneDef>
<defName>Hemi</defName>
<raceGroup>Hemi_Group</raceGroup>
<genes>
<li>
<defName>StrongStomach</defName>
<chance>0.5</chance>
</li>
</genes>
</RJW_BGS.RaceGeneDef>
-->
</Defs>

View file

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<!--
<RJW_BGS.RaceGeneDef>
<defName>Canine</defName>
defName can be anything you want, as long as it is unique
<raceGroup>Canine_Group</raceGroup>
RJW.Racegroupdef, all animals in the raceGroup will be part of this group, RJW race support uses this so those can be used to quickly add a group
<raceNames>
<li> </li>
</raceNames>
For more direct control you can use raceNames directly. Use the defName of the animal. Can also use modded animals.
<pawnKindNames>
<li> </li>
</pawnKindNames>
For even more direct control you can use pawnKindNames.
The RaceGeneDef for an animal will first be decided by if it is in the pawnkindNames, after that racenames and lastly racegroup,
so if there is for a wolf a RaceGeneDef with the canine group and a second which has wolf under raceNames it will always use the second one to determine
which genes can be inherited
<genes>
<li>
<defName>Ears_Floppy</defName>
<chance>0.5</chance>
</li>
<li>
<defName>rjw_genes_slime_genitalia</defName> You can add modded genes which will be ignored if the mod is inactive.
<chance>0.5</chance>
</li>
</genes>
For each gene you need to find the defname and give it a chance to appear. Each gene is rolled independently.
</RJW_BGS.RaceGeneDef>
-->
<!-- You can use parents to have animals get specific genes in addition to the group. So warg children will have a chance for Ears_Floppy, rjw_genes_slime_genitalia and StrongStomach
<RJW_BGS.RaceGeneDef ParentName = "Canine">
<defName>Warg</defName>
<raceNames>
<li>Warg</li>
</raceNames>
<genes>
<li>
<defName>StrongStomach</defName>
<chance>0.5</chance>
</li>
</genes>
</RJW_BGS.RaceGeneDef>
-->
</Defs>

View file

@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using rjw;
using Verse;
using RimWorld;
namespace RJW_BGS
{
[StaticConstructorOnStartup]
internal static class First
{
static First()
{
RJWcopy.Racegroupdictbuilder();
//foreach (RaceGroupDef raceGroupDef2 in DefDatabase<RaceGroupDef>.AllDefs)
//{
//Log.Message("defName = " + raceGroupDef2.defName);
// if (raceGroupDef2.raceNames != null)
// {
// foreach (string race in raceGroupDef2.raceNames)
// {
//Log.Message(race);
// }
// }
//}
}
}
}

View file

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace RJW_BGS
{
public class GeneChance
{
public string defName;
public float chance = 1f;
}
}

View file

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HarmonyLib;
using Verse;
namespace RJW_BGS
{
[StaticConstructorOnStartup]
internal static class HarmonyInit
{
// Token: 0x0600001F RID: 31 RVA: 0x000029A4 File Offset: 0x00000BA4
static HarmonyInit()
{
Harmony harmony = new Harmony("RJW_BGS");
harmony.PatchAll();
}
}
}

View file

@ -0,0 +1,127 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
using RimWorld;
namespace RJW_BGS
{
public class InheritanceUtility
{
public static List<GeneDef> AnimalInheritedGenes(Pawn father, Pawn mother)
{
//One parent must be an animal and the other must be human, so only one needs to return
List<GeneDef> genelist = new List<GeneDef>();
if (father != null && !father.RaceProps.Humanlike)
{
return SelectGenes(father);
}
if (mother != null && !mother.RaceProps.Humanlike)
{
return SelectGenes(mother);
//PawnKindDef pawnKindDef = mother.kindDef;
//RaceGeneDef raceGeneDef = RJWcopy.GetRaceGenDefInternal(pawnKindDef);
//if (raceGeneDef != null)
//{
// GeneDef gene = null;
//In case you hit a modded gene not currently active try again.
// for (int i = 0; i < 50 || gene == null; i++)
// {
// if (raceGeneDef.genes.Any())
// {
// gene = DefDatabase<GeneDef>.GetNamed(raceGeneDef.genes.RandomElement());
// }
// }
// if (gene != null)
// {
// genelist.Add(gene);
//
// }
//
// }
}
return genelist;
}
public static List<GeneDef> SelectGenes(Pawn pawn)
{
List<GeneDef> genelist = new List<GeneDef>();
PawnKindDef pawnKindDef = pawn.kindDef;
RaceGeneDef raceGeneDef = RJWcopy.GetRaceGenDefInternal(pawnKindDef);
if (raceGeneDef != null)
{
foreach (GeneChance gene in raceGeneDef.genes)
{
if (gene.chance >= Rand.Range(0.01f,1f))
{
genelist.Add(DefDatabase<GeneDef>.GetNamed(gene.defName));
}
}
}
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);
}
}
}
}

View file

@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HarmonyLib;
using RimWorld;
using Verse;
using rjw;
namespace RJW_BGS
{
[HarmonyPatch(typeof(Hediff_BasePregnancy), "Initialize")]
public static class PatchRJWBestialityPregnancyUtility
{
[HarmonyPostfix]
public static void AddGenes(Pawn mother, Pawn dad, ref Hediff_BasePregnancy __instance)
{
foreach (Pawn baby in __instance.babies)
{
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);
//foreach (GeneDef gene in genes)
//{
// baby.genes.AddGene(gene, false);
//}
}
}
}
}
}

View file

@ -0,0 +1,41 @@
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)
{
yield return instruction;
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);
}
}
}
}
}

View file

@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HarmonyLib;
using RimWorld;
using Verse;
using rjw;
namespace RJW_BGS
{
[HarmonyPatch(typeof(PregnancyUtility), "GetInheritedGeneSet", new Type[]
{
typeof(Pawn),
typeof(Pawn),
//typeof(bool)
}
)]
public static class PatchVanillaPregnancyUtility
{
[HarmonyPostfix]
public static void AnimalInheritedGenes(Pawn father, Pawn mother, ref GeneSet __result)
{
List<GeneDef> genes = InheritanceUtility.AnimalInheritedGenes(father, mother);
if (genes.Any())
{
foreach (GeneDef gene in genes)
{
__result.AddGene(gene);
}
}
}
}
}

View file

@ -0,0 +1,36 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
using UnityEngine;
namespace RJW_Genes.Animal_Inheritance
{
public class RJW_BGSSettings : ModSettings
{
public static void DoWindowContents(Rect inRect)
{
//Copied from RJW settings mostly
Rect outRect = new Rect(0f, 30f, inRect.width, inRect.height - 30f);
Rect rect = new Rect(0f, 0f, inRect.width - 16f, inRect.height + 300f);
//Widgets.BeginScrollView(outRect, ref RJWSettings.scrollPosition, rect, true);
Listing_Standard listing_Standard = new Listing_Standard();
listing_Standard.maxOneColumn = true;
listing_Standard.ColumnWidth = rect.width / 2.05f;
listing_Standard.Begin(rect);
listing_Standard.Gap(24f);
listing_Standard.CheckboxLabeled("enabled", ref enabled, "no function yet", 0f, 1f);
//listing_Standard.CheckboxLabeled("sexfrenzy", ref sexfrenzy, "disable the effects", 0f, 1f);
listing_Standard.End();
}
public override void ExposeData()
{
base.ExposeData();
Scribe_Values.Look<bool>(ref RJW_BGSSettings.enabled, "enabled", RJW_BGSSettings.enabled, true);
}
public static bool enabled;
}
}

View file

@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
using UnityEngine;
namespace RJW_Genes.Animal_Inheritance
{
public class RJW_BGSSettingsController : Mod
{
public RJW_BGSSettingsController(ModContentPack content) : base(content)
{
base.GetSettings<RJW_BGSSettings>();
}
public override string SettingsCategory()
{
return "RJW Genes Animal Gene Inheritance";
}
public override void DoSettingsWindowContents(Rect inRect)
{
RJW_BGSSettings.DoWindowContents(inRect);
}
}
}

View file

@ -0,0 +1,151 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using rjw;
using Verse;
using RimWorld;
namespace RJW_BGS
{
internal class RJWcopy
{
//Code copied from rjw, as their code was internal and I need the dictionary to know which genes to add to the pawn
public static void Racegroupdictbuilder()
{
foreach (PawnKindDef pawnKindDef2 in from pawnKindDef in DefDatabase<PawnKindDef>.AllDefs
where pawnKindDef.race.race != null
select pawnKindDef)
{
RaceGroupDef raceGroupDef = null;
bool temp = TryGetRaceGroupDef(pawnKindDef2, out raceGroupDef);
}
}
public static bool TryGetRaceGroupDef(PawnKindDef pawnKindDef, out RaceGroupDef raceGroupDef)
{
if (RaceGroupByPawnKind.TryGetValue(pawnKindDef, out raceGroupDef))
{
return raceGroupDef != null;
}
raceGroupDef = GetRaceGroupDefInternal(pawnKindDef);
RaceGroupByPawnKind.Add(pawnKindDef, raceGroupDef);
return raceGroupDef != null;
}
public static RaceGroupDef GetRaceGroupDefInternal(PawnKindDef kindDef)
{
string raceName = kindDef.race.defName;
string pawnKindName = kindDef.defName;
IEnumerable<RaceGroupDef> allDefs = DefDatabase<RaceGroupDef>.AllDefs;
List<RaceGroupDef> list = allDefs.Where(delegate (RaceGroupDef group)
{
List<string> pawnKindNames = group.pawnKindNames;
return pawnKindNames != null && pawnKindNames.Contains(pawnKindName);
}).ToList<RaceGroupDef>();
List<RaceGroupDef> list2 = allDefs.Where(delegate (RaceGroupDef group)
{
List<string> raceNames = group.raceNames;
return raceNames != null && raceNames.Contains(raceName);
}).ToList<RaceGroupDef>();
int num = list.Count<RaceGroupDef>() + list2.Count<RaceGroupDef>();
if (num == 0)
{
return null;
}
if (num == 1)
{
return list.Concat(list2).Single<RaceGroupDef>();
}
RaceGroupDef result;
if ((result = list.FirstOrDefault((RaceGroupDef match) => !IsThisMod(match))) == null)
{
if ((result = list2.FirstOrDefault((RaceGroupDef match) => !IsThisMod(match))) == null)
{
result = (list.FirstOrDefault<RaceGroupDef>() ?? list2.FirstOrDefault<RaceGroupDef>());
}
}
return result;
}
//slightly modified copy of code above so it also works for racegenedefs
public static RaceGeneDef GetRaceGenDefInternal(PawnKindDef kindDef)
{
if (kindDef == null)
{
return null;
}
string raceName = kindDef.race.defName;
string pawnKindName = kindDef.defName;
RaceGroupDef raceGroupDef = GetRaceGroupDef(kindDef);
//string raceGroupName = GetRaceGroupDef(kindDef).defName;
IEnumerable<RaceGeneDef> allDefs = DefDatabase<RaceGeneDef>.AllDefs;
Log.Message(allDefs.Count<RaceGeneDef>().ToString());
List<RaceGeneDef> list = allDefs.Where(delegate (RaceGeneDef group)
{
List<string> pawnKindNames = group.pawnKindNames;
return pawnKindNames != null && pawnKindNames.Contains(pawnKindName);
}).ToList<RaceGeneDef>();
List<RaceGeneDef> list2 = allDefs.Where(delegate (RaceGeneDef group)
{
List<string> raceNames = group.raceNames;
return raceNames != null && raceNames.Contains(raceName);
}).ToList<RaceGeneDef>();
List<RaceGeneDef> list3 = new List<RaceGeneDef>();
if (raceGroupDef != null)
{
Log.Message("found a raceGroupDef");
Log.Message(raceGroupDef.defName);
foreach (RaceGeneDef rgd in allDefs)
{
Log.Message(rgd.defName);
}
list3 = allDefs.Where(delegate (RaceGeneDef group)
{
String raceGroupDefName = group.raceGroup;
return raceGroupDefName != null && raceGroupDefName == raceGroupDef.defName;
}).ToList<RaceGeneDef>();
}
RaceGeneDef result = null;
//First check if there is a matching pawnkinddef then race, then racegroup
if (list.Any())
{
result = list.RandomElement();
}
else if (list2.Any() && result == null)
{
result = list2.RandomElement();
}
else if (list3.Any() && result == null)
{
result = list3.RandomElement();
}
else
{
result = null;
}
return result;
}
private static RaceGroupDef GetRaceGroupDef(PawnKindDef kindDef)
{
RaceGroupDef raceGroupDef = null;
bool temp = TryGetRaceGroupDef(kindDef, out raceGroupDef);
return raceGroupDef;
}
private static bool IsThisMod(Def def)
{
return LoadedModManager.RunningMods.Single((ModContentPack pack) => pack.Name == "RimJobWorld").AllDefs.Contains(def);
}
private static readonly IDictionary<PawnKindDef, RaceGroupDef> RaceGroupByPawnKind = new Dictionary<PawnKindDef, RaceGroupDef>();
}
}

View file

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
using rjw;
namespace RJW_BGS
{
public class RaceGeneDef : Def
{
public String raceGroup;
public List<string> raceNames;
public List<string> pawnKindNames;
public List<GeneChance> genes;
//public List<float> genechances;
public String hybridName;
}
}

View file

@ -7,7 +7,7 @@
<ProjectGuid>{D7D21B4A-1DA7-41D8-B202-C58CA8FA62AA}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Rjw-Genes</RootNamespace>
<RootNamespace>RJW_Genes</RootNamespace>
<AssemblyName>Rjw-Genes</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
@ -23,18 +23,19 @@
</PropertyGroup>
<ItemGroup>
<Reference Include="0Harmony">
<HintPath>..\..\..\..\..\workshop\content\294100\2009463077\Current\Assemblies\0Harmony.dll</HintPath>
<HintPath>..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\workshop\content\294100\2009463077\Current\Assemblies\0Harmony.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="Assembly-CSharp">
<HintPath>..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll</HintPath>
<HintPath>..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\RimWorld\RimWorldWin64_Data\Managed\Assembly-CSharp.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="LicentiaLabs">
<HintPath>..\..\licentia-labs\Assemblies\LicentiaLabs.dll</HintPath>
<HintPath>..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\licentia-labs-master\Assemblies\LicentiaLabs.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="RJW">
<HintPath>..\..\rjw\1.4\Assemblies\RJW.dll</HintPath>
<HintPath>..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\RJW\1.4\Assemblies\RJW.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="System" />
@ -43,18 +44,28 @@
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="UnityEngine">
<HintPath>..\..\..\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
<Private>False</Private>
</Reference>
<None Include="..\About\**" />
<None Include="..\Common\Defs\Genes\GeneCategories.xml" />
<None Include="..\Common\Defs\Genes\GeneDefs_ExtraGenitaliaEndogenes.xml" />
<None Include="..\Common\Defs\Genes\GeneDefs_GenitaliaTypeEndogenes.xml" />
<None Include="..\Common\Languages\**" />
<None Include="..\Common\Patches\**" />
<Reference Include="UnityEngine.CoreModule">
<HintPath>..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Animal_Inheritance\First.cs" />
<Compile Include="Animal_Inheritance\Harmony_Init.cs" />
<Compile Include="Animal_Inheritance\InheritanceUtility.cs" />
<Compile Include="Animal_Inheritance\PatchRJWBestialityPregnancyUtility.cs" />
<Compile Include="Animal_Inheritance\PatchRJWHediffInsect_Egg.cs" />
<Compile Include="Animal_Inheritance\PatchVanillaPregnancyUtility.cs" />
<Compile Include="Animal_Inheritance\RaceGeneDef.cs" />
<Compile Include="Animal_Inheritance\RJWcopies.cs" />
<Compile Include="Animal_Inheritance\RJW_BGSSettings.cs" />
<Compile Include="Animal_Inheritance\RJW_BGSSettingsController.cs" />
<Compile Include="Animal_Inheritance\GeneChance.cs" />
<Compile Include="GeneDefOf.cs" />
<Compile Include="Genes\Breeding\Gene_MechBreeder.cs" />
<Compile Include="Genes\Breeding\PatchMechBirth.cs" />

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ReferencePath>
</ReferencePath>
</PropertyGroup>
</Project>