diff --git a/Common/Defs/Genes/GeneDefs_Cosmetic.xml b/Common/Defs/Genes/GeneDefs_Cosmetic.xml
index f49b690..54dfe41 100644
--- a/Common/Defs/Genes/GeneDefs_Cosmetic.xml
+++ b/Common/Defs/Genes/GeneDefs_Cosmetic.xml
@@ -5,7 +5,6 @@
true
Wing
- Wings
Tailbone
diff --git a/Common/Defs/HediffDefs/Hediffs_Succubus.xml b/Common/Defs/HediffDefs/Hediffs_Fertilin.xml
similarity index 100%
rename from Common/Defs/HediffDefs/Hediffs_Succubus.xml
rename to Common/Defs/HediffDefs/Hediffs_Fertilin.xml
diff --git a/Source/GeneDefOf.cs b/Source/GeneDefOf.cs
index 132fbc3..7637d57 100644
--- a/Source/GeneDefOf.cs
+++ b/Source/GeneDefOf.cs
@@ -85,6 +85,8 @@ namespace RJW_Genes
public static readonly GeneDef rjw_genes_vaginal_absorber;
public static readonly GeneDef rjw_genes_anal_absorber;
public static readonly GeneDef rjw_genes_drainer;
+ public static readonly GeneDef rjw_genes_seduce;
+ public static readonly GeneDef rjw_genes_paralysingkiss;
// Cosmetic
public static readonly GeneDef rjw_genes_succubus_tail;
@@ -96,4 +98,5 @@ namespace RJW_Genes
public static readonly MentalBreakDef rjw_genes_lifeforce_randomrape;
}
+
}
diff --git a/Source/Genes/GeneUtility.cs b/Source/Genes/GeneUtility.cs
index 79d77f0..9ec55c4 100644
--- a/Source/Genes/GeneUtility.cs
+++ b/Source/Genes/GeneUtility.cs
@@ -6,16 +6,7 @@ namespace RJW_Genes
{
public class GeneUtility
{
- //Instead of seperate functions this should be simpeler
- public static bool HasGeneNullCheck(Pawn pawn, GeneDef genedef)
- {
- if (pawn.genes == null)
- {
- return false;
- }
- return pawn.genes.HasGene(genedef);
- }
-
+
//Split function so I can offsetlifeforce from gene without needing to look for the gene agian (for the constant drain tick)
public static Gene_LifeForce GetLifeForceGene(Pawn pawn)
{
@@ -35,10 +26,11 @@ namespace RJW_Genes
{
if (old_value > 0.2f && drain.Resource.Value <= 0.2f)
{
- //Mood debuff
+ //TODO: Mood debuff
}
else if (old_value > 0f && drain.Resource.Value <= 0f)
{
+ Pawn pawn = drain.Pawn;
if (!drain.Pawn.health.hediffSet.HasHediff(HediffDefOf.rjw_genes_fertilin_craving))
{
drain.Pawn.health.AddHediff(HediffDefOf.rjw_genes_fertilin_craving);
@@ -46,24 +38,6 @@ namespace RJW_Genes
}
}
- public static bool IsMechbreeder(Pawn pawn)
- {
- if (pawn.genes == null)
- {
- return false;
- }
- return pawn.genes.HasGene(GeneDefOf.rjw_genes_mechbreeder);
- }
-
- public static bool HasLifeForce(Pawn pawn)
- {
- if (pawn.genes == null)
- {
- return false;
- }
- return pawn.genes.HasGene(GeneDefOf.rjw_genes_lifeforce);
- }
-
public static bool HasLowLifeForce(Pawn pawn)
{
if (HasLifeForce(pawn))
@@ -90,42 +64,6 @@ namespace RJW_Genes
return false;
}
- public static bool IsInsectIncubator(Pawn pawn)
- {
- if (pawn.genes == null)
- {
- return false;
- }
- return pawn.genes.HasGene(GeneDefOf.rjw_genes_insectincubator);
- }
-
- public static bool IsYouthFountain(Pawn pawn)
- {
- if (pawn.genes == null)
- {
- return false;
- }
- return pawn.genes.HasGene(GeneDefOf.rjw_genes_youth_fountain);
- }
-
- public static bool IsAgeDrainer(Pawn pawn)
- {
- if (pawn.genes == null)
- {
- return false;
- }
- return pawn.genes.HasGene(GeneDefOf.rjw_genes_sex_age_drain);
- }
-
- public static bool IsInsectBreeder(Pawn pawn)
- {
- if (pawn.genes == null)
- {
- return false;
- }
- return pawn.genes.HasGene(GeneDefOf.rjw_genes_insectbreeder);
- }
-
public static float MaxEggSizeMul(Pawn pawn)
{
float MaxEggSize = 1;
@@ -135,51 +73,6 @@ namespace RJW_Genes
}
return MaxEggSize;
}
-
- internal static bool IsElastic(Pawn pawn)
- {
- if (pawn.genes == null)
- {
- return false;
- }
- return pawn.genes.HasGene(GeneDefOf.rjw_genes_elasticity);
- }
-
- public static bool IsCumflationImmune(Pawn pawn)
- {
- if (pawn.genes == null)
- {
- return false;
- }
- return pawn.genes.HasGene(GeneDefOf.rjw_genes_cumflation_immunity);
- }
- public static bool IsGenerousDonor(Pawn pawn)
- {
- if (pawn.genes == null)
- {
- return false;
- }
- return pawn.genes.HasGene(GeneDefOf.rjw_genes_generous_donor);
- }
-
- public static bool isPussyHealer(Pawn pawn)
- {
- if (pawn.genes == null)
- {
- return false;
- }
- return pawn.genes.HasGene(GeneDefOf.rjw_genes_pussyhealing);
- }
-
- public static bool IsUnbreakable(Pawn pawn)
- {
- if (pawn.genes == null)
- {
- return false;
- }
- return pawn.genes.HasGene(GeneDefOf.rjw_genes_unbreakable);
- }
-
public static List GetGenitaliaResizingGenes(Pawn pawn)
{
var ResizingGenes = new List();
@@ -194,5 +87,36 @@ namespace RJW_Genes
return ResizingGenes;
}
+
+ ///
+ /// Unified small check for a pawn if it has a specified Gene.
+ /// Handles some errors and returns false as default.
+ ///
+ /// The pawn for which to look up a gene.
+ /// The gene to look up.
+ ///
+ public static bool HasGeneNullCheck(Pawn pawn, GeneDef genedef)
+ {
+ if (pawn.genes == null)
+ {
+ return false;
+ }
+ return pawn.genes.HasGene(genedef);
+ }
+
+ public static bool HasLifeForce(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_lifeforce); }
+ public static bool IsMechbreeder(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_mechbreeder); }
+ public static bool IsInsectIncubator(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_insectincubator); }
+ public static bool IsYouthFountain(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_youth_fountain); }
+ public static bool IsAgeDrainer(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_sex_age_drain); }
+ public static bool IsInsectBreeder(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_insectbreeder); }
+ public static bool IsElastic(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_elasticity); }
+ public static bool IsCumflationImmune(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_cumflation_immunity); }
+ public static bool IsGenerousDonor(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_generous_donor); }
+ public static bool IsPussyHealer(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_pussyhealing); }
+ public static bool IsUnbreakable(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_unbreakable); }
+ public static bool HasParalysingKiss(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_paralysingkiss); }
+ public static bool HasSeduce(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_seduce); }
+ public static bool IsSexualDrainer(Pawn pawn) { return HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_drainer); }
}
}
\ No newline at end of file
diff --git a/Source/Genes/Life_Force/Abilities/AbilityUtility.cs b/Source/Genes/Life_Force/Abilities/AbilityUtility.cs
index 3f18b71..77fba03 100644
--- a/Source/Genes/Life_Force/Abilities/AbilityUtility.cs
+++ b/Source/Genes/Life_Force/Abilities/AbilityUtility.cs
@@ -23,11 +23,11 @@ namespace RJW_Genes
FloatRange tendQualityRange;
tendQualityRange.min = 0.4f;
tendQualityRange.max = 0.8f;
- if (GeneUtility.isPussyHealer(pawn))
+ if (GeneUtility.IsPussyHealer(pawn))
{
Heal(partner, tendQualityRange);
}
- if (GeneUtility.isPussyHealer(partner))
+ if (GeneUtility.IsPussyHealer(partner))
{
Heal(pawn, tendQualityRange);
}
diff --git a/Source/Genes/Life_Force/Abilities/CompAbilityEffect_LifeForceCost.cs b/Source/Genes/Life_Force/Abilities/CompAbilityEffect_LifeForceCost.cs
index d291185..44aec81 100644
--- a/Source/Genes/Life_Force/Abilities/CompAbilityEffect_LifeForceCost.cs
+++ b/Source/Genes/Life_Force/Abilities/CompAbilityEffect_LifeForceCost.cs
@@ -1,9 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Runtime.CompilerServices;
-using System.Text;
-using Verse;
+using Verse;
using Verse.AI;
using RimWorld;
namespace RJW_Genes
diff --git a/Source/Genes/Life_Force/Abilities/CompAbilityEffect_Seduce.cs b/Source/Genes/Life_Force/Abilities/CompAbilityEffect_Seduce.cs
index 678ab48..b8819a8 100644
--- a/Source/Genes/Life_Force/Abilities/CompAbilityEffect_Seduce.cs
+++ b/Source/Genes/Life_Force/Abilities/CompAbilityEffect_Seduce.cs
@@ -54,6 +54,14 @@ namespace RJW_Genes
Messages.Message("bestiality is disabled", pawn, MessageTypeDefOf.RejectInput, false);
}
return false;
+ }
+ else if (GeneUtility.HasSeduce(pawn))
+ {
+ if (throwMessages)
+ {
+ Messages.Message(pawn.Name + " cannot be seduced, as they also have the Seduce-Ability", pawn, MessageTypeDefOf.RejectInput, false);
+ }
+ return false;
}
else if (pawn.Downed)
{
diff --git a/Source/Genes/Special/Gene_Aphrodisiac_Pheromones_.cs b/Source/Genes/Special/Gene_Aphrodisiac_Pheromones.cs
similarity index 67%
rename from Source/Genes/Special/Gene_Aphrodisiac_Pheromones_.cs
rename to Source/Genes/Special/Gene_Aphrodisiac_Pheromones.cs
index 0500366..46f25d2 100644
--- a/Source/Genes/Special/Gene_Aphrodisiac_Pheromones_.cs
+++ b/Source/Genes/Special/Gene_Aphrodisiac_Pheromones.cs
@@ -1,10 +1,4 @@
-using HarmonyLib;
-using rjw;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+using System.Collections.Generic;
using Verse;
using RimWorld;
@@ -13,13 +7,13 @@ namespace RJW_Genes
public class Gene_Aphrodisiac_Pheromones : Gene
{
- //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.
+ // 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)
{
- //Only spread pheromones if sexdrive above 1
+ // Only spread pheromones if sexdrive above 1
float sexfrequency = this.pawn.GetStatValue(StatDef.Named("SexFrequency"));
if(sexfrequency > 1f)
{
@@ -31,21 +25,23 @@ namespace RJW_Genes
}
}
- //Creatus an IEnumerable of all pawns which are closeby and in lineofsight, self and other pawns with aphrodisiac pheromones gene are skipped (to prevent loops).
+ // Creates an IEnumerable of all pawns which are closeby and in lineofsight, self and other pawns with aphrodisiac pheromones gene are skipped (to prevent loops).
private IEnumerable AffectedPawns(IntVec3 pos, Map map)
{
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) && !GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_aphrodisiac_pheromones))
+ if (pawn != null && this.pawn != null && pawn != this.pawn
+ && pos.DistanceTo(pawn.Position) < 5 && GenSight.LineOfSight(pos, pawn.Position, pawn.Map)
+ && !GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_aphrodisiac_pheromones))
{
yield return pawn;
}
}
- //IEnumerator enumerator = null;
+
yield break;
}
- //Applies or renews a hediff which increases sexdrive for 1 hours
+ // Applies or renews a hediff which increases sexdrive for 6 hours
private void InduceAphrodisiac(Pawn pawn, float sexfrequency)
{
Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_aphrodisiac_pheromone);
@@ -68,7 +64,7 @@ namespace RJW_Genes
}
}
- //Function to modify aphrodisiac strength, currently has no effect, but it's an easy hook for other modders.
+ // 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;
diff --git a/Source/Interactions/SubSuccubusTailCustomRequirementHandler.cs b/Source/Interactions/SubSuccubusTailCustomRequirementHandler.cs
index 5824aa5..9bd8289 100644
--- a/Source/Interactions/SubSuccubusTailCustomRequirementHandler.cs
+++ b/Source/Interactions/SubSuccubusTailCustomRequirementHandler.cs
@@ -1,17 +1,9 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Verse;
-using RimWorld;
+using Verse;
using rjw.Modules.Interactions;
using rjw.Modules.Interactions.Internals.Implementation;
using rjw.Modules.Interactions.Objects;
-using rjw;
-using rjw.Modules.Interactions.Enums;
-//Modefied code based of RJW-AI code at https://gitgud.io/Ed86/rjw-ia/-/tree/master/
+//Modified code based of RJW-AI code at https://gitgud.io/Ed86/rjw-ia/-/tree/master/
namespace RJW_Genes
{
[StaticConstructorOnStartup]
@@ -25,7 +17,6 @@ namespace RJW_Genes
}
}
-
static SubSuccubusTailCustomRequirementHandler()
{
Register();
@@ -50,3 +41,4 @@ namespace RJW_Genes
//public static readonly StringListDef filter = DefDatabase.GetNamed("SubSuccubusTailFilter");
}
}
+
diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj
index f7ab5e9..f4ab208 100644
--- a/Source/Rjw-Genes.csproj
+++ b/Source/Rjw-Genes.csproj
@@ -162,7 +162,7 @@
-
+