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.1 1.2 1.2 - -0.15 + +0.15 -0.1 @@ -141,7 +141,7 @@ 0.15 0.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 @@ true false +
  • + +
  • rjw_genes_female_only
  • +
  • rjw_genes_no_penis
  • +
  • rjw_genes_minor_vulnerability
  • + + +
  • rjw_genes_small_male_genitalia
  • +
  • rjw_genes_big_breasts
  • +
  • Beard_NoBeardOnly
  • +
  • Hair_LongOnly
  • +
    + 0.25 + 0.1 + - rjw_genes_twinkifier @@ -230,6 +244,23 @@ true false +
  • + +
  • rjw_genes_fertile_anus
  • +
  • Beauty_Pretty
  • +
  • Delicate
  • +
  • rjw_genes_minor_vulnerability
  • +
  • rjw_genes_infectious_homosexuality
  • + + +
  • rjw_genes_small_male_genitalia
  • +
  • Beard_NoBeardOnly
  • +
  • Body_Thin
  • +
  • rjw_genes_homosexual
  • +
    + 0.25 + 0.1 +
    diff --git a/Common/Defs/HediffDefs/Hediffs_InfectiveGenderChanges.xml b/Common/Defs/HediffDefs/Hediffs_InfectiveGenderChanges.xml index 1ca0191..45537fd 100644 --- a/Common/Defs/HediffDefs/Hediffs_InfectiveGenderChanges.xml +++ b/Common/Defs/HediffDefs/Hediffs_InfectiveGenderChanges.xml @@ -102,7 +102,7 @@
  • Consciousness - -0.5 + -0.05
  • diff --git a/LoadFolders.xml b/LoadFolders.xml index 8f11ba4..d3c2a27 100644 --- a/LoadFolders.xml +++ b/LoadFolders.xml @@ -16,5 +16,6 @@
  • Mods/Android
  • Mods/VE_Genetics
  • Mods/LicentiaLabs
  • +
  • Mods/Sexperience
  • \ 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 + + +
  • + Genes/Icons/RJW_Genes_Endogene_Background + Genes/Icons/RJW_Genes_Xenogene_Background +
  • + + + + \ 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 @@ +