Compare commits

...

11 commits

Author SHA1 Message Date
Telanda-DDS
c20f36dafc More Changelog Fixes 2026-07-23 16:27:16 +10:00
Telanda-DDS
8d5548287b Typo's fixed in CHangelog 2026-07-23 16:26:05 +10:00
Telanda-DDS
4380806644 DLL Commit
Fluid Production Rebalance
2026-07-23 16:20:03 +10:00
Telanda-DDS
faec8878b1 Updates to Changelog. 2026-07-23 16:05:45 +10:00
Telanda-DDS
f65a11efaa Hormonal Saliva Gene Fixes. 2026-07-23 15:54:32 +10:00
Telanda-DDS
6d91102980 Fix to Littered Births.
Fix to Gender Genes to make sure they only fire if active.
Version increment to 2.7
2026-07-23 14:24:34 +10:00
Telanda-DDS
ec92b082b0 Update Load order & Xenotype cleanup. 2026-07-23 14:19:32 +10:00
Telanda-DDS
1d2bb665ec Fixed changes to Big & Small Lamia & Sneks Xenotype Names. (Thank you RHS0 on discord for the report!) 2026-07-23 14:11:19 +10:00
Telanda-DDS
0c7a9c3c2e Gender Fluid no longer allows sex change while pregnant. 2026-05-18 15:45:27 +10:00
Telanda-DDS
d4bbb6e5ff Migrated Genital Genes to new Post-Sexualizeing system, removing likelyhood of Duplicates. 2026-05-18 15:45:27 +10:00
Telanda-DDS
15fc3201b9 Rework of Gene Application order for New pawns. 2026-05-18 15:45:26 +10:00
49 changed files with 380 additions and 184 deletions

Binary file not shown.

View file

@ -8,6 +8,9 @@
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
</li>
<li Class="RJW_Genes.SexualizerGeneExtension">
<order>20</order>
</li>
</modExtensions>
</GeneDef>

View file

@ -11,6 +11,9 @@
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
</li>
<li Class="RJW_Genes.SexualizerGeneExtension">
<order>50</order>
</li>
</modExtensions>
</GeneDef>
@ -72,6 +75,9 @@
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
</li>
<li Class="RJW_Genes.SexualizerGeneExtension">
<order>50</order>
</li>
</modExtensions>
</GeneDef>

View file

@ -5,11 +5,14 @@
<!--These Genes need to be loaded quite late, otherwise e.g. genitalia types will re-roll and overrule genitalia size-->
<modExtensions>
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VEF.Genes.GeneExtension">
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
</li>
</modExtensions>
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VEF.Genes.GeneExtension">
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
</li>
<li Class="RJW_Genes.SexualizerGeneExtension">
<order>50</order>
</li>
</modExtensions>
</GeneDef>
<!-- Penis -->

View file

@ -14,6 +14,9 @@
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
</li>
<li Class="RJW_Genes.SexualizerGeneExtension">
<order>30</order>
</li>
</modExtensions>
</GeneDef>

View file

@ -11,9 +11,9 @@
<xpath>Defs/XenotypeDef[defName = "LoS_Lamia"
or defName = "LoS_TrueLamia"
or defName = "Naga"
or defName = "Los_Adderman"
or defName = "Los_Anacondaman"
or defName = "Los_Snakeman"]/genes</xpath>
or defName = "LoS_Adderman"
or defName = "LoS_Anacondaman"
or defName = "LoS_Snakeman"]/genes</xpath>
<value>
<li>rjw_genes_reptilian_genitalia</li>
</value>

View file

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Patch>
<Operation Class="PatchOperationFindMod">
<mods>
<li>Biotech Nyaron</li>
</mods>
<match Class="PatchOperationAdd">
<xpath>Defs/XenotypeDef[defName="Nyaron"]/genes</xpath>
<value>
<li>rjw_genes_feline_genitalia</li>
</value>
</match>
</Operation>
</Patch>

View file

