diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0e066a4..6e346e3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -101,8 +101,7 @@ and might try to add a gene that already exists - then nothing happens.
- (Major) No Penis
- (Major) Minor Vulnerability
-These are currently hardcoded but I can change them on popular demand.
-In general minor changes are only cosmetic and wont change metabolism.
+You can configure all genes, as well as their application chance, in the Genes` XML.
*Why are these changes Genetic?*
Because this is the genes mod, and I find things here quite robust.
@@ -142,6 +141,7 @@ Because this is the genes mod, and I find things here quite robust.
- Fixed an Issue where pawns would always get the Pheromone social boost, unless they had the pheromone (#113)
- Fixed two hidden dependencies on Ideology and Royalty (#115)
- Fixed some more hidden dependencies on Ideology Icons (#118)
+- Fixed a hidden dependency on Licentialabs (#119)
**Internal:**
@@ -174,6 +174,12 @@ You can now support me with [buying me a coffee](https://buymeacoffee.com/vegapn
The mod will remain free, open source and I will not hide or lock any features.
Its just meant if you want to drop me a tip.
+**Since Beta-1** (11-07-2024)
+
+- Made the Feminizer and Twinkifier configurable with XML.
+- Typos in the Hediff Defs, tweaking of some values.
+
+
# 2.1.0 (27-06-2024)
**Additions**:
diff --git a/Common/Defs/GeneDefs/GeneDefs_Breeding.xml b/Common/Defs/GeneDefs/GeneDefs_Breeding.xml
index d9ded6c..bf67228 100644
--- a/Common/Defs/GeneDefs/GeneDefs_Breeding.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_Breeding.xml
@@ -125,7 +125,7 @@
-0.11.21.2
- -0.15
+ +0.15-0.1
@@ -141,7 +141,7 @@
0.150.25
- 0.25
+ -0.25
diff --git a/Common/Defs/GeneDefs/GeneDefs_SexSpecial.xml b/Common/Defs/GeneDefs/GeneDefs_SexSpecial.xml
index d715892..fff6f60 100644
--- a/Common/Defs/GeneDefs/GeneDefs_SexSpecial.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_SexSpecial.xml
@@ -203,9 +203,23 @@
truefalse
+
\ No newline at end of file
diff --git a/Common/Defs/HediffDefs/Hediffs_CounterCumflation.xml b/Mods/LicentiaLabs/Defs/HediffDefs/Hediffs_CounterCumflation.xml
similarity index 95%
rename from Common/Defs/HediffDefs/Hediffs_CounterCumflation.xml
rename to Mods/LicentiaLabs/Defs/HediffDefs/Hediffs_CounterCumflation.xml
index 1b30c82..282e54f 100644
--- a/Common/Defs/HediffDefs/Hediffs_CounterCumflation.xml
+++ b/Mods/LicentiaLabs/Defs/HediffDefs/Hediffs_CounterCumflation.xml
@@ -98,15 +98,6 @@
-0.75
-
-
-
0
-
0
-
0.75
-
0.5
-
0.2
-
-
diff --git a/Mods/Sexperience/Defs/GeneDefs/Sexperience_GeneDefs.xml b/Mods/Sexperience/Defs/GeneDefs/Sexperience_GeneDefs.xml
new file mode 100644
index 0000000..774a874
--- /dev/null
+++ b/Mods/Sexperience/Defs/GeneDefs/Sexperience_GeneDefs.xml
@@ -0,0 +1,20 @@
+
+
+
+
+ rjw_genes_living_cumbucket
+
+ rjw_genes_cum
+ When this Xenotype partakes in sexual activity, they store cum and produce it as an item.
+ Genes/Icons/Generous_Donor
+ 559
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Mods/Sexperience/Defs/HediffDefs/Sexperience_HediffDefs.xml b/Mods/Sexperience/Defs/HediffDefs/Sexperience_HediffDefs.xml
new file mode 100644
index 0000000..42281b1
--- /dev/null
+++ b/Mods/Sexperience/Defs/HediffDefs/Sexperience_HediffDefs.xml
@@ -0,0 +1,94 @@
+
+
+
+ rjw_genes_filled_living_cumbucket
+ HediffWithComps
+
+ This pawn is a (filled) living cum bucket. Thanks to a generous donation, this pawn will slowly generate cum for pickup.
+ (240,200,110)
+ false
+
+ false
+ false
+
+
+ -0.5
+
+
+
+
0
+
0.5
+
0.25
+
0.1
+
0.005
+
+
+
+
+
+
+
+ -0.1
+
+
+
+
+ 0.4
+ 0.8
+
+ -0.25
+
+
+
+ Moving
+ -0.05
+
+
+
+
+
+ 0.65
+ 0.75
+
+ -0.25
+
+
+
+ Moving
+ -0.1
+
+
+
+
+
+ 1.1
+ 0.6
+
+ -0.5
+
+
+
+ Moving
+ -0.15
+
+
+
+
+
+ 10.1
+ 0.1
+
+ -1.5
+
+
+
+ Moving
+ -0.55
+
+
+
+
+
+
+
+
diff --git a/Mods/Sexperience/Defs/JobDefs/Sexperience_JobProcessCumbucket.xml b/Mods/Sexperience/Defs/JobDefs/Sexperience_JobProcessCumbucket.xml
new file mode 100644
index 0000000..2c42bea
--- /dev/null
+++ b/Mods/Sexperience/Defs/JobDefs/Sexperience_JobProcessCumbucket.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+ ProcessCumbucket
+ RJW_Genes.JobDriver_ProcessingCumbucket
+ true
+ false
+ processing internal cumbucket.
+ false
+
+
+
diff --git a/Source/GeneDefOf.cs b/Source/GeneDefOf.cs
index 7f0465f..7b0b2fc 100644
--- a/Source/GeneDefOf.cs
+++ b/Source/GeneDefOf.cs
@@ -83,6 +83,7 @@ namespace RJW_Genes
[MayRequire("LustLicentia.RJWLabs")] public static readonly GeneDef rjw_genes_likes_cumflation;
[MayRequire("LustLicentia.RJWLabs")] public static readonly GeneDef rjw_genes_cumflation_immunity;
[MayRequire("LustLicentia.RJWLabs")] public static readonly GeneDef rjw_genes_generous_donor;
+ [MayRequire("rjw.sexperience")] public static readonly GeneDef rjw_genes_living_cumbucket;
// Reproduction
diff --git a/Source/Genes/Cum/Gene_ChangeCumAmount.cs b/Source/Genes/Cum/Genes/Gene_ChangeCumAmount.cs
similarity index 100%
rename from Source/Genes/Cum/Gene_ChangeCumAmount.cs
rename to Source/Genes/Cum/Genes/Gene_ChangeCumAmount.cs
diff --git a/Source/Genes/Cum/HediffComp_ProcessCumbucket.cs b/Source/Genes/Cum/HediffComp_ProcessCumbucket.cs
new file mode 100644
index 0000000..48708cb
--- /dev/null
+++ b/Source/Genes/Cum/HediffComp_ProcessCumbucket.cs
@@ -0,0 +1,28 @@
+
+using RimWorld;
+using System;
+using Verse;
+
+namespace RJW_Genes
+{
+ public class HediffComp_ProcessCumbucket : HediffComp
+ {
+
+ public HediffsCompProperties_ProcessCumbucketMTB Props
+ {
+ get
+ {
+ return (HediffsCompProperties_ProcessCumbucketMTB)this.props;
+ }
+ }
+
+ public override void CompPostTick(ref float severityAdjustment)
+ {
+ if (this.Props.mtbDaysPerStage[this.parent.CurStageIndex] > 0f && base.Pawn.IsHashIntervalTick(60) && Rand.MTBEventOccurs(this.Props.mtbDaysPerStage[this.parent.CurStageIndex], 60000f, 60f))
+ {
+ ModLog.Debug($"Triggered HediffComp_ProcessCumbucket CompPostTick - Starting a JobDriver ProcessCumbucket for {this.parent.pawn}");
+ this.Pawn.jobs.StartJob(JobMaker.MakeJob(DefDatabase.GetNamed("ProcessCumbucket")), lastJobEndCondition: Verse.AI.JobCondition.InterruptForced, resumeCurJobAfterwards: true);
+ }
+ }
+ }
+}
diff --git a/Source/Genes/Cum/HediffsCompProperties_ProcessCumbucketMTB.cs b/Source/Genes/Cum/HediffsCompProperties_ProcessCumbucketMTB.cs
new file mode 100644
index 0000000..919b715
--- /dev/null
+++ b/Source/Genes/Cum/HediffsCompProperties_ProcessCumbucketMTB.cs
@@ -0,0 +1,36 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+
+namespace RJW_Genes
+{
+ public class HediffsCompProperties_ProcessCumbucketMTB : HediffCompProperties
+ {
+ public HediffsCompProperties_ProcessCumbucketMTB()
+ {
+ this.compClass = typeof(HediffComp_ProcessCumbucket);
+ }
+
+ public override IEnumerable ConfigErrors(HediffDef parentDef)
+ {
+ foreach (string text in base.ConfigErrors(parentDef))
+ {
+ yield return text;
+ }
+ if (this.mtbDaysPerStage == null)
+ {
+ yield return "mtbDaysPerStage is not defined";
+ }
+ else if (this.mtbDaysPerStage.Count != parentDef.stages.Count)
+ {
+ yield return "mtbDaysPerStage count doesn't match Hediffs number of stages";
+ }
+ yield break;
+ }
+
+ public List mtbDaysPerStage;
+ }
+}
diff --git a/Source/Genes/Cum/JobDriver_ProcessingCumbucket.cs b/Source/Genes/Cum/JobDriver_ProcessingCumbucket.cs
new file mode 100644
index 0000000..cb8ef6e
--- /dev/null
+++ b/Source/Genes/Cum/JobDriver_ProcessingCumbucket.cs
@@ -0,0 +1,112 @@
+using LicentiaLabs;
+using System.Collections.Generic;
+using Verse;
+using Verse.AI;
+using UnityEngine;
+using System;
+using rjw;
+using RimWorld;
+
+namespace RJW_Genes
+{
+ ///
+ /// Shamelessly stolen from LicentaLabs
+ /// [Jaals Fork] https://gitgud.io/Jaaldabaoth/licentia-labs/-/blob/master/Source/LicentiaLabs/LicentiaLabs/JobDriver_VomitCum.cs
+ ///
+ class JobDriver_ProcessingCumbucket : JobDriver_Vomit
+ {
+ public override bool CanBeginNowWhileLyingDown()
+ {
+ return true;
+ }
+
+ protected override IEnumerable MakeNewToils()
+ {
+ if (!ModsConfig.IsActive("rjw.sexperience"))
+ yield break;
+
+ Toil toil = new Toil();
+ toil.initAction = delegate ()
+ {
+ this.ticksLeft = Rand.Range(150, 600);
+ int num = 0;
+ IntVec3 c;
+ for (; ; )
+ {
+ c = this.pawn.Position + GenAdj.AdjacentCellsAndInside[Rand.Range(0, 9)];
+ num++;
+ if (num > 12)
+ {
+ break;
+ }
+ if (c.InBounds(this.pawn.Map) && c.Standable(this.pawn.Map))
+ {
+ goto IL_77;
+ }
+ }
+ c = this.pawn.Position;
+ IL_77:
+ this.job.targetA = c;
+ this.pawn.pather.StopDead();
+ };
+ toil.tickAction = delegate ()
+ {
+ if (this.ticksLeft % 150 == 149)
+ {
+ if (!sourceName.NullOrEmpty())
+ {
+ if (ModsConfig.IsActive("LustLicentia.RJWLabs"))
+ FilthMaker.TryMakeFilth(this.job.targetA.Cell, base.Map, Licentia.ThingDefs.FilthCum, sourceName);
+ SpawnCum(this.pawn, this.job.targetA.Cell, base.Map);
+ }
+ else
+ {
+ if (ModsConfig.IsActive("LustLicentia.RJWLabs"))
+ FilthMaker.TryMakeFilth(this.job.targetA.Cell, base.Map, Licentia.ThingDefs.FilthCum);
+ SpawnCum(this.pawn, this.job.targetA.Cell, base.Map);
+ }
+ }
+ this.ticksLeft--;
+ if (this.ticksLeft <= 0)
+ {
+ base.ReadyForNextToil();
+ TaleRecorder.RecordTale(Licentia.TaleDefs.VomitedCum, new object[]
+ {
+ this.pawn
+ });
+ }
+ };
+ toil.defaultCompleteMode = ToilCompleteMode.Never;
+ toil.WithEffect(EffecterDefOf.Vomit, TargetIndex.A, new Color(100f, 100f, 100f, 0.5f));
+ toil.PlaySustainerOrSound(() => SoundDefOf.Vomit, 1f);
+ yield return toil;
+ yield break;
+ }
+
+ private void SpawnCum(Pawn pawn, IntVec3 cell, Map map)
+ {
+ ThingDef cumDef = DefDatabase.GetNamed("GatheredCum", true);
+
+ Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_filled_living_cumbucket);
+ if (hediff == null)
+ {
+ ModLog.Warning($"{pawn} has the JobDriver_ProcessCumbucket but does not have the Hediff for filled cumbucket.");
+ return;
+ }
+
+ Thing cum = ThingMaker.MakeThing(cumDef);
+ cum.Position = cell;
+ int stacks = Math.Max(1, (int)(hediff.Severity * 3));
+ stacks = Math.Min(stacks, 75); // 75 is the default max stacksize ...
+ cum.stackCount = stacks;
+ cum.SpawnSetup(map, false);
+
+ //TODO: Reduce this ... better?
+ hediff.Severity -= stacks / 50;
+ }
+
+ private int ticksLeft;
+
+ public string sourceName;
+ }
+}
diff --git a/Source/Genes/Cum/Patch_CumflationImmunity.cs b/Source/Genes/Cum/Patches/Patch_CumflationImmunity.cs
similarity index 100%
rename from Source/Genes/Cum/Patch_CumflationImmunity.cs
rename to Source/Genes/Cum/Patches/Patch_CumflationImmunity.cs
diff --git a/Source/Genes/Cum/Patch_LikesCumflation.cs b/Source/Genes/Cum/Patches/Patch_LikesCumflation.cs
similarity index 100%
rename from Source/Genes/Cum/Patch_LikesCumflation.cs
rename to Source/Genes/Cum/Patches/Patch_LikesCumflation.cs
diff --git a/Source/Genes/Cum/Patches/Patch_LivingCumbucket_StackHediff.cs b/Source/Genes/Cum/Patches/Patch_LivingCumbucket_StackHediff.cs
new file mode 100644
index 0000000..67ec45e
--- /dev/null
+++ b/Source/Genes/Cum/Patches/Patch_LivingCumbucket_StackHediff.cs
@@ -0,0 +1,64 @@
+using HarmonyLib;
+using rjw;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+using static System.Net.Mime.MediaTypeNames;
+
+namespace RJW_Genes
+{
+
+ [HarmonyPatch(typeof(SexUtility), nameof(SexUtility.SatisfyPersonal))]
+ public class Patch_LivingCumbucket_StackHediff
+ {
+
+ ///
+ /// This is the amount of fluid required if the pawn has a bodysize of 1, to reach a severity in the hediff of 1.
+ /// The hediff can still be increased over 1.0.
+ ///
+ const float fluid_amount_required_for_hediff_severity_ = 100.0f;
+
+ public static void Postfix(SexProps props)
+ {
+ if (!ModsConfig.IsActive("rjw.sexperience"))
+ return;
+
+ // ShortCuts: Exit Early if Pawn or Partner are null (can happen with Masturbation or other nieche-cases)
+ if (props == null || props.pawn == null || !props.hasPartner())
+ return;
+
+ Pawn pawnA = props.pawn;
+ Pawn pawnB = props.partner;
+
+ if (pawnA.genes != null && pawnA.genes.HasActiveGene(GeneDefOf.rjw_genes_living_cumbucket) && CumUtility.GetTotalFluidAmount(pawnB) > 0)
+ {
+ ProcessLivingCumbucket(pawnA, CumUtility.GetTotalFluidAmount(pawnB));
+ }
+
+ if (pawnB.genes != null && pawnB.genes.HasActiveGene(GeneDefOf.rjw_genes_living_cumbucket) && CumUtility.GetTotalFluidAmount(pawnA) > 0)
+ {
+ ProcessLivingCumbucket(pawnB, CumUtility.GetTotalFluidAmount(pawnA));
+ }
+ }
+
+ public static void ProcessLivingCumbucket(Pawn pawn, float cumamount)
+ {
+ float bodysize = pawn.BodySize;
+ float result_severity_increase = cumamount / (fluid_amount_required_for_hediff_severity_ * bodysize);
+
+
+ Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_filled_living_cumbucket);
+ if (hediff == null)
+ {
+ hediff = pawn.health.GetOrAddHediff(HediffDefOf.rjw_genes_filled_living_cumbucket);
+ hediff.Severity = 0.01f;
+ }
+
+ hediff.Severity += result_severity_increase;
+ ModLog.Debug($"Pumping the living cumbucket {pawn} (Bodysize {bodysize}) with {cumamount} cum, resulting in severity {hediff.Severity} (+{result_severity_increase})");
+ }
+ }
+}
diff --git a/Source/Genes/Cum/Patch_TransferNutrition.cs b/Source/Genes/Cum/Patches/Patch_TransferNutrition.cs
similarity index 100%
rename from Source/Genes/Cum/Patch_TransferNutrition.cs
rename to Source/Genes/Cum/Patches/Patch_TransferNutrition.cs
diff --git a/Source/Genes/GenitaliaSize/Gene_GenitaliaResizingGene.cs b/Source/Genes/GenitaliaSize/Gene_GenitaliaResizingGene.cs
index adae607..b7de209 100644
--- a/Source/Genes/GenitaliaSize/Gene_GenitaliaResizingGene.cs
+++ b/Source/Genes/GenitaliaSize/Gene_GenitaliaResizingGene.cs
@@ -17,8 +17,6 @@ namespace RJW_Genes
public abstract class Gene_GenitaliaResizingGene : RJW_Gene
{
-
-
///
/// Whether or not the gene was already applied.
/// If not, it is checked on every birthday and will be applied accordingly.
diff --git a/Source/Genes/Special/Defs/GeneAlteringExtension.cs b/Source/Genes/Special/Defs/GeneAlteringExtension.cs
new file mode 100644
index 0000000..64b40d4
--- /dev/null
+++ b/Source/Genes/Special/Defs/GeneAlteringExtension.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+
+namespace RJW_Genes
+{
+ public class GeneAlteringExtension : DefModExtension
+ {
+ public List minorGenes;
+ public List majorGenes;
+
+ public float minorApplicationChance;
+ public float majorApplicationChance;
+ }
+}
diff --git a/Source/Genes/Special/Patches/Patch_Feminizer.cs b/Source/Genes/Special/Patches/Patch_Feminizer.cs
index 952f63a..4259654 100644
--- a/Source/Genes/Special/Patches/Patch_Feminizer.cs
+++ b/Source/Genes/Special/Patches/Patch_Feminizer.cs
@@ -16,8 +16,8 @@ namespace RJW_Genes
[HarmonyPatch(typeof(SexUtility), "Aftersex")]
public static class Patch_Feminizer
{
- const float MINOR_APPLICATION_CHANCE = 0.25f; // = 25% to have a minor transformation
- const float MAJOR_APPLICATION_CHANCE = 0.10f; // = 10% to have a major transformation
+
+ static GeneAlteringExtension geneAlteringExtension = GeneDefOf.rjw_genes_feminizer.GetModExtension();
public static void Postfix(SexProps props)
{
@@ -26,6 +26,12 @@ namespace RJW_Genes
if (props.pawn.IsAnimal() || props.partner.IsAnimal())
return;
+ if (geneAlteringExtension == null)
+ {
+ ModLog.Warning("Did not find a (well-formed) GeneAlteringExtension for Feminizer");
+ return;
+ }
+
ApplyFeminization(props.pawn);
ApplyFeminization(props.partner);
}
@@ -44,12 +50,12 @@ namespace RJW_Genes
{
case float f when f > 0.8f:
{
- if (Random.NextDouble() < MAJOR_APPLICATION_CHANCE)
+ if (Random.NextDouble() < geneAlteringExtension.majorApplicationChance)
MajorChange(pawn);
} break;
case float f when f > 0.6f:
{
- if (Random.NextDouble() < MINOR_APPLICATION_CHANCE)
+ if (Random.NextDouble() < geneAlteringExtension.minorApplicationChance)
MinorChange(pawn);
} break;
default:
@@ -57,19 +63,11 @@ namespace RJW_Genes
ModLog.Debug($"Tried to feminize {pawn} - severity of feminization was too low ({hediff.def} @ {hediff.Severity} - {hediff.Label})") ;
} break;
}
-
}
private static void MinorChange(Pawn pawn)
{
- List possibleGenes = new List() {
- GeneDefOf.rjw_genes_small_male_genitalia,
- GeneDefOf.rjw_genes_big_breasts,
- GeneDefOf.rjw_genes_no_cum,
- DefDatabase.GetNamed("Beard_NoBeardOnly"),
- DefDatabase.GetNamed("Hair_LongOnly")
- };
-
+ List possibleGenes = geneAlteringExtension.minorGenes.ToList();
GeneDef chosen = possibleGenes.RandomElement();
if (chosen == null)
{
@@ -90,12 +88,7 @@ namespace RJW_Genes
private static void MajorChange(Pawn pawn)
{
- List possibleGenes = new List() {
- GeneDefOf.rjw_genes_female_only,
- GeneDefOf.rjw_genes_no_penis,
- GeneDefOf.rjw_genes_minor_vulnerability,
- };
-
+ List possibleGenes = geneAlteringExtension.majorGenes.ToList();
GeneDef chosen = possibleGenes.RandomElement();
if (chosen == null)
{
diff --git a/Source/Genes/Special/Patches/Patch_Twinkifier.cs b/Source/Genes/Special/Patches/Patch_Twinkifier.cs
index 87b43bc..b7205fb 100644
--- a/Source/Genes/Special/Patches/Patch_Twinkifier.cs
+++ b/Source/Genes/Special/Patches/Patch_Twinkifier.cs
@@ -16,8 +16,8 @@ namespace RJW_Genes
[HarmonyPatch(typeof(SexUtility), "Aftersex")]
public static class Patch_Twinkifier
{
- const float MINOR_APPLICATION_CHANCE = 0.25f; // = 25% to have a minor transformation
- const float MAJOR_APPLICATION_CHANCE = 0.10f; // = 10% to have a major transformation
+
+ static GeneAlteringExtension geneAlteringExtension = GeneDefOf.rjw_genes_twinkifier.GetModExtension();
public static void Postfix(SexProps props)
{
@@ -26,6 +26,12 @@ namespace RJW_Genes
if (props.pawn.IsAnimal() || props.partner.IsAnimal())
return;
+ if (geneAlteringExtension == null)
+ {
+ ModLog.Warning("Did not find a (well-formed) GeneAlteringExtension for Twinkifier");
+ return;
+ }
+
ApplyTwinkification(props.pawn);
ApplyTwinkification(props.partner);
}
@@ -44,12 +50,12 @@ namespace RJW_Genes
{
case float f when f > 0.8f:
{
- if (Random.NextDouble() < MAJOR_APPLICATION_CHANCE)
+ if (Random.NextDouble() < geneAlteringExtension.majorApplicationChance)
MajorChange(pawn);
} break;
case float f when f > 0.6f:
{
- if (Random.NextDouble() < MINOR_APPLICATION_CHANCE)
+ if (Random.NextDouble() < geneAlteringExtension.minorApplicationChance)
MinorChange(pawn);
} break;
default:
@@ -62,12 +68,7 @@ namespace RJW_Genes
private static void MinorChange(Pawn pawn)
{
- List possibleGenes = new List() {
- GeneDefOf.rjw_genes_small_male_genitalia,
- DefDatabase.GetNamed("Beard_NoBeardOnly"),
- DefDatabase.GetNamed("Body_Thin"),
- GeneDefOf.rjw_genes_homosexual
- };
+ List possibleGenes = geneAlteringExtension.minorGenes.ToList();
GeneDef chosen = possibleGenes.RandomElement();
if (chosen == null)
@@ -89,13 +90,7 @@ namespace RJW_Genes
private static void MajorChange(Pawn pawn)
{
- List possibleGenes = new List() {
- GeneDefOf.rjw_genes_fertile_anus,
- DefDatabase.GetNamed("Beauty_Pretty"),
- DefDatabase.GetNamed("Delicate"),
- GeneDefOf.rjw_genes_minor_vulnerability,
- GeneDefOf.rjw_genes_infectious_homosexuality
- };
+ List possibleGenes = geneAlteringExtension.majorGenes.ToList();
GeneDef chosen = possibleGenes.RandomElement();
if (chosen == null)
diff --git a/Source/HediffDefOf.cs b/Source/HediffDefOf.cs
index 4214041..2cc03fc 100644
--- a/Source/HediffDefOf.cs
+++ b/Source/HediffDefOf.cs
@@ -29,5 +29,7 @@ namespace RJW_Genes
public static readonly HediffDef OvaryAgitator;
public static readonly HediffDef Bioscaffold;
+
+ [MayRequire("rjw.sexperience")] public static readonly HediffDef rjw_genes_filled_living_cumbucket;
}
}
diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj
index 5182089..05e2ed3 100644
--- a/Source/Rjw-Genes.csproj
+++ b/Source/Rjw-Genes.csproj
@@ -82,7 +82,11 @@
-
+
+
+
+
+
@@ -109,10 +113,10 @@
-
-
+
+
-
+
@@ -190,6 +194,7 @@
+