From 5b3356347277a9ec142c0c450a99950891d4414c Mon Sep 17 00:00:00 2001 From: Vegapnk Date: Tue, 21 Feb 2023 08:25:48 +0100 Subject: [PATCH] Made Aphrodisiac have a bigger range, less effect and easier to track application. seperate file --- .../Defs/HediffDefs/Hediffs_Aphrodisiac.xml | 43 ++++++++++++++++++ Common/Defs/HediffDefs/Hediffs_Fertilin.xml | 21 --------- .../Special/Gene_Aphrodisiac_Pheromones.cs | 45 +++++++++---------- 3 files changed, 64 insertions(+), 45 deletions(-) create mode 100644 Common/Defs/HediffDefs/Hediffs_Aphrodisiac.xml diff --git a/Common/Defs/HediffDefs/Hediffs_Aphrodisiac.xml b/Common/Defs/HediffDefs/Hediffs_Aphrodisiac.xml new file mode 100644 index 0000000..3d1048c --- /dev/null +++ b/Common/Defs/HediffDefs/Hediffs_Aphrodisiac.xml @@ -0,0 +1,43 @@ + + + + + + rjw_genes_aphrodisiac_pheromone + HediffWithComps + + sex drive increasing due to smelling aphrodisiac pheromones. + (1,0,0.5) + 1.0 + +
  • + -4.0 +
  • +
    + +
  • + + + 1.25 + +
  • +
  • + 0.35 + + + + 1.8 + +
  • +
  • + 0.9 + + + + 2.5 + +
  • +
    +
    + +
    \ No newline at end of file diff --git a/Common/Defs/HediffDefs/Hediffs_Fertilin.xml b/Common/Defs/HediffDefs/Hediffs_Fertilin.xml index fd56ec9..d8ee3db 100644 --- a/Common/Defs/HediffDefs/Hediffs_Fertilin.xml +++ b/Common/Defs/HediffDefs/Hediffs_Fertilin.xml @@ -1,26 +1,5 @@  - - rjw_genes_aphrodisiac_pheromone - HediffWithComps - - sex drive increasing due to smelling aphrodisiac pheromones. - (1,0,0.5) - 1.0 - -
  • - -24.0 -
  • -
    - -
  • - true - - 2 - -
  • -
    -
    rjw_genes_fertilin_lost diff --git a/Source/Genes/Special/Gene_Aphrodisiac_Pheromones.cs b/Source/Genes/Special/Gene_Aphrodisiac_Pheromones.cs index 46f25d2..e3628dc 100644 --- a/Source/Genes/Special/Gene_Aphrodisiac_Pheromones.cs +++ b/Source/Genes/Special/Gene_Aphrodisiac_Pheromones.cs @@ -5,21 +5,30 @@ using RimWorld; namespace RJW_Genes { public class Gene_Aphrodisiac_Pheromones : Gene - { + { + + // Default XML Setting is that it looses 4 Severity per day - so a "fully libido" gives 6h boost. + // This means that adding +.25 equals 1.5h of Libido. + // Tick Speed is hence set to 0.5h + + const int APHRODISIAC_DISTANCE = 25; + const int TICK_INTERVAL = 60000 / 48 ; // 60k = 1 day, we want 0.5h which is 1/48th of 1 day. + + const float SEXFREQ_THRESHOLD = 0.5f; // Summary: once every one hour check for all pawns nearby and in line of sight (same room) and add/renew a hediff which lasts for 1 hour. public override void Tick() { base.Tick(); - if (this.pawn.IsHashIntervalTick(2500) && this.pawn.Map != null) + if (this.pawn.IsHashIntervalTick(TICK_INTERVAL) && this.pawn.Map != null) { // Only spread pheromones if sexdrive above 1 float sexfrequency = this.pawn.GetStatValue(StatDef.Named("SexFrequency")); - if(sexfrequency > 1f) + if(sexfrequency > SEXFREQ_THRESHOLD) { foreach (Pawn pawn in this.AffectedPawns(this.pawn.Position, this.pawn.Map)) { - this.InduceAphrodisiac(pawn, sexfrequency); + this.InduceAphrodisiac(pawn); } } } @@ -31,7 +40,7 @@ namespace RJW_Genes foreach (Pawn pawn in map.mapPawns.AllPawns) { if (pawn != null && this.pawn != null && pawn != this.pawn - && pos.DistanceTo(pawn.Position) < 5 && GenSight.LineOfSight(pos, pawn.Position, pawn.Map) + && pos.DistanceTo(pawn.Position) < APHRODISIAC_DISTANCE && GenSight.LineOfSight(pos, pawn.Position, pawn.Map) && !GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_aphrodisiac_pheromones)) { yield return pawn; @@ -41,33 +50,21 @@ namespace RJW_Genes yield break; } - // Applies or renews a hediff which increases sexdrive for 6 hours - private void InduceAphrodisiac(Pawn pawn, float sexfrequency) + private void InduceAphrodisiac(Pawn pawn) { - Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_aphrodisiac_pheromone); + Hediff aphrodisiac = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_aphrodisiac_pheromone); - if (hediff != null) + if (aphrodisiac != null) { - hediff.Severity = 1f; + aphrodisiac.Severity += 0.25f; } else { - Hediff aphrodisiac = HediffMaker.MakeHediff(HediffDefOf.rjw_genes_aphrodisiac_pheromone, pawn); - foreach (StatModifier stat in aphrodisiac.CurStage.statFactors) - { - if (stat.stat.defName == "SexFrequency") - { - stat.value = ModifySexfrequency(pawn, sexfrequency); - pawn.health.AddHediff(aphrodisiac); - } - } + aphrodisiac = HediffMaker.MakeHediff(HediffDefOf.rjw_genes_aphrodisiac_pheromone, pawn); + aphrodisiac.Severity = 0.5f; + pawn.health.AddHediff(aphrodisiac); } } - // Function to modify aphrodisiac strength, currently has no effect, but provides an easy hook for other modders and patches. - public float ModifySexfrequency(Pawn pawn, float sexfrequency) - { - return sexfrequency; - } } }