@ -1,36 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
<Operation Class="PatchOperationSequence">
<operations>
<li Class="PatchOperationFindMod">
<mods>
<li>Imphilee Xeno</li>
</mods>
<match Class="PatchOperationAdd">
<xpath>Defs/XenotypeDef[defName="LD_Imphilee"]/genes</xpath>
<value>
<li>rjw_genes_tight_female_genitalia</li>
<li>rjw_genes_small_breasts</li>
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_elasticity</li>
<li>rjw_genes_demonic_genitalia</li>
</value>
</match>
</li>
<li Class="PatchOperationFindMod">
<mods>
<li>Imphilee Xeno</li>
</mods>
<match Class="PatchOperationAdd">
<xpath>Defs/XenotypeDef[defName="LD_Imphilee_Overlord"]/genes</xpath>
<value>
<li>rjw_genes_tight_female_genitalia</li>
<li>rjw_genes_small_breasts</li>
<li MayRequire="LustLicentia.RJWLabs">rjw_genes_elasticity</li>
<li>rjw_genes_demonic_genitalia</li>
<li>rjw_genes_rapist</li>
</value>
</match>
</li>
</operations>
</Operation>
</Patch>

View file

@ -12,4 +12,16 @@
</value>
</match>
</Operation>
<Operation Class="PatchOperationFindMod">
<mods>
<li>[CAP]Biotech Nyaron HAR Addition</li>
</mods>
<match Class="PatchOperationAdd">
<xpath>Defs/XenotypeDef[defName="Nyaron"]/genes</xpath>
<value>
<li>rjw_genes_tight_female_genitalia</li>
<li>rjw_genes_feline_genitalia</li>
</value>
</match>
</Operation>
</Patch>

View file

@ -2,10 +2,10 @@
<Patch>
<Operation Class="PatchOperationFindMod">
<mods>
<li>Papou Race : emotional birds</li>
<li>Papou Xenotype: Emotional Birds (Continued)</li>
</mods>
<match Class="PatchOperationAdd">
<xpath>Defs/XenotypeDef[defName="papago"]/genes</xpath>
<xpath>Defs/XenotypeDef[defName="Papago"]/genes</xpath>
<value>
<li>rjw_genes_orgasm_rush</li>
<li>rjw_genes_tight_female_genitalia</li>

View file

@ -7,7 +7,7 @@
<match Class="PatchOperationAdd">
<xpath>Defs/XenotypeDef[defName="RBSF_Faun"]/genes</xpath>
<value>
<li>rjw_genes_equine_genitalia</li>
<li>rjw_genes_Needle_genitalia</li>
<li>rjw_genes_zoophile</li>
<li>rjw_genes_mating_call</li>
<li>rjw_genes_tight_female_genitalia</li>

View file

@ -7,8 +7,10 @@
<match Class="PatchOperationAdd">
<xpath>Defs/XenotypeDef[defName="RBSF_Satyr"]/genes</xpath>
<value>
<li>rjw_genes_equine_genitalia</li>
<li>rjw_genes_aphrodisiac_pheromones</li>
<li>rjw_genes_much_fluid</li>
<li>rjw_genes_zoophile</li>
</value>
</match>
</Operation>

View file

@ -15,8 +15,8 @@ Global
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{D7D21B4A-1DA7-41D8-B202-C58CA8FA62AA}.Debug|Any CPU.ActiveCfg = Release|Any CPU
{D7D21B4A-1DA7-41D8-B202-C58CA8FA62AA}.Debug|Any CPU.Build.0 = Release|Any CPU
{D7D21B4A-1DA7-41D8-B202-C58CA8FA62AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D7D21B4A-1DA7-41D8-B202-C58CA8FA62AA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D7D21B4A-1DA7-41D8-B202-C58CA8FA62AA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D7D21B4A-1DA7-41D8-B202-C58CA8FA62AA}.Release|Any CPU.Build.0 = Release|Any CPU
{3BF2C17E-C492-44DA-8BC4-7AF6ADEB6468}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

View file

@ -11,5 +11,4 @@ namespace RJW_Genes
{
public float chance;
}
}

View file

@ -0,0 +1,25 @@
using Verse;
namespace RJW_Genes
{
/// <summary>
/// Used by the 'On Sexualization' Patch to determine if a gene needs to be applied, and what order to do so.
/// This Extension is applied to RJW related genes that Depend on the order they are Applied in,
/// using the following basic values
///
/// 10 Unused.
/// 20 Genes that Alter the Number of sexual parts a Pawn may have. (Includes the Zero Genes?)
/// 30 Genes that Alter the type of genitals a Pawn may have.
/// 40 Genes that Add a specific genital type to the pawn.
/// 50 Genes that alter the values on a pawns genitals such as size or fluid type.
/// </summary>
#pragma warning disable CS0649 //Disable the warning for a variable that is 'unset'.
internal class SexualizerGeneExtension : DefModExtension
{
public int order;
}
#pragma warning restore CS0649
}

