diff --git a/Common/Defs/Genes/GeneDefs_Cosmetic.xml b/Common/Defs/Genes/GeneDefs_Cosmetic.xml index 54dfe41..f49b690 100644 --- a/Common/Defs/Genes/GeneDefs_Cosmetic.xml +++ b/Common/Defs/Genes/GeneDefs_Cosmetic.xml @@ -5,6 +5,7 @@ true
  • Wing
  • +
  • Wings
  • Tailbone diff --git a/Common/Defs/HediffDefs/Hediffs_Fertilin.xml b/Common/Defs/HediffDefs/Hediffs_Succubus.xml similarity index 100% rename from Common/Defs/HediffDefs/Hediffs_Fertilin.xml rename to Common/Defs/HediffDefs/Hediffs_Succubus.xml diff --git a/Source/GeneDefOf.cs b/Source/GeneDefOf.cs index 7637d57..132fbc3 100644 --- a/Source/GeneDefOf.cs +++ b/Source/GeneDefOf.cs @@ -85,8 +85,6 @@ 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; @@ -98,5 +96,4 @@ namespace RJW_Genes public static readonly MentalBreakDef rjw_genes_lifeforce_randomrape; } - } diff --git a/Source/Genes/GeneUtility.cs b/Source/Genes/GeneUtility.cs index 9ec55c4..79d77f0 100644 --- a/Source/Genes/GeneUtility.cs +++ b/Source/Genes/GeneUtility.cs @@ -6,7 +6,16 @@ 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) { @@ -26,11 +35,10 @@ namespace RJW_Genes { if (old_value > 0.2f && drain.Resource.Value <= 0.2f) { - //TODO: Mood debuff + //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); @@ -38,6 +46,24 @@ 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)) @@ -64,6 +90,42 @@ 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; @@ -73,6 +135,51 @@ 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(); @@ -87,36 +194,5 @@ 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 77fba03..3f18b71 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 44aec81..d291185 100644 --- a/Source/Genes/Life_Force/Abilities/CompAbilityEffect_LifeForceCost.cs +++ b/Source/Genes/Life_Force/Abilities/CompAbilityEffect_LifeForceCost.cs @@ -1,4 +1,9 @@ -using Verse; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +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 b8819a8..678ab48 100644 --- a/Source/Genes/Life_Force/Abilities/CompAbilityEffect_Seduce.cs +++ b/Source/Genes/Life_Force/Abilities/CompAbilityEffect_Seduce.cs @@ -54,14 +54,6 @@ 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 46f25d2..0500366 100644 --- a/Source/Genes/Special/Gene_Aphrodisiac_Pheromones.cs +++ b/Source/Genes/Special/Gene_Aphrodisiac_Pheromones_.cs @@ -1,4 +1,10 @@ -using System.Collections.Generic; +using HarmonyLib; +using rjw; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; using Verse; using RimWorld; @@ -7,13 +13,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) { @@ -25,23 +31,21 @@ namespace RJW_Genes } } - // 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). + //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). 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 6 hours + //Applies or renews a hediff which increases sexdrive for 1 hours private void InduceAphrodisiac(Pawn pawn, float sexfrequency) { Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_aphrodisiac_pheromone); @@ -64,7 +68,7 @@ namespace RJW_Genes } } - // Function to modify aphrodisiac strength, currently has no effect, but provides an easy hook for other modders and patches. + //Function to modify aphrodisiac strength, currently has no effect, but it's an easy hook for other modders. public float ModifySexfrequency(Pawn pawn, float sexfrequency) { return sexfrequency; diff --git a/Source/Interactions/SubSuccubusTailCustomRequirementHandler.cs b/Source/Interactions/SubSuccubusTailCustomRequirementHandler.cs index 9bd8289..5824aa5 100644 --- a/Source/Interactions/SubSuccubusTailCustomRequirementHandler.cs +++ b/Source/Interactions/SubSuccubusTailCustomRequirementHandler.cs @@ -1,9 +1,17 @@ -using Verse; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; +using RimWorld; using rjw.Modules.Interactions; using rjw.Modules.Interactions.Internals.Implementation; using rjw.Modules.Interactions.Objects; +using rjw; +using rjw.Modules.Interactions.Enums; -//Modified code based of RJW-AI code at https://gitgud.io/Ed86/rjw-ia/-/tree/master/ +//Modefied code based of RJW-AI code at https://gitgud.io/Ed86/rjw-ia/-/tree/master/ namespace RJW_Genes { [StaticConstructorOnStartup] @@ -17,6 +25,7 @@ namespace RJW_Genes } } + static SubSuccubusTailCustomRequirementHandler() { Register(); @@ -41,4 +50,3 @@ namespace RJW_Genes //public static readonly StringListDef filter = DefDatabase.GetNamed("SubSuccubusTailFilter"); } } - diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj index f4ab208..f7ab5e9 100644 --- a/Source/Rjw-Genes.csproj +++ b/Source/Rjw-Genes.csproj @@ -162,7 +162,7 @@ - +