From eb5e3bce8147cbbce1ac9850edbcf4f4528c45be Mon Sep 17 00:00:00 2001 From: Vegapnk Date: Tue, 16 Jul 2024 16:00:37 +0200 Subject: [PATCH 01/10] Removed some VomitCum JobGivers, fixes #119 --- CHANGELOG.md | 1 + Common/Defs/HediffDefs/Hediffs_CounterCumflation.xml | 9 --------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e066a4..4bb498e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -142,6 +142,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:** diff --git a/Common/Defs/HediffDefs/Hediffs_CounterCumflation.xml b/Common/Defs/HediffDefs/Hediffs_CounterCumflation.xml index 1b30c82..282e54f 100644 --- a/Common/Defs/HediffDefs/Hediffs_CounterCumflation.xml +++ b/Common/Defs/HediffDefs/Hediffs_CounterCumflation.xml @@ -98,15 +98,6 @@
  • -0.75
  • -
  • - -
  • 0
  • -
  • 0
  • -
  • 0.75
  • -
  • 0.5
  • -
  • 0.2
  • - -
  • From ba75f6b6364f38cb0050f2aff3f1490344f94491 Mon Sep 17 00:00:00 2001 From: Vegapnk Date: Tue, 16 Jul 2024 16:26:27 +0200 Subject: [PATCH 02/10] Made Twinkifier and Feminizer Genes xml configurable --- CHANGELOG.md | 8 +++-- Common/Defs/GeneDefs/GeneDefs_SexSpecial.xml | 33 ++++++++++++++++++- .../Gene_GenitaliaResizingGene.cs | 2 -- .../Special/Defs/GeneAlteringExtension.cs | 18 ++++++++++ .../Genes/Special/Patches/Patch_Feminizer.cs | 31 +++++++---------- .../Genes/Special/Patches/Patch_Twinkifier.cs | 29 +++++++--------- Source/Rjw-Genes.csproj | 1 + 7 files changed, 81 insertions(+), 41 deletions(-) create mode 100644 Source/Genes/Special/Defs/GeneAlteringExtension.cs diff --git a/CHANGELOG.md b/CHANGELOG.md index 4bb498e..41e4e07 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. @@ -175,6 +174,11 @@ 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. + + # 2.1.0 (27-06-2024) **Additions**: 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/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/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj index 5182089..3b8204f 100644 --- a/Source/Rjw-Genes.csproj +++ b/Source/Rjw-Genes.csproj @@ -190,6 +190,7 @@ + From 913f1aad3eade5b4b47d64059f773f6258e15083 Mon Sep 17 00:00:00 2001 From: Vegapnk Date: Tue, 16 Jul 2024 16:29:01 +0200 Subject: [PATCH 03/10] Fixed Hediffs statoffsets to be more as intended --- CHANGELOG.md | 1 + Common/Defs/GeneDefs/GeneDefs_Breeding.xml | 4 ++-- Common/Defs/HediffDefs/Hediffs_InfectiveGenderChanges.xml | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41e4e07..6e346e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -177,6 +177,7 @@ 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) 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/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
  • From bd1ef6d5a279353ca4f51372599c1c12b3849233 Mon Sep 17 00:00:00 2001 From: Vegapnk Date: Tue, 16 Jul 2024 17:36:18 +0200 Subject: [PATCH 04/10] Moved Licentia Counter Hediff to right ModFolder --- .../LicentiaLabs}/Defs/HediffDefs/Hediffs_CounterCumflation.xml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {Common => Mods/LicentiaLabs}/Defs/HediffDefs/Hediffs_CounterCumflation.xml (100%) diff --git a/Common/Defs/HediffDefs/Hediffs_CounterCumflation.xml b/Mods/LicentiaLabs/Defs/HediffDefs/Hediffs_CounterCumflation.xml similarity index 100% rename from Common/Defs/HediffDefs/Hediffs_CounterCumflation.xml rename to Mods/LicentiaLabs/Defs/HediffDefs/Hediffs_CounterCumflation.xml From 05770a834e7886d33a2b950e973e8160b890210a Mon Sep 17 00:00:00 2001 From: Vegapnk Date: Tue, 16 Jul 2024 17:36:33 +0200 Subject: [PATCH 05/10] Start on Living CumBucket --- LoadFolders.xml | 1 + .../Defs/GeneDefs/Sexperience_GeneDefs.xml | 20 ++++++ .../HediffDefs/Sexperience_HediffDefs.xml | 71 +++++++++++++++++++ Source/GeneDefOf.cs | 1 + .../Cum/{ => Genes}/Gene_ChangeCumAmount.cs | 0 .../{ => Patches}/Patch_CumflationImmunity.cs | 0 .../{ => Patches}/Patch_LikesCumflation.cs | 0 .../Patch_LivingCumbucket_StackHediff.cs | 64 +++++++++++++++++ .../{ => Patches}/Patch_TransferNutrition.cs | 0 Source/HediffDefOf.cs | 2 + Source/Rjw-Genes.csproj | 9 +-- 11 files changed, 164 insertions(+), 4 deletions(-) create mode 100644 Mods/Sexperience/Defs/GeneDefs/Sexperience_GeneDefs.xml create mode 100644 Mods/Sexperience/Defs/HediffDefs/Sexperience_HediffDefs.xml rename Source/Genes/Cum/{ => Genes}/Gene_ChangeCumAmount.cs (100%) rename Source/Genes/Cum/{ => Patches}/Patch_CumflationImmunity.cs (100%) rename Source/Genes/Cum/{ => Patches}/Patch_LikesCumflation.cs (100%) create mode 100644 Source/Genes/Cum/Patches/Patch_LivingCumbucket_StackHediff.cs rename Source/Genes/Cum/{ => Patches}/Patch_TransferNutrition.cs (100%) 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/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..0a63095 --- /dev/null +++ b/Mods/Sexperience/Defs/HediffDefs/Sexperience_HediffDefs.xml @@ -0,0 +1,71 @@ + + + + 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.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 +
  • + + +
    +
    + + +
    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/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..030b784 --- /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. + /// + 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); + ModLog.Message($"Pumping the living cumbucket {pawn} (Bodysize {bodysize}) with {cumamount} cum, resulting in severity {result_severity_increase}"); + + + 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; + } + } +} 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/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 3b8204f..41ad6da 100644 --- a/Source/Rjw-Genes.csproj +++ b/Source/Rjw-Genes.csproj @@ -82,7 +82,8 @@ - + + @@ -109,10 +110,10 @@ - - + + - + From 1e667e27303cd25b00c6b72ba860860eeb93c3e7 Mon Sep 17 00:00:00 2001 From: Vegapnk Date: Tue, 16 Jul 2024 18:22:17 +0200 Subject: [PATCH 06/10] Start on Jobdriver, WIP --- .../HediffDefs/Sexperience_HediffDefs.xml | 8 ++ .../Sexperience_JobProcessCumbucket.xml | 15 +++ .../Genes/Cum/HediffComp_ProcessCumbucket.cs | 29 ++++++ ...diffsCompProperties_ProcessCumbucketMTB.cs | 36 +++++++ .../Cum/JobDriver_ProcessingCumbucket.cs | 97 +++++++++++++++++++ .../Patch_LivingCumbucket_StackHediff.cs | 4 +- Source/Rjw-Genes.csproj | 3 + 7 files changed, 190 insertions(+), 2 deletions(-) create mode 100644 Mods/Sexperience/Defs/JobDefs/Sexperience_JobProcessCumbucket.xml create mode 100644 Source/Genes/Cum/HediffComp_ProcessCumbucket.cs create mode 100644 Source/Genes/Cum/HediffsCompProperties_ProcessCumbucketMTB.cs create mode 100644 Source/Genes/Cum/JobDriver_ProcessingCumbucket.cs diff --git a/Mods/Sexperience/Defs/HediffDefs/Sexperience_HediffDefs.xml b/Mods/Sexperience/Defs/HediffDefs/Sexperience_HediffDefs.xml index 0a63095..f890bd9 100644 --- a/Mods/Sexperience/Defs/HediffDefs/Sexperience_HediffDefs.xml +++ b/Mods/Sexperience/Defs/HediffDefs/Sexperience_HediffDefs.xml @@ -14,6 +14,14 @@
  • -0.5
  • +
  • + +
  • 0
  • +
  • 0.5
  • +
  • 0.25
  • +
  • 0.1
  • + +
  • 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/Genes/Cum/HediffComp_ProcessCumbucket.cs b/Source/Genes/Cum/HediffComp_ProcessCumbucket.cs new file mode 100644 index 0000000..db3b544 --- /dev/null +++ b/Source/Genes/Cum/HediffComp_ProcessCumbucket.cs @@ -0,0 +1,29 @@ + +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) + { + ModLog.Debug("Running HediffComp_ProcessCumbucket CompPostTick"); + if (this.Props.mtbDaysPerStage[this.parent.CurStageIndex] > 0f && base.Pawn.IsHashIntervalTick(60) && Rand.MTBEventOccurs(this.Props.mtbDaysPerStage[this.parent.CurStageIndex], 60000f, 60f)) + { + + ModLog.Debug("Firing HediffComp_ProcessCumbucket CompPostTick"); + 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..194b883 --- /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(HediffsCompProperties_ProcessCumbucketMTB); + } + + 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..e1910b5 --- /dev/null +++ b/Source/Genes/Cum/JobDriver_ProcessingCumbucket.cs @@ -0,0 +1,97 @@ +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; + + ModLog.Debug("Starting Toils for Processing Cumbucket"); + + 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) + { + ModLog.Warning($"This will be spawning cum for {pawn} at {cell}"); + } + + private int ticksLeft; + + public string sourceName; + } +} diff --git a/Source/Genes/Cum/Patches/Patch_LivingCumbucket_StackHediff.cs b/Source/Genes/Cum/Patches/Patch_LivingCumbucket_StackHediff.cs index 030b784..67ec45e 100644 --- a/Source/Genes/Cum/Patches/Patch_LivingCumbucket_StackHediff.cs +++ b/Source/Genes/Cum/Patches/Patch_LivingCumbucket_StackHediff.cs @@ -17,7 +17,7 @@ namespace RJW_Genes /// /// 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. + /// The hediff can still be increased over 1.0. /// const float fluid_amount_required_for_hediff_severity_ = 100.0f; @@ -48,7 +48,6 @@ namespace RJW_Genes { float bodysize = pawn.BodySize; float result_severity_increase = cumamount / (fluid_amount_required_for_hediff_severity_ * bodysize); - ModLog.Message($"Pumping the living cumbucket {pawn} (Bodysize {bodysize}) with {cumamount} cum, resulting in severity {result_severity_increase}"); Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_filled_living_cumbucket); @@ -59,6 +58,7 @@ namespace RJW_Genes } 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/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj index 41ad6da..05e2ed3 100644 --- a/Source/Rjw-Genes.csproj +++ b/Source/Rjw-Genes.csproj @@ -82,6 +82,9 @@ + + + From 1b547094fe4cd1961091ebd3f0a61fa5fb176b5c Mon Sep 17 00:00:00 2001 From: Vegapnk Date: Tue, 16 Jul 2024 18:28:29 +0200 Subject: [PATCH 07/10] Found the wrong cast --- Source/Genes/Cum/HediffComp_ProcessCumbucket.cs | 1 + Source/Genes/Cum/HediffsCompProperties_ProcessCumbucketMTB.cs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/Genes/Cum/HediffComp_ProcessCumbucket.cs b/Source/Genes/Cum/HediffComp_ProcessCumbucket.cs index db3b544..0ec2db2 100644 --- a/Source/Genes/Cum/HediffComp_ProcessCumbucket.cs +++ b/Source/Genes/Cum/HediffComp_ProcessCumbucket.cs @@ -7,6 +7,7 @@ namespace RJW_Genes { public class HediffComp_ProcessCumbucket : HediffComp { + public HediffsCompProperties_ProcessCumbucketMTB Props { get diff --git a/Source/Genes/Cum/HediffsCompProperties_ProcessCumbucketMTB.cs b/Source/Genes/Cum/HediffsCompProperties_ProcessCumbucketMTB.cs index 194b883..919b715 100644 --- a/Source/Genes/Cum/HediffsCompProperties_ProcessCumbucketMTB.cs +++ b/Source/Genes/Cum/HediffsCompProperties_ProcessCumbucketMTB.cs @@ -11,7 +11,7 @@ namespace RJW_Genes { public HediffsCompProperties_ProcessCumbucketMTB() { - this.compClass = typeof(HediffsCompProperties_ProcessCumbucketMTB); + this.compClass = typeof(HediffComp_ProcessCumbucket); } public override IEnumerable ConfigErrors(HediffDef parentDef) From d1129fece2d1bc76dcdd2e155a0b4917bbd73d15 Mon Sep 17 00:00:00 2001 From: Vegapnk Date: Tue, 16 Jul 2024 18:34:04 +0200 Subject: [PATCH 08/10] Jobdriver works until spawning --- Source/Genes/Cum/HediffComp_ProcessCumbucket.cs | 4 +--- Source/Genes/Cum/JobDriver_ProcessingCumbucket.cs | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/Source/Genes/Cum/HediffComp_ProcessCumbucket.cs b/Source/Genes/Cum/HediffComp_ProcessCumbucket.cs index 0ec2db2..48708cb 100644 --- a/Source/Genes/Cum/HediffComp_ProcessCumbucket.cs +++ b/Source/Genes/Cum/HediffComp_ProcessCumbucket.cs @@ -18,11 +18,9 @@ namespace RJW_Genes public override void CompPostTick(ref float severityAdjustment) { - ModLog.Debug("Running HediffComp_ProcessCumbucket CompPostTick"); if (this.Props.mtbDaysPerStage[this.parent.CurStageIndex] > 0f && base.Pawn.IsHashIntervalTick(60) && Rand.MTBEventOccurs(this.Props.mtbDaysPerStage[this.parent.CurStageIndex], 60000f, 60f)) { - - ModLog.Debug("Firing HediffComp_ProcessCumbucket CompPostTick"); + 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/JobDriver_ProcessingCumbucket.cs b/Source/Genes/Cum/JobDriver_ProcessingCumbucket.cs index e1910b5..2d0496b 100644 --- a/Source/Genes/Cum/JobDriver_ProcessingCumbucket.cs +++ b/Source/Genes/Cum/JobDriver_ProcessingCumbucket.cs @@ -22,11 +22,9 @@ namespace RJW_Genes protected override IEnumerable MakeNewToils() { - if (ModsConfig.IsActive("rjw.sexperience")) + if (!ModsConfig.IsActive("rjw.sexperience")) yield break; - ModLog.Debug("Starting Toils for Processing Cumbucket"); - Toil toil = new Toil(); toil.initAction = delegate () { From 13630e6e7ca83f7668091fcc1f7a3853f604c3f6 Mon Sep 17 00:00:00 2001 From: Vegapnk Date: Tue, 16 Jul 2024 18:51:36 +0200 Subject: [PATCH 09/10] First working Cum Spawning --- Source/Genes/Cum/JobDriver_ProcessingCumbucket.cs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/Source/Genes/Cum/JobDriver_ProcessingCumbucket.cs b/Source/Genes/Cum/JobDriver_ProcessingCumbucket.cs index 2d0496b..537e441 100644 --- a/Source/Genes/Cum/JobDriver_ProcessingCumbucket.cs +++ b/Source/Genes/Cum/JobDriver_ProcessingCumbucket.cs @@ -85,7 +85,20 @@ namespace RJW_Genes private void SpawnCum(Pawn pawn, IntVec3 cell, Map map) { - ModLog.Warning($"This will be spawning cum for {pawn} at {cell}"); + 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)); + cum.stackCount = stacks; + cum.SpawnSetup(map, false); } private int ticksLeft; From 7f1fa01abde663e8ff266496de2eff94625dd906 Mon Sep 17 00:00:00 2001 From: Vegapnk Date: Tue, 16 Jul 2024 19:02:30 +0200 Subject: [PATCH 10/10] Improvements to Spawning --- .../Defs/HediffDefs/Sexperience_HediffDefs.xml | 15 +++++++++++++++ Source/Genes/Cum/JobDriver_ProcessingCumbucket.cs | 4 ++++ 2 files changed, 19 insertions(+) diff --git a/Mods/Sexperience/Defs/HediffDefs/Sexperience_HediffDefs.xml b/Mods/Sexperience/Defs/HediffDefs/Sexperience_HediffDefs.xml index f890bd9..42281b1 100644 --- a/Mods/Sexperience/Defs/HediffDefs/Sexperience_HediffDefs.xml +++ b/Mods/Sexperience/Defs/HediffDefs/Sexperience_HediffDefs.xml @@ -20,6 +20,7 @@
  • 0.5
  • 0.25
  • 0.1
  • +
  • 0.005
  • @@ -72,6 +73,20 @@ +
  • + + 10.1 + 0.1 + + -1.5 + + +
  • + Moving + -0.55 +
  • + +
    diff --git a/Source/Genes/Cum/JobDriver_ProcessingCumbucket.cs b/Source/Genes/Cum/JobDriver_ProcessingCumbucket.cs index 537e441..cb8ef6e 100644 --- a/Source/Genes/Cum/JobDriver_ProcessingCumbucket.cs +++ b/Source/Genes/Cum/JobDriver_ProcessingCumbucket.cs @@ -97,8 +97,12 @@ namespace RJW_Genes 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;