View file

@ -0,0 +1,50 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
namespace RJW_Genes
{
internal static class Patch_RJWSexualizer
{
/// <summary>
/// This Harmony patch is called after Sexualiser, and runs all the genes on that pawn that would have not been functional before sexualization.
/// </summary>
public static void ApplyGenesPostfix(Pawn pawn)
{
//Generate a sorted list of Genes that need to be processed.
if (pawn == null) return;
Dictionary<int,List<Gene>> geneDict = new Dictionary<int,List<Gene>>();
if (pawn.genes == null) return;
foreach (Gene curGene in pawn.genes.GenesListForReading)
{
if (!curGene.def.HasModExtension<SexualizerGeneExtension>()) continue;
SexualizerGeneExtension geneExtension = curGene.def.GetModExtension<SexualizerGeneExtension>();
if (geneDict.ContainsKey(geneExtension.order))
{
geneDict[geneExtension.order].Add(curGene);
}
else
{
geneDict.Add(geneExtension.order, new List<Gene> { curGene });
}
}
//Once we have the List, iterate over it to run the relavant functions.
List<int> keysList = geneDict.Keys.ToList();
keysList.Sort();
foreach (int key in keysList)
{
foreach (var curGene in geneDict[key])
{
curGene.PostAdd();
}
}
}
}
}

View file

@ -15,7 +15,7 @@
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DebugType>portable</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\Mods\Cumpilation\Assemblies\</OutputPath>
<DefineConstants>

View file

@ -16,22 +16,22 @@ namespace RJW_Genes
// Some sources add Genes before they fire, e.g. Character Editor
// This should harden the gene, to solve #19
if (HasAlreadyTwoAnus())
{
return;
}
//if (HasAlreadyTwoAnus())
//{
// return;
//}
if (additional_anus == null)
{
CreateAndAddAnus();
}
//if (additional_anus == null)
//{
// CreateAndAddAnus();
//}
}
public override void PostAdd()
{
if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns.
base.PostAdd();
if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn)) return; //If pawn hasn't been sexualized yet, skip.
// Some sources add Genes before they fire, e.g. Character Editor
// This should harden the gene, to solve #19
if (HasAlreadyTwoAnus())

View file

@ -16,23 +16,23 @@ namespace RJW_Genes
// Some sources add Genes before they fire, e.g. Character Editor
// This should harden the gene, to solve #19
if (HasAlreadyTwoBreasts())
{
return;
}
//if (HasAlreadyTwoBreasts())
//{
// return;
//}
// Tits are only added for female pawns!
if (GenderUtility.IsFemale(pawn) && additional_breasts == null)
{
CreateAndAddBreasts();
}
//// Tits are only added for female pawns!
//if (GenderUtility.IsFemale(pawn) && additional_breasts == null)
//{
// CreateAndAddBreasts();
//}
}
public override void PostAdd()
{
if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns.
base.PostAdd();
if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn)) return; //If pawn hasn't been sexualized yet, skip.
// Some sources add Genes before they fire, e.g. Character Editor
// This should harden the gene, to solve #19
if (HasAlreadyTwoBreasts())

View file

@ -16,23 +16,23 @@ namespace RJW_Genes
// Some sources add Genes before they fire, e.g. Character Editor
// This should harden the gene, to solve #19
if (HasAlreadyTwoPenis())
{
return;
}
//if (HasAlreadyTwoPenis())
//{
// return;
//}
// Penis are only added for male pawns!
if (GenderUtility.IsMale(pawn) && additional_penis == null)
{
CreateAndAddPenis();
}
//if (GenderUtility.IsMale(pawn) && additional_penis == null)
//{
// CreateAndAddPenis();
//}
}
public override void PostAdd()
{
if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns.
base.PostAdd();
if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn)) return; //If pawn hasn't been sexualized yet, skip.
// Some sources add Genes before they fire, e.g. Character Editor
// This should harden the gene, to solve #19
if (HasAlreadyTwoPenis())

View file

