From 33a37f26de1b4e4b2ab9ab8d00a14926ef98670d Mon Sep 17 00:00:00 2001 From: Shabakur Date: Thu, 1 Dec 2022 15:29:26 +0100 Subject: [PATCH 1/2] Added animal inheritance to RJW-genes code --- Common/Assemblies/Rjw-Genes.dll | Bin 31232 -> 39424 bytes .../Alpha Animals/RaceGeneDefs_Aerofleet.xml | 22 +++ .../Alpha Animals/RaceGeneDefs_Lisks.xml | 82 ++++++++++ .../RaceGeneDefs_Wildpodgroup.xml | 28 ++++ Common/Defs/RaceGeneDefs/RaceGeneDefs.xml | 122 ++++++++++++++ .../Defs/RaceGeneDefs/RaceGeneDefs_Base.xml | 26 +++ .../RaceGeneDefs/RaceGeneDefs_template.xml | 38 +++++ Source/Animal_Inheritance/First.cs | 31 ++++ Source/Animal_Inheritance/Harmony_Init.cs | 21 +++ .../Animal_Inheritance/InheritanceUtility.cs | 134 ++++++++++++++++ .../PatchRJWBestialityPregnancyUtility.cs | 46 ++++++ .../PatchRJWHediffInsect_Egg.cs | 41 +++++ .../PatchVanillaPregnancyUtility.cs | 35 ++++ Source/Animal_Inheritance/RJWcopies.cs | 150 ++++++++++++++++++ Source/Animal_Inheritance/RaceGeneDef.cs | 20 +++ Source/Rjw-Genes.csproj | 27 ++-- Source/Rjw-Genes.csproj.user | 7 + 17 files changed, 821 insertions(+), 9 deletions(-) create mode 100644 Common/Defs/RaceGeneDefs/Alpha Animals/RaceGeneDefs_Aerofleet.xml create mode 100644 Common/Defs/RaceGeneDefs/Alpha Animals/RaceGeneDefs_Lisks.xml create mode 100644 Common/Defs/RaceGeneDefs/Alpha Animals/RaceGeneDefs_Wildpodgroup.xml create mode 100644 Common/Defs/RaceGeneDefs/RaceGeneDefs.xml create mode 100644 Common/Defs/RaceGeneDefs/RaceGeneDefs_Base.xml create mode 100644 Common/Defs/RaceGeneDefs/RaceGeneDefs_template.xml create mode 100644 Source/Animal_Inheritance/First.cs create mode 100644 Source/Animal_Inheritance/Harmony_Init.cs create mode 100644 Source/Animal_Inheritance/InheritanceUtility.cs create mode 100644 Source/Animal_Inheritance/PatchRJWBestialityPregnancyUtility.cs create mode 100644 Source/Animal_Inheritance/PatchRJWHediffInsect_Egg.cs create mode 100644 Source/Animal_Inheritance/PatchVanillaPregnancyUtility.cs create mode 100644 Source/Animal_Inheritance/RJWcopies.cs create mode 100644 Source/Animal_Inheritance/RaceGeneDef.cs create mode 100644 Source/Rjw-Genes.csproj.user diff --git a/Common/Assemblies/Rjw-Genes.dll b/Common/Assemblies/Rjw-Genes.dll index e5045f94ffcde54e24d22112144fb92b3cb26184..8a6459ba2c708f90d56a62a30f37e37ac33942f6 100644 GIT binary patch literal 39424 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 w4Db1bKmkT>O8>rN4UezZZf31hG`|JOBUy diff --git a/Common/Defs/RaceGeneDefs/Alpha Animals/RaceGeneDefs_Aerofleet.xml b/Common/Defs/RaceGeneDefs/Alpha Animals/RaceGeneDefs_Aerofleet.xml new file mode 100644 index 0000000..bf2cfee --- /dev/null +++ b/Common/Defs/RaceGeneDefs/Alpha Animals/RaceGeneDefs_Aerofleet.xml @@ -0,0 +1,22 @@ + + + + AA_Aerofleet + +
  • AA_Aerofleet
  • +
  • AA_ColossalAerofleet
  • +
    + +
  • AG_BlueGelProduction
  • +
  • AG_GasBags
  • +
  • AG_AerofleetHead
  • +
  • AG_SlimeBody
  • +
    + +
  • 0.25
  • +
  • 0.25
  • +
  • 0.25
  • +
  • 0.25
  • +
    +
    +
    \ No newline at end of file diff --git a/Common/Defs/RaceGeneDefs/Alpha Animals/RaceGeneDefs_Lisks.xml b/Common/Defs/RaceGeneDefs/Alpha Animals/RaceGeneDefs_Lisks.xml new file mode 100644 index 0000000..1fd246a --- /dev/null +++ b/Common/Defs/RaceGeneDefs/Alpha Animals/RaceGeneDefs_Lisks.xml @@ -0,0 +1,82 @@ + + + + AA_lisks_base + + +
  • AG_Spinnerets
  • +
  • AG_EggLaying
  • +
  • AG_FeraliskEyes
  • +
    + +
  • 0.25
  • +
  • 0.25
  • +
  • 0.25
  • +
    +
    + + + AA_Animalisk + +
  • AA_Animalisk
  • +
    + +
  • PsychicAbility_Enhanced
  • +
  • PsychicAbility_Extreme
  • +
    + +
  • 0.8
  • +
  • 0.2
  • +
    +
    + + + AA_Blizzarisk + +
  • AA_Blizzarisk
  • +
    + +
  • MaxTemp_SmallDecrease
  • +
  • MinTemp_SmallDecrease
  • +
  • MinTemp_LargeDecrease
  • +
    + +
  • 0.8
  • +
  • 0.8
  • +
  • 0.2
  • +
    +
    + + + AA_Hotlisk + +
  • AA_Cinderlisk
  • +
  • AA_Dunealisk
  • +
    + +
  • MinTemp_SmallIncrease
  • +
  • MaxTemp_SmallIncrease
  • +
  • MaxTemp_LargeIncrease
  • +
    + +
  • 0.8
  • +
  • 0.8
  • +
  • 0.2
  • +
    +
    + + + AA_Normallisk + +
  • AA_Feralisk
  • +
  • AA_Junglelisk
  • +
    +
    +
    \ No newline at end of file diff --git a/Common/Defs/RaceGeneDefs/Alpha Animals/RaceGeneDefs_Wildpodgroup.xml b/Common/Defs/RaceGeneDefs/Alpha Animals/RaceGeneDefs_Wildpodgroup.xml new file mode 100644 index 0000000..bb752f9 --- /dev/null +++ b/Common/Defs/RaceGeneDefs/Alpha Animals/RaceGeneDefs_Wildpodgroup.xml @@ -0,0 +1,28 @@ + + + + AA_Wildpodgroup + +
  • AA_Wildpod
  • +
  • AA_Wildpawn
  • +
  • AA_Agaripawn
  • +
  • AA_Agaripod
  • +
    + +
  • AG_FungalSkin
  • +
  • MoveSpeed_Slow
  • +
  • FireWeakness
  • +
  • FireTerror
  • +
  • Robust
  • +
  • Unstoppable
  • +
    + +
  • 0.15
  • +
  • 0.25
  • +
  • 0.25
  • +
  • 0.25
  • +
  • 0.25
  • +
  • 0.25
  • +
    +
    +
    \ No newline at end of file diff --git a/Common/Defs/RaceGeneDefs/RaceGeneDefs.xml b/Common/Defs/RaceGeneDefs/RaceGeneDefs.xml new file mode 100644 index 0000000..e137b8c --- /dev/null +++ b/Common/Defs/RaceGeneDefs/RaceGeneDefs.xml @@ -0,0 +1,122 @@ + + + + Canine + Canine_Group + +
  • Ears_Floppy
  • +
    + +
  • 0.9
  • +
    +
    + + + Insect + Insect_Group + +
  • Beauty_Ugly
  • +
    + +
  • 0.5
  • +
    +
    + + + Feline + Feline_Group + +
  • Ears_Cat
  • +
  • Sleepy
  • +
  • DarkVision
  • +
    + +
  • 0.9
  • +
  • 0.25
  • +
  • 0.25
  • +
    +
    + + + Dragon + Dragon_Group + +
  • Unstoppable
  • +
  • Headbone_CenterHorn
  • +
    + +
  • 0.25
  • +
  • 0.9
  • +
    +
    + + + Rodent + Rodent_Group + +
  • Fertile
  • +
    + +
  • 0.25
  • +
    +
    + + + Racoon + Raccon_Group + +
  • StrongStomach
  • +
    + +
  • 0.5
  • +
    +
    + + +
    \ No newline at end of file diff --git a/Common/Defs/RaceGeneDefs/RaceGeneDefs_Base.xml b/Common/Defs/RaceGeneDefs/RaceGeneDefs_Base.xml new file mode 100644 index 0000000..f2e40b4 --- /dev/null +++ b/Common/Defs/RaceGeneDefs/RaceGeneDefs_Base.xml @@ -0,0 +1,26 @@ + + + + Insect_base + +
  • AG_InsectBlood
  • +
  • rjw_genes_ovipositor_genitalia
  • +
    + +
  • 0.5
  • +
  • 0.5
  • +
    +
    + + + Slime_base + +
  • AG_SlimeBlood
  • +
  • rjw_genes_slime_genitalia
  • +
    + +
  • 0.5
  • +
  • 0.5
  • +
    +
    +
    \ No newline at end of file diff --git a/Common/Defs/RaceGeneDefs/RaceGeneDefs_template.xml b/Common/Defs/RaceGeneDefs/RaceGeneDefs_template.xml new file mode 100644 index 0000000..bce3870 --- /dev/null +++ b/Common/Defs/RaceGeneDefs/RaceGeneDefs_template.xml @@ -0,0 +1,38 @@ + + + + \ No newline at end of file diff --git a/Source/Animal_Inheritance/First.cs b/Source/Animal_Inheritance/First.cs new file mode 100644 index 0000000..74eeb6c --- /dev/null +++ b/Source/Animal_Inheritance/First.cs @@ -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.AllDefs) + //{ + //Log.Message("defName = " + raceGroupDef2.defName); + // if (raceGroupDef2.raceNames != null) + // { + // foreach (string race in raceGroupDef2.raceNames) + // { + //Log.Message(race); + // } + // } + //} + } + } +} diff --git a/Source/Animal_Inheritance/Harmony_Init.cs b/Source/Animal_Inheritance/Harmony_Init.cs new file mode 100644 index 0000000..1852e9b --- /dev/null +++ b/Source/Animal_Inheritance/Harmony_Init.cs @@ -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(); + } + } +} diff --git a/Source/Animal_Inheritance/InheritanceUtility.cs b/Source/Animal_Inheritance/InheritanceUtility.cs new file mode 100644 index 0000000..57d0205 --- /dev/null +++ b/Source/Animal_Inheritance/InheritanceUtility.cs @@ -0,0 +1,134 @@ +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 AnimalInheritedGenes(Pawn father, Pawn mother) + { + //One parent must be an animal and the other must be human, so only one needs to return + List genelist = new List(); + 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.GetNamed(raceGeneDef.genes.RandomElement()); + // } + // } + // if (gene != null) + // { + // genelist.Add(gene); +// + // } + // + // } + } + return genelist; + } + + public static List SelectGenes(Pawn pawn) + { + List genelist = new List(); + PawnKindDef pawnKindDef = pawn.kindDef; + RaceGeneDef raceGeneDef = RJWcopy.GetRaceGenDefInternal(pawnKindDef); + if (raceGeneDef != null) + { + int num1 = raceGeneDef.genes.Count; + int num2 = raceGeneDef.genechances.Count; + if (num1 != num2) + { + Log.Error("The amount of genes and genechanches are different in " + raceGeneDef.defName + ". Can't select genes to inherit"); + return genelist; + } + for (int i = 0; i Rand.Range(0.01f, 1f)) + { + genelist.Add(DefDatabase.GetNamed(raceGeneDef.genes[i])); + } + } + } + return genelist; + } + + public static void AddGenes(Pawn pawn, List 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 genes = PregnancyUtility.GetInheritedGenes(dad, mother); + List 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); + } + } + + } +} diff --git a/Source/Animal_Inheritance/PatchRJWBestialityPregnancyUtility.cs b/Source/Animal_Inheritance/PatchRJWBestialityPregnancyUtility.cs new file mode 100644 index 0000000..5224c4f --- /dev/null +++ b/Source/Animal_Inheritance/PatchRJWBestialityPregnancyUtility.cs @@ -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 genes = PregnancyUtility.GetInheritedGenes(dad, mother); + List beastgenes = InheritanceUtility.AnimalInheritedGenes(dad, mother); + InheritanceUtility.AddGenes(baby, beastgenes); + InheritanceUtility.AddGenes(baby, genes); + //foreach (GeneDef gene in genes) + //{ + // baby.genes.AddGene(gene, false); + //} + } + } + } + } +} diff --git a/Source/Animal_Inheritance/PatchRJWHediffInsect_Egg.cs b/Source/Animal_Inheritance/PatchRJWHediffInsect_Egg.cs new file mode 100644 index 0000000..d52f62d --- /dev/null +++ b/Source/Animal_Inheritance/PatchRJWHediffInsect_Egg.cs @@ -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 Transpiler(IEnumerable 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); + } + + } + } + } +} diff --git a/Source/Animal_Inheritance/PatchVanillaPregnancyUtility.cs b/Source/Animal_Inheritance/PatchVanillaPregnancyUtility.cs new file mode 100644 index 0000000..0f5cc90 --- /dev/null +++ b/Source/Animal_Inheritance/PatchVanillaPregnancyUtility.cs @@ -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 genes = InheritanceUtility.AnimalInheritedGenes(father, mother); + if (genes.Any()) + { + foreach (GeneDef gene in genes) + { + __result.AddGene(gene); + } + } + } + } +} diff --git a/Source/Animal_Inheritance/RJWcopies.cs b/Source/Animal_Inheritance/RJWcopies.cs new file mode 100644 index 0000000..594b922 --- /dev/null +++ b/Source/Animal_Inheritance/RJWcopies.cs @@ -0,0 +1,150 @@ +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.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; + } + + //slightly modified code so it also works racegroupdefs + public static RaceGroupDef GetRaceGroupDefInternal(PawnKindDef kindDef) + { + string raceName = kindDef.race.defName; + string pawnKindName = kindDef.defName; + IEnumerable allDefs = DefDatabase.AllDefs; + List list = allDefs.Where(delegate (RaceGroupDef group) + { + List pawnKindNames = group.pawnKindNames; + return pawnKindNames != null && pawnKindNames.Contains(pawnKindName); + }).ToList(); + List list2 = allDefs.Where(delegate (RaceGroupDef group) + { + List raceNames = group.raceNames; + return raceNames != null && raceNames.Contains(raceName); + }).ToList(); + int num = list.Count() + list2.Count(); + if (num == 0) + { + return null; + } + if (num == 1) + { + return list.Concat(list2).Single(); + } + RaceGroupDef result; + if ((result = list.FirstOrDefault((RaceGroupDef match) => !IsThisMod(match))) == null) + { + if ((result = list2.FirstOrDefault((RaceGroupDef match) => !IsThisMod(match))) == null) + { + result = (list.FirstOrDefault() ?? list2.FirstOrDefault()); + } + } + return result; + } + + 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 allDefs = DefDatabase.AllDefs; + Log.Message(allDefs.Count().ToString()); + List list = allDefs.Where(delegate (RaceGeneDef group) + { + List pawnKindNames = group.pawnKindNames; + return pawnKindNames != null && pawnKindNames.Contains(pawnKindName); + }).ToList(); + List list2 = allDefs.Where(delegate (RaceGeneDef group) + { + List raceNames = group.raceNames; + return raceNames != null && raceNames.Contains(raceName); + }).ToList(); + List list3 = new List(); + 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 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 RaceGroupByPawnKind = new Dictionary(); + } + + +} diff --git a/Source/Animal_Inheritance/RaceGeneDef.cs b/Source/Animal_Inheritance/RaceGeneDef.cs new file mode 100644 index 0000000..0b14e2a --- /dev/null +++ b/Source/Animal_Inheritance/RaceGeneDef.cs @@ -0,0 +1,20 @@ +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 raceNames; + public List pawnKindNames; + public List genes; + public List genechances; + public String hybridName; + } +} diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj index 67da2c6..e570152 100644 --- a/Source/Rjw-Genes.csproj +++ b/Source/Rjw-Genes.csproj @@ -7,7 +7,7 @@ {D7D21B4A-1DA7-41D8-B202-C58CA8FA62AA} Library Properties - Rjw-Genes + RJW_Genes Rjw-Genes v4.8 512 @@ -23,18 +23,19 @@ - ..\..\..\..\..\workshop\content\294100\2009463077\Current\Assemblies\0Harmony.dll + ..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\workshop\content\294100\2009463077\Current\Assemblies\0Harmony.dll + False - ..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll + ..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\RimWorld\RimWorldWin64_Data\Managed\Assembly-CSharp.dll False - ..\..\licentia-labs\Assemblies\LicentiaLabs.dll + ..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\licentia-labs-master\Assemblies\LicentiaLabs.dll False - ..\..\rjw\1.4\Assemblies\RJW.dll + ..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\RJW\1.4\Assemblies\RJW.dll False @@ -43,18 +44,26 @@ - - ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll - False - + + ..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.dll + False + + + + + + + + + diff --git a/Source/Rjw-Genes.csproj.user b/Source/Rjw-Genes.csproj.user new file mode 100644 index 0000000..6e4223f --- /dev/null +++ b/Source/Rjw-Genes.csproj.user @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file From 33c0fa3e3b522a15c5f7513db867ea20cf9b411b Mon Sep 17 00:00:00 2001 From: Shabakur Date: Sat, 17 Dec 2022 20:52:10 +0100 Subject: [PATCH 2/2] Modified how racegenedefs are formatted --- Common/Assemblies/Rjw-Genes.dll | Bin 39424 -> 40448 bytes .../Alpha Animals/RaceGeneDefs_Aerofleet.xml | 22 ---- .../Alpha Animals/RaceGeneDefs_Lisks.xml | 82 ------------- .../RaceGeneDefs_Wildpodgroup.xml | 28 ----- .../Defs/RaceGeneDefs/RaceGeneDefs_Base.xml | 32 ++--- ...ml => RaceGeneDefs_Vanilla_Racegroups.xml} | 116 +++++++++--------- .../RaceGeneDefs/RaceGeneDefs_template.xml | 33 +++-- Source/Animal_Inheritance/GeneChance.cs | 14 +++ .../Animal_Inheritance/InheritanceUtility.cs | 13 +- Source/Animal_Inheritance/RJW_BGSSettings.cs | 36 ++++++ .../RJW_BGSSettingsController.cs | 27 ++++ Source/Animal_Inheritance/RJWcopies.cs | 3 +- Source/Animal_Inheritance/RaceGeneDef.cs | 5 +- Source/Rjw-Genes.csproj | 8 +- 14 files changed, 188 insertions(+), 231 deletions(-) delete mode 100644 Common/Defs/RaceGeneDefs/Alpha Animals/RaceGeneDefs_Aerofleet.xml delete mode 100644 Common/Defs/RaceGeneDefs/Alpha Animals/RaceGeneDefs_Lisks.xml delete mode 100644 Common/Defs/RaceGeneDefs/Alpha Animals/RaceGeneDefs_Wildpodgroup.xml rename Common/Defs/RaceGeneDefs/{RaceGeneDefs.xml => RaceGeneDefs_Vanilla_Racegroups.xml} (51%) create mode 100644 Source/Animal_Inheritance/GeneChance.cs create mode 100644 Source/Animal_Inheritance/RJW_BGSSettings.cs create mode 100644 Source/Animal_Inheritance/RJW_BGSSettingsController.cs diff --git a/Common/Assemblies/Rjw-Genes.dll b/Common/Assemblies/Rjw-Genes.dll index 8a6459ba2c708f90d56a62a30f37e37ac33942f6..5e1c60b46aeea01f1513cbc5a751578a0e73b68b 100644 GIT binary patch delta 17647 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 KOJ!?c_x}Phulv&g delta 16630 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 avnp<0+nRpMe>L^q-mRfKzEWCxdHx@PQQ18J diff --git a/Common/Defs/RaceGeneDefs/Alpha Animals/RaceGeneDefs_Aerofleet.xml b/Common/Defs/RaceGeneDefs/Alpha Animals/RaceGeneDefs_Aerofleet.xml deleted file mode 100644 index bf2cfee..0000000 --- a/Common/Defs/RaceGeneDefs/Alpha Animals/RaceGeneDefs_Aerofleet.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - AA_Aerofleet - -
  • AA_Aerofleet
  • -
  • AA_ColossalAerofleet
  • -
    - -
  • AG_BlueGelProduction
  • -
  • AG_GasBags
  • -
  • AG_AerofleetHead
  • -
  • AG_SlimeBody
  • -
    - -
  • 0.25
  • -
  • 0.25
  • -
  • 0.25
  • -
  • 0.25
  • -
    -
    -
    \ No newline at end of file diff --git a/Common/Defs/RaceGeneDefs/Alpha Animals/RaceGeneDefs_Lisks.xml b/Common/Defs/RaceGeneDefs/Alpha Animals/RaceGeneDefs_Lisks.xml deleted file mode 100644 index 1fd246a..0000000 --- a/Common/Defs/RaceGeneDefs/Alpha Animals/RaceGeneDefs_Lisks.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - - AA_lisks_base - - -
  • AG_Spinnerets
  • -
  • AG_EggLaying
  • -
  • AG_FeraliskEyes
  • -
    - -
  • 0.25
  • -
  • 0.25
  • -
  • 0.25
  • -
    -
    - - - AA_Animalisk - -
  • AA_Animalisk
  • -
    - -
  • PsychicAbility_Enhanced
  • -
  • PsychicAbility_Extreme
  • -
    - -
  • 0.8
  • -
  • 0.2
  • -
    -
    - - - AA_Blizzarisk - -
  • AA_Blizzarisk
  • -
    - -
  • MaxTemp_SmallDecrease
  • -
  • MinTemp_SmallDecrease
  • -
  • MinTemp_LargeDecrease
  • -
    - -
  • 0.8
  • -
  • 0.8
  • -
  • 0.2
  • -
    -
    - - - AA_Hotlisk - -
  • AA_Cinderlisk
  • -
  • AA_Dunealisk
  • -
    - -
  • MinTemp_SmallIncrease
  • -
  • MaxTemp_SmallIncrease
  • -
  • MaxTemp_LargeIncrease
  • -
    - -
  • 0.8
  • -
  • 0.8
  • -
  • 0.2
  • -
    -
    - - - AA_Normallisk - -
  • AA_Feralisk
  • -
  • AA_Junglelisk
  • -
    -
    -
    \ No newline at end of file diff --git a/Common/Defs/RaceGeneDefs/Alpha Animals/RaceGeneDefs_Wildpodgroup.xml b/Common/Defs/RaceGeneDefs/Alpha Animals/RaceGeneDefs_Wildpodgroup.xml deleted file mode 100644 index bb752f9..0000000 --- a/Common/Defs/RaceGeneDefs/Alpha Animals/RaceGeneDefs_Wildpodgroup.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - AA_Wildpodgroup - -
  • AA_Wildpod
  • -
  • AA_Wildpawn
  • -
  • AA_Agaripawn
  • -
  • AA_Agaripod
  • -
    - -
  • AG_FungalSkin
  • -
  • MoveSpeed_Slow
  • -
  • FireWeakness
  • -
  • FireTerror
  • -
  • Robust
  • -
  • Unstoppable
  • -
    - -
  • 0.15
  • -
  • 0.25
  • -
  • 0.25
  • -
  • 0.25
  • -
  • 0.25
  • -
  • 0.25
  • -
    -
    -
    \ No newline at end of file diff --git a/Common/Defs/RaceGeneDefs/RaceGeneDefs_Base.xml b/Common/Defs/RaceGeneDefs/RaceGeneDefs_Base.xml index f2e40b4..2e03f2b 100644 --- a/Common/Defs/RaceGeneDefs/RaceGeneDefs_Base.xml +++ b/Common/Defs/RaceGeneDefs/RaceGeneDefs_Base.xml @@ -3,24 +3,28 @@ Insect_base -
  • AG_InsectBlood
  • -
  • rjw_genes_ovipositor_genitalia
  • +
  • + AG_InsectBlood + 0.5 +
  • +
  • + rjw_genes_ovipositor_genitalia + 0.5 +
  • - -
  • 0.5
  • -
  • 0.5
  • -
    - Slime_base + Slime_base -
  • AG_SlimeBlood
  • -
  • rjw_genes_slime_genitalia
  • -
    - -
  • 0.5
  • -
  • 0.5
  • -
    +
  • + AG_SlimeBlood + 0.5 +
  • +
  • + rjw_genes_slime_genitalia + 0.5 +
  • +
    \ No newline at end of file diff --git a/Common/Defs/RaceGeneDefs/RaceGeneDefs.xml b/Common/Defs/RaceGeneDefs/RaceGeneDefs_Vanilla_Racegroups.xml similarity index 51% rename from Common/Defs/RaceGeneDefs/RaceGeneDefs.xml rename to Common/Defs/RaceGeneDefs/RaceGeneDefs_Vanilla_Racegroups.xml index e137b8c..8453665 100644 --- a/Common/Defs/RaceGeneDefs/RaceGeneDefs.xml +++ b/Common/Defs/RaceGeneDefs/RaceGeneDefs_Vanilla_Racegroups.xml @@ -4,107 +4,101 @@ Canine Canine_Group -
  • Ears_Floppy
  • -
    - -
  • 0.9
  • -
    +
  • + Ears_Floppy + 0.9 +
  • + - + + Insect Insect_Group -
  • Beauty_Ugly
  • +
  • + Beauty_Ugly + 0.5 +
  • - -
  • 0.5
  • -
    Feline Feline_Group -
  • Ears_Cat
  • -
  • Sleepy
  • -
  • DarkVision
  • +
  • + Ears_Cat + 0.9 +
  • +
  • + Sleepy + 0.25 +
  • +
  • + DarkVision + 0.25 +
  • - -
  • 0.9
  • -
  • 0.25
  • -
  • 0.25
  • -
    Dragon Dragon_Group -
  • Unstoppable
  • -
  • Headbone_CenterHorn
  • -
    - -
  • 0.25
  • -
  • 0.9
  • -
    +
  • + Unstoppable + 0.25 +
  • +
  • + Headbone_CenterHorn + 0.9 +
  • +
    Rodent Rodent_Group -
  • Fertile
  • -
    - -
  • 0.25
  • -
    +
  • + Fertile + 0.25 +
  • +
    Racoon Raccon_Group -
  • StrongStomach
  • +
  • + StrongStomach + 0.5 +
  • - -
  • 0.5
  • -
    \ No newline at end of file diff --git a/Common/Defs/RaceGeneDefs/RaceGeneDefs_template.xml b/Common/Defs/RaceGeneDefs/RaceGeneDefs_template.xml index bce3870..20be765 100644 --- a/Common/Defs/RaceGeneDefs/RaceGeneDefs_template.xml +++ b/Common/Defs/RaceGeneDefs/RaceGeneDefs_template.xml @@ -23,16 +23,33 @@ which genes can be inherited -
  • Ears_Floppy
  • -
    - The genes which may be inherited. Use the defName of the gene, you can also add modded genes. - - -
  • 0.9
  • -
    - WIP, the chance of each gene to be inherited. Is in same order as genes, so for the second gene the chance to inherit is based on the second line in geweights. +
  • + Ears_Floppy + 0.5 +
  • +
  • + rjw_genes_slime_genitalia You can add modded genes which will be ignored if the mod is inactive. + 0.5 +
  • + + For each gene you need to find the defname and give it a chance to appear. Each gene is rolled independently. --> + + \ No newline at end of file diff --git a/Source/Animal_Inheritance/GeneChance.cs b/Source/Animal_Inheritance/GeneChance.cs new file mode 100644 index 0000000..2c5453f --- /dev/null +++ b/Source/Animal_Inheritance/GeneChance.cs @@ -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; + } +} diff --git a/Source/Animal_Inheritance/InheritanceUtility.cs b/Source/Animal_Inheritance/InheritanceUtility.cs index 57d0205..8d5e953 100644 --- a/Source/Animal_Inheritance/InheritanceUtility.cs +++ b/Source/Animal_Inheritance/InheritanceUtility.cs @@ -53,18 +53,11 @@ namespace RJW_BGS RaceGeneDef raceGeneDef = RJWcopy.GetRaceGenDefInternal(pawnKindDef); if (raceGeneDef != null) { - int num1 = raceGeneDef.genes.Count; - int num2 = raceGeneDef.genechances.Count; - if (num1 != num2) + foreach (GeneChance gene in raceGeneDef.genes) { - Log.Error("The amount of genes and genechanches are different in " + raceGeneDef.defName + ". Can't select genes to inherit"); - return genelist; - } - for (int i = 0; i Rand.Range(0.01f, 1f)) + if (gene.chance >= Rand.Range(0.01f,1f)) { - genelist.Add(DefDatabase.GetNamed(raceGeneDef.genes[i])); + genelist.Add(DefDatabase.GetNamed(gene.defName)); } } } diff --git a/Source/Animal_Inheritance/RJW_BGSSettings.cs b/Source/Animal_Inheritance/RJW_BGSSettings.cs new file mode 100644 index 0000000..180567c --- /dev/null +++ b/Source/Animal_Inheritance/RJW_BGSSettings.cs @@ -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(ref RJW_BGSSettings.enabled, "enabled", RJW_BGSSettings.enabled, true); + } + + public static bool enabled; + } +} diff --git a/Source/Animal_Inheritance/RJW_BGSSettingsController.cs b/Source/Animal_Inheritance/RJW_BGSSettingsController.cs new file mode 100644 index 0000000..53a7659 --- /dev/null +++ b/Source/Animal_Inheritance/RJW_BGSSettingsController.cs @@ -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(); + } + + public override string SettingsCategory() + { + return "RJW Genes Animal Gene Inheritance"; + } + public override void DoSettingsWindowContents(Rect inRect) + { + RJW_BGSSettings.DoWindowContents(inRect); + } + } +} diff --git a/Source/Animal_Inheritance/RJWcopies.cs b/Source/Animal_Inheritance/RJWcopies.cs index 594b922..cabfd63 100644 --- a/Source/Animal_Inheritance/RJWcopies.cs +++ b/Source/Animal_Inheritance/RJWcopies.cs @@ -35,7 +35,7 @@ namespace RJW_BGS return raceGroupDef != null; } - //slightly modified code so it also works racegroupdefs + public static RaceGroupDef GetRaceGroupDefInternal(PawnKindDef kindDef) { string raceName = kindDef.race.defName; @@ -71,6 +71,7 @@ namespace RJW_BGS return result; } + //slightly modified copy of code above so it also works for racegenedefs public static RaceGeneDef GetRaceGenDefInternal(PawnKindDef kindDef) { if (kindDef == null) diff --git a/Source/Animal_Inheritance/RaceGeneDef.cs b/Source/Animal_Inheritance/RaceGeneDef.cs index 0b14e2a..1d7e42b 100644 --- a/Source/Animal_Inheritance/RaceGeneDef.cs +++ b/Source/Animal_Inheritance/RaceGeneDef.cs @@ -10,11 +10,12 @@ namespace RJW_BGS { public class RaceGeneDef : Def { + public String raceGroup; public List raceNames; public List pawnKindNames; - public List genes; - public List genechances; + public List genes; + //public List genechances; public String hybridName; } } diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj index e570152..b8edc5b 100644 --- a/Source/Rjw-Genes.csproj +++ b/Source/Rjw-Genes.csproj @@ -50,9 +50,8 @@ - - ..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.dll - False + + ..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll
    @@ -64,6 +63,9 @@ + + +