diff --git a/CHANGELOG.md b/CHANGELOG.md
index 89390cf..495d954 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,18 +1,15 @@
# 1.2
-**Changes:**
+Changes:
- Cocoon Weaver Gene
-- Spawn Spelopede Gene (Can be changed to spawn Megascarabs or other insects via xml)
-- Queens & Caste Logic (see below)
-- Addition to InsectIncubator: Now fertilizes eggs once placed inside a host, and breeds out eggs twice as fast.
+- Spawn Spelopede Gene (Can re changed to spawn Megascarabs or other insects)
-**Internal:**
+Internal:
- Renamed Abilities to have _ability_ in their name, to not exactly match the gene-defnames.
-- Moved Insect-Incubator & Insect-Breeder to Hive Category and Folders
-**Fixes:**
+Fixes:
- Cockeater Ability has now Icon of Cockeater Gene
- Cockeater now leaves a bite wound!
@@ -30,12 +27,11 @@ In general, the logic is the following:
- The assignemnt is done by xenotypes for queen and drones. The baby will get all xenogenes of their parents xenotypes.
- For workers, every queen can have a set of genes for their workers defined in [a special def](./Common/Defs/QueenWorkerMappingDefs/QueenWorkerMappingDefs_base.xml). These will be added as endogenes, so that pawns can still become xenotypes.
- There is a default set for worker genes, making mentally dumb, sterile and servile pawns.
-- Chances for Offsprings (Drone, Queen, Worker) is defined in an [XML-Def](./Common/Defs/HiveOffspringChanceDef/HiveOffspringChanceDefs.xml)
I am not sure if I want to have a specific mapping defining that Queen can only mate with certain Drones, let me know how you feel about it.
*Queens can be male*. I just used the female-term, but implementation is gender-neutral.
-**ToDo:**
+ToDo:
- Icons: Cocoon, Spelopede Spawn
- Sound: Spelopede Spawn
diff --git a/Common/Defs/GeneDefs/GeneDefs_Breeding.xml b/Common/Defs/GeneDefs/GeneDefs_Breeding.xml
index 7482459..a2d7d7e 100644
--- a/Common/Defs/GeneDefs/GeneDefs_Breeding.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_Breeding.xml
@@ -13,6 +13,27 @@
-1
+
+ rjw_genes_insectincubator
+
+ Pawns with this gene are able to hold more insect eggs.
+ Genes/Icons/More_Egg_Space
+ 52
+ rjw_genes_breeding
+ 1
+ -1
+
+
+
+ rjw_genes_insectbreeder
+
+ Pawns with this gene are able to fertilize eggs with any fertile penis.
+ World/WorldObjects/Expanding/Insects
+ 53
+ rjw_genes_breeding
+ 1
+ -1
+ rjw_genes_zoophile
diff --git a/Common/Defs/GeneDefs/GeneDefs_Hive.xml b/Common/Defs/GeneDefs/GeneDefs_Hive.xml
index 84b15ff..897851f 100644
--- a/Common/Defs/GeneDefs/GeneDefs_Hive.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_Hive.xml
@@ -165,29 +165,4 @@
1-1
-
-
-
- rjw_genes_insectincubator
-
- RJW_Genes.Gene_InsectIncubator
- Pawns with this gene are able to host more insect eggs, hatch them faster and fertilize any inserted egg.
- Genes/Icons/More_Egg_Space
- 52
- rjw_genes_hive
- 1
- -1
-
-
-
- rjw_genes_insectbreeder
-
- Pawns with this gene are able to fertilize eggs with any fertile penis.
- World/WorldObjects/Expanding/Insects
- 53
- rjw_genes_hive
- 1
- -1
-
-
\ No newline at end of file
diff --git a/Common/Defs/HiveOffspringChanceDef/HiveOffspringChanceDefs.xml b/Common/Defs/HiveOffspringChanceDef/HiveOffspringChanceDefs.xml
deleted file mode 100644
index 884bd6a..0000000
--- a/Common/Defs/HiveOffspringChanceDef/HiveOffspringChanceDefs.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
- rjw_genes_default_hive_offspring_chances
- default
-
- 0.02
- 0.48
- 0.5
-
-
-
-
- rjw_genes_test_queen_offspring_chances
- rjw_genes_test_queen_xenotype
-
- 0.02
- 0.28
- 0.7
-
-
-
-
\ No newline at end of file
diff --git a/Source/Genes/Hive/Patches/Patch_InsectIncubator_PregnancyHelper.cs b/Source/Genes/Breeding/PatchPregnancyHelper.cs
similarity index 95%
rename from Source/Genes/Hive/Patches/Patch_InsectIncubator_PregnancyHelper.cs
rename to Source/Genes/Breeding/PatchPregnancyHelper.cs
index fc3e530..81a0ad4 100644
--- a/Source/Genes/Hive/Patches/Patch_InsectIncubator_PregnancyHelper.cs
+++ b/Source/Genes/Breeding/PatchPregnancyHelper.cs
@@ -15,11 +15,9 @@ namespace RJW_Genes
///
/// This Class patches the RJW-DoEgg to allow up to MaxEggSizeMul times the original amount of eggs.
/// This harmony patch was kindly provided by 'shabalox' https://github.com/Shabalox/RJW_Genes_Addons/
- ///
- /// For Gene: rjw_genes_insectincubator
///
[HarmonyPatch(typeof(PregnancyHelper), "DoEgg")]
- static class Patch_InsectIncubator_PregnancyHelper
+ static class PatchPregnancyHelper
{
[HarmonyTranspiler]
public static IEnumerable Transpiler(IEnumerable instructions, ILGenerator il)
diff --git a/Source/Genes/Hive/Patches/Patch_InsectBreeder_EggFertilization.cs b/Source/Genes/Breeding/Patch_EggFertilization.cs
similarity index 97%
rename from Source/Genes/Hive/Patches/Patch_InsectBreeder_EggFertilization.cs
rename to Source/Genes/Breeding/Patch_EggFertilization.cs
index 6184b4a..d2f2dcf 100644
--- a/Source/Genes/Hive/Patches/Patch_InsectBreeder_EggFertilization.cs
+++ b/Source/Genes/Breeding/Patch_EggFertilization.cs
@@ -12,10 +12,9 @@ namespace RJW_Genes
/// 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
- /// Gene: rjw_genes_insectbreeder
///
[HarmonyPatch(typeof(SexUtility), "Aftersex")]
- static class Patch_InsectBreeder_EggFertilization
+ static class Patch_EggFertilization
{
public static void Postfix(SexProps props)
{
diff --git a/Source/Genes/Hive/Defs/HiveOffspringChanceDef.cs b/Source/Genes/Hive/Defs/HiveOffspringChanceDef.cs
deleted file mode 100644
index 77a4c28..0000000
--- a/Source/Genes/Hive/Defs/HiveOffspringChanceDef.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
- public class HiveOffspringChanceDef : Def
- {
-
- public string queenXenotype;
-
- // Chance of the below should be 1 when summed up!
- // Otherwise the roll-logic fails.
-
- public double queenChance;
- public double droneChance;
- public double workerChance;
-
- }
-}
diff --git a/Source/Genes/Hive/Genes/Gene_InsectIncubator.cs b/Source/Genes/Hive/Genes/Gene_InsectIncubator.cs
deleted file mode 100644
index d102a8a..0000000
--- a/Source/Genes/Hive/Genes/Gene_InsectIncubator.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-using RimWorld;
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-
-namespace RJW_Genes
-{
-
- ///
- /// This Gene checks for all parasitic Insect-Eggs in a Pawn:
- /// 1. Is it fertilized ? => tick it down "extra".
- /// 2. Is it not fertilized? => fertilize it with the Incubator as parent
- ///
- /// Important: The other half of the behavior for the gene (more egg-capacity) is in `Patch_InsectINcubator_PregnancyHelper`.
- ///
- public class Gene_InsectIncubator : Gene
- {
-
- const int TICK_INTERVAL = 60000 / 48; // 60k = 1 day, we want 0.5h which is 1/48th of 1 day.
-
- public override void Tick()
- {
- base.Tick();
-
- // Don't check too often, only in the HashTickInterval to safe some computing power
- if (this.pawn.IsHashIntervalTick(TICK_INTERVAL) && this.pawn.Map != null)
- {
- List eggs = new List();
- pawn.health.hediffSet.GetHediffs(ref eggs);
-
- foreach (Hediff_InsectEgg egg in eggs)
- {
- // The implanter check checks if the egg is still in an ovipositor.
- if (egg.implanter == null || egg.implanter == pawn)
- continue;
-
- if (!egg.fertilized && egg.implanter != null) {
- egg.Fertilize(pawn);
- if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"Gene_InsectIncubator: fertilized egg {egg} in {pawn}");
- }
- else if (egg.fertilized)
- {
- egg.lastTick += TICK_INTERVAL;
- }
- }
- }
- }
- }
-}
diff --git a/Source/Genes/Hive/Helpers/HiveUtility.cs b/Source/Genes/Hive/Helpers/HiveUtility.cs
index db65fb6..945db92 100644
--- a/Source/Genes/Hive/Helpers/HiveUtility.cs
+++ b/Source/Genes/Hive/Helpers/HiveUtility.cs
@@ -128,6 +128,8 @@ namespace RJW_Genes
Dictionary> dict = new Dictionary>();
IEnumerable mappingDefs = DefDatabase.AllDefs;
+ if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"Found {mappingDefs.Count()} Queen-Worker mappings in defs");
+
// Dev-Note: I first a nice lambda here, but I used nesting in favour of logging.
foreach (QueenWorkerMappingDef mappingDef in mappingDefs)
{
@@ -202,27 +204,5 @@ namespace RJW_Genes
return DefDatabase.AllDefs.Where(type => type.genes.Contains(GeneDefOf.rjw_genes_drone));
}
-
- public static HiveOffspringChanceDef LookupDefaultHiveInheritanceChances()
- {
- IEnumerable offspringChanceDefs = DefDatabase.AllDefs;
-
- List workerGenes = new List();
-
- var defaultChance = offspringChanceDefs.First(m => m.defName == "rjw_genes_default_hive_offspring_chances");
-
- if (defaultChance == null)
- ModLog.Warning("Did not find `rjw_genes_default_hive_offspring_chances`. Someone likely changed the defname!");
-
- return defaultChance;
- }
-
- public static HiveOffspringChanceDef LookupHiveInheritanceChances(XenotypeDef queenDef)
- {
- IEnumerable offspringChanceDefs = DefDatabase.AllDefs;
-
- return offspringChanceDefs.FirstOrFallback(t => t.queenXenotype == queenDef.defName, LookupDefaultHiveInheritanceChances());
- }
-
}
}
diff --git a/Source/Genes/Hive/Patches/Patch_BirthOutcome_SetHiveGenes.cs b/Source/Genes/Hive/Patches/Patch_BirthOutcome_SetHiveGenes.cs
index c075cc8..c640118 100644
--- a/Source/Genes/Hive/Patches/Patch_BirthOutcome_SetHiveGenes.cs
+++ b/Source/Genes/Hive/Patches/Patch_BirthOutcome_SetHiveGenes.cs
@@ -18,6 +18,9 @@ namespace RJW_Genes
[HarmonyPatch(typeof(PregnancyUtility), nameof(PregnancyUtility.ApplyBirthOutcome))]
public class Patch_BirthOutcome_SetHiveGenes
{
+ const double QUEEN_CHANCE = 0.01f;
+ const double DRONE_CHANCE = 0.49f;
+ const double WORKER_CHANCE = 1 - QUEEN_CHANCE - DRONE_CHANCE;
[HarmonyPostfix]
@@ -42,8 +45,6 @@ namespace RJW_Genes
if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"PostFix PregnancyUtility::ApplyBirthOutcome - Checking Hive Inheritance because {pawn} has a queen parent.");
XenotypeDef queenDef = TryFindParentQueenXenotype(pawn);
- HiveOffspringChanceDef hiveOffspringChanceDef = HiveUtility.LookupHiveInheritanceChances(queenDef);
-
// Case 1: Mother is Queen, Father is something else. Produce Worker.
if (!hasDroneParent)
{
@@ -55,22 +56,22 @@ namespace RJW_Genes
{
double roll = (new Random()).NextDouble();
// Case 2.a: New Queen born
- if (roll < hiveOffspringChanceDef.queenChance)
+ if (roll < QUEEN_CHANCE)
{
pawn.genes.SetXenotype(queenDef);
- if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"{pawn} born as a new queen with xenotype {queenDef.defName} ({hiveOffspringChanceDef.queenChance * 100}% chance,rolled {roll})");
+ if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"{pawn} born as a new queen with xenotype {queenDef.defName} ({QUEEN_CHANCE*100}% chance,rolled {roll})");
// TODO: Make a letter ?
}
// Case 2.b: New Drone born
- else if (roll < hiveOffspringChanceDef.droneChance + hiveOffspringChanceDef.queenChance)
+ else if (roll < DRONE_CHANCE + QUEEN_CHANCE)
{
XenotypeDef droneDef = TryFindParentDroneXenotype(pawn);
pawn.genes.SetXenotype(droneDef);
- if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"{pawn} born as a new drone with xenotype {droneDef.defName} ({(hiveOffspringChanceDef.droneChance + hiveOffspringChanceDef.queenChance) * 100}% chance,rolled {roll}))");
+ if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"{pawn} born as a new drone with xenotype {droneDef.defName} ({(DRONE_CHANCE + QUEEN_CHANCE) * 100}% chance,rolled {roll}))");
}
// Case 2.c: Worker
else {
- if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"{pawn} born as a worker ({(hiveOffspringChanceDef.workerChance) * 100}% chance,rolled {roll}))");
+ if (RJW_Genes_Settings.rjw_genes_detailed_debug) ModLog.Message($"{pawn} born as a worker ({(WORKER_CHANCE) * 100}% chance,rolled {roll}))");
MakeWorker(pawn, queenDef);
}
}
diff --git a/Source/RJW_Genes.cs b/Source/RJW_Genes.cs
index db4ffbf..e25feef 100644
--- a/Source/RJW_Genes.cs
+++ b/Source/RJW_Genes.cs
@@ -1,5 +1,4 @@
-using System.Collections.Generic;
-using System.Linq;
+using System.Linq;
using Verse;
namespace RJW_Genes
@@ -15,11 +14,6 @@ namespace RJW_Genes
ModLog.Message($"{HiveUtility.getQueenXenotypes().EnumerableCount()} Queen-Xenotypes ({string.Join(",", HiveUtility.getQueenXenotypes().Select(t => t.defName))})");
ModLog.Message($"{HiveUtility.getDroneXenotypes().EnumerableCount()} Drone-Xenotypes ({string.Join(",", HiveUtility.getDroneXenotypes().Select(t => t.defName))})");
ModLog.Message($"Found {HiveUtility.GetQueenWorkerMappings().Count} Queen-Worker Mappings ({string.Join(",", HiveUtility.GetQueenWorkerMappings().Keys.Select(t => t.defName))} + Default) ");
-
-
- IEnumerable offspringChanceDefs = DefDatabase.AllDefs;
- IEnumerable faultOffspringDefs = offspringChanceDefs.Where(t => t.queenChance + t.workerChance + t.workerChance > 1.02 || t.queenChance + t.workerChance + t.workerChance < 0.98 );
- ModLog.Message($"Found {offspringChanceDefs.Count()} OffspringChanceDefs, of which {faultOffspringDefs.Count()} had faulty chances ({string.Join(",", faultOffspringDefs.Select(t => t.defName))})");
}
}
}
diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj
index 6c1da44..68a3e34 100644
--- a/Source/Rjw-Genes.csproj
+++ b/Source/Rjw-Genes.csproj
@@ -43,10 +43,8 @@
-
-
-
-
+
+