@ -21,23 +21,23 @@ namespace RJW_Genes
// Some sources add Genes before they fire, e.g. Character Editor
// This should harden the gene, to solve #19
if (HasAlreadyTwoVaginas())
{
return;
}
//if (HasAlreadyTwoVaginas())
//{
// return;
//}
// Vaginas are only added for female pawns!
if (GenderUtility.IsFemale(pawn) && additional_vagina == null)
{
CreateAndAddVagina();
}
//// Vaginas are only added for female pawns!
//if (GenderUtility.IsFemale(pawn) && additional_vagina == null)
//{
// CreateAndAddVagina();
//}
}
public override void PostAdd()
{
if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns.
base.PostAdd();
if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn)) return; //If pawn hasn't been sexualized yet, skip.
// Some sources add Genes before they fire, e.g. Character Editor
// This should harden the gene, to solve #19
if (HasAlreadyTwoVaginas())

View file

@ -11,18 +11,18 @@ namespace RJW_Genes
{
base.PostMake();
if (removed_breasts == null)
{
RemoveButStoreBreasts();
AddFeaturelessBreast();
}
//if (removed_breasts == null)
//{
// RemoveButStoreBreasts();
// AddFeaturelessBreast();
//}
}
public override void PostAdd()
{
if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns.
base.PostAdd();
if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn)) return; //If pawn hasn't been sexualized yet, skip.
if (removed_breasts == null)
{
RemoveButStoreBreasts();

View file

@ -15,6 +15,7 @@ namespace RJW_Genes
{
if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns.
base.PostAdd();
if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn)) return; //If pawn hasn't been sexualized yet, skip.
if (GenderUtility.IsMale(this.pawn) && this.additional_genital == null)
{
this.CreateAndAddVagina();

View file

@ -19,7 +19,7 @@ namespace RJW_Genes
{
if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns.
base.PostAdd();
if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn)) return; //If pawn hasn't been sexualized yet, skip.
// If the Pawn is already a Futa, do not do anything. Can Happen by Base-RJW Spawn Chance or potentially races / other mods.
if (IsAlreadyFuta(pawn))
{

View file

@ -13,17 +13,17 @@ namespace RJW_Genes
{
base.PostMake();
if (removed_anus == null)
{
RemoveButStoreAnus();
}
//if (removed_anus == null)
//{
// RemoveButStoreAnus();
//}
}
public override void PostAdd()
{
if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns.
base.PostAdd();
if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn)) return; //If pawn hasn't been sexualized yet, skip.
if (removed_anus == null)
{
RemoveButStoreAnus();

View file

@ -13,18 +13,18 @@ namespace RJW_Genes
{
base.PostMake();
// Breasts are removed for female pawns!
if (GenderUtility.IsFemale(pawn) && oldSize < 0)
{
RemoveButStoreBreasts();
}
//// Breasts are removed for female pawns!
//if (GenderUtility.IsFemale(pawn) && oldSize < 0)
//{
// RemoveButStoreBreasts();
//}
}
public override void PostAdd()
{
if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns.
base.PostAdd();
if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn)) return; //If pawn hasn't been sexualized yet, skip.
// Breasts are removed for female pawns!
if (GenderUtility.IsFemale(pawn) && oldSize < 0)
{

View file

@ -13,18 +13,18 @@ namespace RJW_Genes
{
base.PostMake();
// Penis are only removed for male pawns!
if (GenderUtility.IsMale(pawn) && removed_penis == null)
{
RemoveButStorePenis();
}
//// Penis are only removed for male pawns!
//if (GenderUtility.IsMale(pawn) && removed_penis == null)
//{
// RemoveButStorePenis();
//}
}
public override void PostAdd()
{
if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns.
base.PostAdd();
if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn)) return; //If pawn hasn't been sexualized yet, skip.
// Penis are only removed for male pawns!
if (GenderUtility.IsMale(pawn) && removed_penis == null)
{

View file

@ -14,17 +14,17 @@ namespace RJW_Genes
base.PostMake();
// Vaginas are only removed for female pawns!
if (GenderUtility.IsFemale(pawn) && removed_vagina == null)
{
RemoveButStoreVagina();
}
//if (GenderUtility.IsFemale(pawn) && removed_vagina == null)
//{
// RemoveButStoreVagina();
//}
}
public override void PostAdd()
{
if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns.
base.PostAdd();
if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn)) return; //If pawn hasn't been sexualized yet, skip.
// Vaginas are only removed for female pawns!
if (GenderUtility.IsFemale(pawn) && removed_vagina == null)
{

View file

@ -27,7 +27,7 @@ namespace RJW_Genes
{
if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns.
base.PostAdd();
if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn)) return; //If pawn hasn't been sexualized yet, skip.
AddUdders();
}

View file

@ -9,15 +9,16 @@
{
base.PostMake();
float multipier = FluidUtility.LookupFluidMultiplier(this);
FluidUtility.MultiplyFluidAmountBy(pawn, multipier);
has_been_fired = true;
//float multipier = FluidUtility.LookupFluidMultiplier(this);
//FluidUtility.MultiplyFluidAmountBy(pawn, multipier);
//has_been_fired = true;
}
public override void PostAdd()
{
if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns.
base.PostAdd();
if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn)) return; //If pawn hasn't been sexualized yet, skip.
if (!has_been_fired)
{
float multipier = FluidUtility.LookupFluidMultiplier(this);

View file

@ -18,6 +18,7 @@ namespace RJW_Genes
{
if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns.
base.PostAdd();
if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn)) return; //If pawn hasn't been sexualized yet, skip.
Apply();
}

View file

@ -15,8 +15,10 @@ namespace RJW_Genes
{
if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns.
base.PostMake();
AdjustPawnToFemale();
GenderUtility.RemoveSexChangeThoughtsIfTooYoung(this.pawn);
if (this.Active) {
AdjustPawnToFemale();
GenderUtility.RemoveSexChangeThoughtsIfTooYoung(this.pawn);
}
}
private void AdjustPawnToFemale()

View file

@ -56,14 +56,16 @@ namespace RJW_Genes
// Case 2: Check every interval if the Chance triggers
else if (pawn.IsHashIntervalTick(change_interval) && (new Random()).NextDouble() < switch_chance)
{
// Case 2.A - if the Pawn is Pregnant, do not allow sex change this interval.
if (pawn.IsPregnant()) return;
// Case 2.A) SexChange was blocked, postpone it
// Case 2.B) SexChange was blocked, postpone it
if (SexChangeBlocked(pawn))
{
sexChangeWasBlocked |= true;
return;
}
// Case 2.B) Nothing blocking, change the sex.
// Case 2.C) Nothing blocking, change the sex.
else { ChangeSex();}
}

View file

@ -15,8 +15,11 @@ namespace RJW_Genes
{
if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns.
base.PostMake();
AdjustPawnToMale();
GenderUtility.RemoveSexChangeThoughtsIfTooYoung(this.pawn);
if (this.Active)
{
AdjustPawnToMale();
GenderUtility.RemoveSexChangeThoughtsIfTooYoung(this.pawn);
}
}
private void AdjustPawnToMale()

View file

@ -13,6 +13,7 @@ namespace RJW_Genes
{
if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns.
base.PostAdd();
if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn)) return; //If pawn hasn't been sexualized yet, skip.
Apply();
}

View file

@ -32,17 +32,18 @@ namespace RJW_Genes
public override void PostMake()
{
base.PostMake();
if (pawn.ageTracker.AgeBiologicalYears >= RJW_Genes_Settings.rjw_genes_resizing_age)
{
Resize();
ResizingWasApplied = true;
}
//if (pawn.ageTracker.AgeBiologicalYears >= RJW_Genes_Settings.rjw_genes_resizing_age)
//{
// Resize();
// ResizingWasApplied = true;
//}
}
public override void PostAdd()
{
if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns.
base.PostAdd();
if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn)) return; //If pawn hasn't been sexualized yet, skip.
if (pawn.ageTracker.AgeBiologicalYears >= RJW_Genes_Settings.rjw_genes_resizing_age)
{
Resize();

View file

@ -46,8 +46,13 @@ namespace RJW_Genes
}
// Increase Fluid
if (CompHediff != null)
// Increase Fluid, if it's already above 10x don't increase to avoid crash issues.
if (CompHediff != null && (CompHediff.partFluidMultiplier < 100))
{
CompHediff.partFluidMultiplier *= 1.05f;
if (CompHediff.partFluidMultiplier > 100)
CompHediff.partFluidMultiplier = 100;
}
}
}

View file

@ -38,7 +38,6 @@ namespace RJW_Genes
ModLog.Message("Pawn: " + __instance.pawn.NameShortColored + " (" + __instance.pawn.ThingID + ")");
ModLog.Message("birthCount: " + laborStateMap.TryGetValue(__instance.pawn.ThingID).birthCount);
}
return;
}
@ -46,7 +45,7 @@ namespace RJW_Genes
if (laborStateIsNull && hasLitteredBirthsGene)
{
ModLog.Message("Found littered births gene");
int litteredBirthsTotalRoll = Rand.RangeInclusive(2, 4);
int litteredBirthsTotalRoll = Rand.RangeInclusive(1, 3);
laborStateMap.SetOrAdd(__instance.pawn.ThingID, new LaborState(__instance.pawn, litteredBirthsTotalRoll));
return;
}
@ -119,7 +118,7 @@ namespace RJW_Genes
return;
}
if (currentLaborState.birthTotal == currentLaborState.birthCount)
if (currentLaborState.birthTotal <= currentLaborState.birthCount)
{
laborStateMap.Remove(__instance.pawn.ThingID);
if (__instance.pawn.health.hediffSet.HasHediff(HediffDef.Named("Bioscaffold")))

View file

@ -6,8 +6,11 @@ using System.Threading.Tasks;
using rjw;
using Verse;
namespace RJW_Genes
{
[Obsolete]
internal static class Patch_sexualize_pawn
{
/// <summary>

View file

@ -19,12 +19,7 @@ namespace RJW_Genes
public override void PostAdd()
{
if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns.
if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
{
Sexualizer.sexualize_pawn(pawn);
}
base.PostAdd();
}
@ -37,5 +32,8 @@ namespace RJW_Genes
public virtual void Notify_OnPawnGeneration()
{
}
public virtual void Notify_OnPawnSexualization() { }
}
}

View file

@ -59,9 +59,13 @@ namespace RJW_Genes
}
CompHediff.UpdateSeverity();
// Increase Fluid
if (CompHediff != null)
// Increase Fluid, if it's already above 10x don't increase to avoid crash issues.
if (CompHediff != null && (CompHediff.partFluidMultiplier < 100))
{
CompHediff.partFluidMultiplier *= cum_multiplier;
if (CompHediff.partFluidMultiplier > 100)
CompHediff.partFluidMultiplier = 100;
}
}
}

View file

@ -51,7 +51,9 @@ namespace RJW_Genes
//RJW.Sexualizer.sexualize_pawn
harmony.Patch(AccessTools.Method(typeof(Sexualizer), nameof(Sexualizer.sexualize_pawn)),
prefix: new HarmonyMethod(typeof(Patch_sexualize_pawn), nameof(Patch_sexualize_pawn.PreFix)));
//prefix: new HarmonyMethod(typeof(Patch_sexualize_pawn), nameof(Patch_sexualize_pawn.PreFix))); //Old Method that ran Sexualize early.
postfix: new HarmonyMethod(typeof(Patch_RJWSexualizer), nameof(Patch_RJWSexualizer.ApplyGenesPostfix)));
//Patch for Elastic Gene support with Eltoro's Streching mod.

View file

@ -32,4 +32,4 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("2.6.2")]
[assembly: AssemblyVersion("2.7.0")]

View file

@ -22,6 +22,16 @@
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
<OutputPath>..\Assemblies\</OutputPath>
<Optimize>true</Optimize>
<PlatformTarget>AnyCPU</PlatformTarget>
<LangVersion>9</LangVersion>
<ErrorReport>prompt</ErrorReport>
<DebugType>portable</DebugType>
<DebugSymbols>true</DebugSymbols>
<DefineConstants>TRACE;DEBUG</DefineConstants>
</PropertyGroup>
<ItemGroup>
<None Include="..\About\**" />
</ItemGroup>
@ -31,6 +41,7 @@
<Compile Include="Common\Defs\HediffIncreaseOnSexExtension.cs" />
<Compile Include="Common\Defs\ModExtensionHelper.cs" />
<Compile Include="Common\Defs\MultiplierExtension.cs" />
<Compile Include="Common\Defs\SexualizerGeneExtension.cs" />
<Compile Include="Common\Defs\TickBasedChanceExtension.cs" />
<Compile Include="Common\Either.cs" />
<Compile Include="Common\Helpers\FactionUtility.cs" />
@ -41,6 +52,7 @@
<Compile Include="Common\Patches\PatchImplants.cs" />
<Compile Include="Common\Patches\Patch_HediffIncreaseOnSex.cs" />
<Compile Include="Common\Patches\Patch_ParentRelationUtility_GetParents.cs" />
<Compile Include="Common\Patches\Patch_RJWSexualizer.cs" />
<Compile Include="Genes\Breeding\Abilities\CompAbilityEffect_MatingCall.cs" />
<Compile Include="Genes\Breeding\Abilities\CompAbilityEffect_PheromoneSpit.cs" />
<Compile Include="Genes\Breeding\Abilities\CompProperties_AbilityMatingCall.cs" />

View file

@ -1,27 +1,64 @@
<ModMetaData>
<name>RJW Genes</name>
<author>Vegapnk - 1.6 Rewrite by Telanda</author>
<authors>
<li>Vegapnk</li>
<li>1.6 Rewrite by Telanda</li>
</authors>
<packageId>Vegapnk.rjw.genes</packageId>
<modVersion>2.6.2</modVersion>
<modVersion>2.7.0</modVersion>
<supportedVersions>
<li>1.4</li>
<li>1.5</li>
<li>1.6</li>
</supportedVersions>
<description>
Adds Genes for RJW Content.
<description>Adds Genes for RJW Content.
Adds:
- Genes for Genitalia Types and Sizes
- Fertilin, a resource similiar to Hemogen, and accompanying sex-vampires
- Mechanics for Breeding and being Breed by Animals and Insects
- Inherit genes from bestiality or produce VGE-Hybrids
- Male / Female Only, MPreg, Genderfluid Pawns
- Orgasmic Mytosis, Orgasmic Supercharging, Age-Transfer on Sex, Pheromones
- Cum-Amount changes, Cumflation Immunity
- Horny Pheromones, Animal Mating Call
- Genetic Diseases that Spread on Intercourse
- Patches for some popular Xenotypes from the Workshop
- Sexual Taming of Animals
Patches for the following Xenotype Mods
- Alpha Genes
- Biotech Expansion - Mammalia
- Biotech Expansion - Mythic
- Biotech Nyaron
- Big and Small Heaven and Hell
- Big and Small More Xenotypes
- Big and Small - Races
- Big and Small - Slimes
- Big and Small - Lamias and other Snake-People
- Big and Small - Vampires and the Undead
- Big and Small - Yokai
- Erin's Auronya
- Erin's Shisune
- Kijin Race 3.0
- NaraiXenotype
- Obsidia Expansion - Arachnas Xenotype
- Papou Xenotype: Emotional Birds (Continued)
- Rimsenal Xenotype Pack - Askbarn
- Roo's Faun Xenotype
- Roo's Minotaur Xenotype
- Roo's Satyr Xenotype
- Vanilla Races Expanded - Android
- Vanilla Races Expanded - Archon
- Vanilla Races Expanded - Fungoid
- Vanilla Races Expanded - Genie
- Vanilla Races Expanded - Highmate
- Vanilla Races Expanded - Lycanthrope
- Vanilla Races Expanded - Pigskin
- Vanilla Races Expanded - Phytokin
- Vanilla Races Expanded - Sanguophage
- Vanilla Races Expanded - Saurid
- [LTS]Xenotech
For Feedback or Support please see the Rimjob World Discord!
https://discord.gg/UWZ3WfVWeK
</description>
<url>https://github.com/vegapnk/RJW-Genes</url>
<modDependencies>
@ -40,27 +77,51 @@ Adds:
<steamWorkshopUrl>steam://url/CommunityFilePage/2009463077</steamWorkshopUrl>
<downloadUrl>https://github.com/pardeike/HarmonyRimWorld/releases/latest</downloadUrl>
</li>
<!--
<li>
<packageId>vegapnk.cumpilation</packageId>
<displayName>Cumpilation</displayName>
<steamWorkshopUrl></steamWorkshopUrl>
<downloadUrl>https://github.com/vegapnk/Cumpilation</downloadUrl>
</li>
-->
</modDependencies>
<loadAfter>
<li>Ludeon.RimWorld</li>
<li>Ludeon.RimWorld.Royalty</li>
<li>Ludeon.RimWorld.Ideology</li>
<li>Ludeon.RimWorld.Biotech</li>
<li>rim.job.world</li>
<li>ASMR.RJW.RaceSupport</li>
<li>biotexpans.insect</li>
<li>biotexpans.mammalia</li>
<li>biotexpans.mythic</li>
<li>brrainz.harmony</li>
<li>CaptoLamia.NyaronBioTechHAR</li>
<li>erin.auronyabiotech</li>
<li>erin.shisune</li>
<li>Ludeon.RimWorld.Biotech</li>
<li>Ludeon.RimWorld.Ideology</li>
<li>Ludeon.RimWorld.Royalty</li>
<li>Ludeon.RimWorld</li>
<li>lyzz.naraixenotype</li>
<li>obsidiaexpansion.xenos.arachnas</li>
<li>OskarPotocki.VanillaFactionsExpanded.Core</li>
<li>sarg.alphaanimals</li>
<li>Sl4vP0weR.DominantGene</li>
<li>oskarpotocki.vfe.empire</li>
<li>redmattis.bsslimes</li>
<li>redmattis.heaven</li>
<li>redmattis.lamiasandothersnakes</li>
<li>redmattis.undead</li>
<li>redmattis.yokai</li>
<li>rim.job.world</li>
<li>rimsenal.askbarn</li>
<li>rjw.sexperience.cumgenes</li>
<li>sarg.alphaanimals</li>
<li>sarg.alphagenes</li>
<li>Sl4vP0weR.DominantGene</li>
<li>ssulunge.kijinrace3</li>
<li>tug.minotaur</li>
<li>tug.satyr</li>
<li>v.rooboid.faun</li>
<li>VanillaExpanded.VGeneticsE</li>
<li>vanillaracesexpanded.android</li>
<li>vanillaracesexpanded.archon</li>
<li>vanillaracesexpanded.fungoid</li>
<li>vanillaracesexpanded.genie</li>
<li>vanillaracesexpanded.highmate</li>
<li>vanillaracesexpanded.lycanthrope</li>
<li>vanillaracesexpanded.phytokin</li>
<li>vanillaracesexpanded.sanguophage</li>
<li>vanillaracesexpanded.saurid</li>
<li>vegapnk.cumpilation</li>
<li>zal.papou</li>
</loadAfter>
</ModMetaData>

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Manifest>
<identifier>RJW-Genes</identifier>
<version>2.6.2</version>
<version>2.7.0</version>
<dependencies>
<li>RimJobWorld</li>
</dependencies>

View file

@ -1,4 +1,51 @@
#INPROG
# 2.7.0 (23-07-2026)
(Commit by @Telanda-DDS)
### Fixes.
- Rewrite of how Genital Genes handle non-Sexualised pawns, should address most 'extra genitals' bugs.
- Gender Fluid no longer allows sex changes while a pawn is pregnant.
- Updated Big & Small - Lamia Patches to account for changes in Def Capitalisation.
- Hormonal Saliva & Evergrowth now have a caps on fluid production, pawns should no longer grow so productive their cumshots crash the game.
### Xenotypes.
I've done a Check over the included xenotype patches, A few Xenotypes that hadn't been updated to 1.6 have been removed, and minor fixes Applied to other races. The current Supported Xenotype list is as following.
- Alpha Genes
- Biotech Expansion - Mammalia
- Biotech Expansion - Mythic
- Biotech Nyaron
- Big and Small Heaven and Hell
- Big and Small More Xenotypes
- Big and Small - Races
- Big and Small - Slimes
- Big and Small - Lamias and other Snake-People
- Big and Small - Vampires and the Undead
- Big and Small - Yokai
- Erin's Auronya
- Erin's Shisune
- Kijin Race 3.0
- NaraiXenotype
- Obsidia Expansion - Arachnas Xenotype
- Papou Xenotype: Emotional Birds (Continued)
- Rimsenal Xenotype Pack - Askbarn
- Roo's Faun Xenotype
- Roo's Minotaur Xenotype
- Roo's Satyr Xenotype
- Vanilla Races Expanded - Android
- Vanilla Races Expanded - Archon
- Vanilla Races Expanded - Fungoid
- Vanilla Races Expanded - Genie
- Vanilla Races Expanded - Highmate
- Vanilla Races Expanded - Lycanthrope
- Vanilla Races Expanded - Pigskin
- Vanilla Races Expanded - Phytokin
- Vanilla Races Expanded - Sanguophage
- Vanilla Races Expanded - Saurid
- \[LTS\]Xenotech
### Known Issues.
- Fertile Anus gene is Unreliable, and does not work with Biotech Pregnancies Enabled in RJW. (Waiting for large Upstream patch to RJW Core to be accepted.)
# 2.6.2 (15-02-2026)
(Commit by @Telanda-DDS)