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> <backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes> <backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
</li> </li>
<li Class="RJW_Genes.SexualizerGeneExtension">
<order>20</order>
</li>
</modExtensions> </modExtensions>
</GeneDef> </GeneDef>

View file

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

View file

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

View file

@ -11,9 +11,9 @@
<xpath>Defs/XenotypeDef[defName = "LoS_Lamia" <xpath>Defs/XenotypeDef[defName = "LoS_Lamia"
or defName = "LoS_TrueLamia" or defName = "LoS_TrueLamia"
or defName = "Naga" or defName = "Naga"
or defName = "Los_Adderman" or defName = "LoS_Adderman"
or defName = "Los_Anacondaman" or defName = "LoS_Anacondaman"
or defName = "Los_Snakeman"]/genes</xpath> or defName = "LoS_Snakeman"]/genes</xpath>
<value> <value>
<li>rjw_genes_reptilian_genitalia</li> <li>rjw_genes_reptilian_genitalia</li>
</value> </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> </value>
</match> </match>
</Operation> </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> </Patch>

View file

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

View file

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

View file

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

View file

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

View file

@ -11,5 +11,4 @@ namespace RJW_Genes
{ {
public float chance; 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>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType> <DebugType>portable</DebugType>
<Optimize>false</Optimize> <Optimize>false</Optimize>
<OutputPath>..\..\Mods\Cumpilation\Assemblies\</OutputPath> <OutputPath>..\..\Mods\Cumpilation\Assemblies\</OutputPath>
<DefineConstants> <DefineConstants>

View file

@ -16,22 +16,22 @@ namespace RJW_Genes
// Some sources add Genes before they fire, e.g. Character Editor // Some sources add Genes before they fire, e.g. Character Editor
// This should harden the gene, to solve #19 // This should harden the gene, to solve #19
if (HasAlreadyTwoAnus()) //if (HasAlreadyTwoAnus())
{ //{
return; // return;
} //}
if (additional_anus == null) //if (additional_anus == null)
{ //{
CreateAndAddAnus(); // CreateAndAddAnus();
} //}
} }
public override void PostAdd() public override void PostAdd()
{ {
if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns. if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns.
base.PostAdd(); 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 // Some sources add Genes before they fire, e.g. Character Editor
// This should harden the gene, to solve #19 // This should harden the gene, to solve #19
if (HasAlreadyTwoAnus()) if (HasAlreadyTwoAnus())

View file

@ -16,23 +16,23 @@ namespace RJW_Genes
// Some sources add Genes before they fire, e.g. Character Editor // Some sources add Genes before they fire, e.g. Character Editor
// This should harden the gene, to solve #19 // This should harden the gene, to solve #19
if (HasAlreadyTwoBreasts()) //if (HasAlreadyTwoBreasts())
{ //{
return; // return;
} //}
// Tits are only added for female pawns! //// Tits are only added for female pawns!
if (GenderUtility.IsFemale(pawn) && additional_breasts == null) //if (GenderUtility.IsFemale(pawn) && additional_breasts == null)
{ //{
CreateAndAddBreasts(); // CreateAndAddBreasts();
} //}
} }
public override void PostAdd() public override void PostAdd()
{ {
if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns. if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns.
base.PostAdd(); 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 // Some sources add Genes before they fire, e.g. Character Editor
// This should harden the gene, to solve #19 // This should harden the gene, to solve #19
if (HasAlreadyTwoBreasts()) if (HasAlreadyTwoBreasts())

View file

@ -16,23 +16,23 @@ namespace RJW_Genes
// Some sources add Genes before they fire, e.g. Character Editor // Some sources add Genes before they fire, e.g. Character Editor
// This should harden the gene, to solve #19 // This should harden the gene, to solve #19
if (HasAlreadyTwoPenis()) //if (HasAlreadyTwoPenis())
{ //{
return; // return;
} //}
// Penis are only added for male pawns! // Penis are only added for male pawns!
if (GenderUtility.IsMale(pawn) && additional_penis == null) //if (GenderUtility.IsMale(pawn) && additional_penis == null)
{ //{
CreateAndAddPenis(); // CreateAndAddPenis();
} //}
} }
public override void PostAdd() public override void PostAdd()
{ {
if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns. if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns.
base.PostAdd(); 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 // Some sources add Genes before they fire, e.g. Character Editor
// This should harden the gene, to solve #19 // This should harden the gene, to solve #19
if (HasAlreadyTwoPenis()) if (HasAlreadyTwoPenis())

View file

@ -21,23 +21,23 @@ namespace RJW_Genes
// Some sources add Genes before they fire, e.g. Character Editor // Some sources add Genes before they fire, e.g. Character Editor
// This should harden the gene, to solve #19 // This should harden the gene, to solve #19
if (HasAlreadyTwoVaginas()) //if (HasAlreadyTwoVaginas())
{ //{
return; // return;
} //}
// Vaginas are only added for female pawns! //// Vaginas are only added for female pawns!
if (GenderUtility.IsFemale(pawn) && additional_vagina == null) //if (GenderUtility.IsFemale(pawn) && additional_vagina == null)
{ //{
CreateAndAddVagina(); // CreateAndAddVagina();
} //}
} }
public override void PostAdd() public override void PostAdd()
{ {
if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns. if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns.
base.PostAdd(); 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 // Some sources add Genes before they fire, e.g. Character Editor
// This should harden the gene, to solve #19 // This should harden the gene, to solve #19
if (HasAlreadyTwoVaginas()) if (HasAlreadyTwoVaginas())

View file

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

View file

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

View file

@ -19,7 +19,7 @@ namespace RJW_Genes
{ {
if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns. if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns.
base.PostAdd(); 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 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)) if (IsAlreadyFuta(pawn))
{ {

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -56,14 +56,16 @@ namespace RJW_Genes
// Case 2: Check every interval if the Chance triggers // Case 2: Check every interval if the Chance triggers
else if (pawn.IsHashIntervalTick(change_interval) && (new Random()).NextDouble() < switch_chance) 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)) if (SexChangeBlocked(pawn))
{ {
sexChangeWasBlocked |= true; sexChangeWasBlocked |= true;
return; return;
} }
// Case 2.B) Nothing blocking, change the sex. // Case 2.C) Nothing blocking, change the sex.
else { ChangeSex();} else { ChangeSex();}
} }

View file

@ -15,8 +15,11 @@ namespace RJW_Genes
{ {
if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns. if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns.
base.PostMake(); base.PostMake();
AdjustPawnToMale(); if (this.Active)
GenderUtility.RemoveSexChangeThoughtsIfTooYoung(this.pawn); {
AdjustPawnToMale();
GenderUtility.RemoveSexChangeThoughtsIfTooYoung(this.pawn);
}
} }
private void AdjustPawnToMale() 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. if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns.
base.PostAdd(); base.PostAdd();
if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn)) return; //If pawn hasn't been sexualized yet, skip.
Apply(); Apply();
} }

View file

@ -32,17 +32,18 @@ namespace RJW_Genes
public override void PostMake() public override void PostMake()
{ {
base.PostMake(); base.PostMake();
if (pawn.ageTracker.AgeBiologicalYears >= RJW_Genes_Settings.rjw_genes_resizing_age) //if (pawn.ageTracker.AgeBiologicalYears >= RJW_Genes_Settings.rjw_genes_resizing_age)
{ //{
Resize(); // Resize();
ResizingWasApplied = true; // ResizingWasApplied = true;
} //}
} }
public override void PostAdd() public override void PostAdd()
{ {
if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns. if (pawn.kindDef == null) return; //Added to catch Rimworld creating statues of pawns.
base.PostAdd(); 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) if (pawn.ageTracker.AgeBiologicalYears >= RJW_Genes_Settings.rjw_genes_resizing_age)
{ {
Resize(); Resize();

View file

@ -46,8 +46,13 @@ namespace RJW_Genes
} }
// Increase Fluid // 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; 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("Pawn: " + __instance.pawn.NameShortColored + " (" + __instance.pawn.ThingID + ")");
ModLog.Message("birthCount: " + laborStateMap.TryGetValue(__instance.pawn.ThingID).birthCount); ModLog.Message("birthCount: " + laborStateMap.TryGetValue(__instance.pawn.ThingID).birthCount);
} }
return; return;
} }
@ -46,7 +45,7 @@ namespace RJW_Genes
if (laborStateIsNull && hasLitteredBirthsGene) if (laborStateIsNull && hasLitteredBirthsGene)
{ {
ModLog.Message("Found littered births gene"); 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)); laborStateMap.SetOrAdd(__instance.pawn.ThingID, new LaborState(__instance.pawn, litteredBirthsTotalRoll));
return; return;
} }
@ -119,7 +118,7 @@ namespace RJW_Genes
return; return;
} }
if (currentLaborState.birthTotal == currentLaborState.birthCount) if (currentLaborState.birthTotal <= currentLaborState.birthCount)
{ {
laborStateMap.Remove(__instance.pawn.ThingID); laborStateMap.Remove(__instance.pawn.ThingID);
if (__instance.pawn.health.hediffSet.HasHediff(HediffDef.Named("Bioscaffold"))) if (__instance.pawn.health.hediffSet.HasHediff(HediffDef.Named("Bioscaffold")))

View file

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

View file

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

View file

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

View file

@ -48,10 +48,12 @@ namespace RJW_Genes
//harmony.Patch(AccessTools.Method(typeof(Quirk), nameof(Quirk.CountSatisfiedQuirks)), //harmony.Patch(AccessTools.Method(typeof(Quirk), nameof(Quirk.CountSatisfiedQuirks)),
//postfix: new HarmonyMethod(typeof(QuirkPatcher), nameof(QuirkPatcher.CountSatisfiedPostfix))); //postfix: new HarmonyMethod(typeof(QuirkPatcher), nameof(QuirkPatcher.CountSatisfiedPostfix)));
//RJW.Sexualizer.sexualize_pawn //RJW.Sexualizer.sexualize_pawn
harmony.Patch(AccessTools.Method(typeof(Sexualizer), nameof(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. //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 // You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("2.6.2")] [assembly: AssemblyVersion("2.7.0")]

View file

@ -22,6 +22,16 @@
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit> <Prefer32Bit>false</Prefer32Bit>
</PropertyGroup> </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> <ItemGroup>
<None Include="..\About\**" /> <None Include="..\About\**" />
</ItemGroup> </ItemGroup>
@ -31,6 +41,7 @@
<Compile Include="Common\Defs\HediffIncreaseOnSexExtension.cs" /> <Compile Include="Common\Defs\HediffIncreaseOnSexExtension.cs" />
<Compile Include="Common\Defs\ModExtensionHelper.cs" /> <Compile Include="Common\Defs\ModExtensionHelper.cs" />
<Compile Include="Common\Defs\MultiplierExtension.cs" /> <Compile Include="Common\Defs\MultiplierExtension.cs" />
<Compile Include="Common\Defs\SexualizerGeneExtension.cs" />
<Compile Include="Common\Defs\TickBasedChanceExtension.cs" /> <Compile Include="Common\Defs\TickBasedChanceExtension.cs" />
<Compile Include="Common\Either.cs" /> <Compile Include="Common\Either.cs" />
<Compile Include="Common\Helpers\FactionUtility.cs" /> <Compile Include="Common\Helpers\FactionUtility.cs" />
@ -41,6 +52,7 @@
<Compile Include="Common\Patches\PatchImplants.cs" /> <Compile Include="Common\Patches\PatchImplants.cs" />
<Compile Include="Common\Patches\Patch_HediffIncreaseOnSex.cs" /> <Compile Include="Common\Patches\Patch_HediffIncreaseOnSex.cs" />
<Compile Include="Common\Patches\Patch_ParentRelationUtility_GetParents.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_MatingCall.cs" />
<Compile Include="Genes\Breeding\Abilities\CompAbilityEffect_PheromoneSpit.cs" /> <Compile Include="Genes\Breeding\Abilities\CompAbilityEffect_PheromoneSpit.cs" />
<Compile Include="Genes\Breeding\Abilities\CompProperties_AbilityMatingCall.cs" /> <Compile Include="Genes\Breeding\Abilities\CompProperties_AbilityMatingCall.cs" />

View file

@ -1,27 +1,64 @@
<ModMetaData> <ModMetaData>
<name>RJW Genes</name> <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> <packageId>Vegapnk.rjw.genes</packageId>
<modVersion>2.6.2</modVersion> <modVersion>2.7.0</modVersion>
<supportedVersions> <supportedVersions>
<li>1.4</li> <li>1.4</li>
<li>1.5</li> <li>1.5</li>
<li>1.6</li> <li>1.6</li>
</supportedVersions> </supportedVersions>
<description> <description>Adds Genes for RJW Content.
Adds Genes for RJW Content.
Adds: Adds:
- Genes for Genitalia Types and Sizes - Genes for Genitalia Types and Sizes
- Fertilin, a resource similiar to Hemogen, and accompanying sex-vampires - Fertilin, a resource similiar to Hemogen, and accompanying sex-vampires
- Mechanics for Breeding and being Breed by Animals and Insects - Mechanics for Breeding and being Breed by Animals and Insects
- Inherit genes from bestiality or produce VGE-Hybrids
- Male / Female Only, MPreg, Genderfluid Pawns - Male / Female Only, MPreg, Genderfluid Pawns
- Orgasmic Mytosis, Orgasmic Supercharging, Age-Transfer on Sex, Pheromones - Orgasmic Mytosis, Orgasmic Supercharging, Age-Transfer on Sex, Pheromones
- Cum-Amount changes, Cumflation Immunity - Cum-Amount changes, Cumflation Immunity
- Horny Pheromones, Animal Mating Call - Horny Pheromones, Animal Mating Call
- Genetic Diseases that Spread on Intercourse - Genetic Diseases that Spread on Intercourse
- Patches for some popular Xenotypes from the Workshop
- Sexual Taming of Animals - 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> </description>
<url>https://github.com/vegapnk/RJW-Genes</url> <url>https://github.com/vegapnk/RJW-Genes</url>
<modDependencies> <modDependencies>
@ -40,27 +77,51 @@ Adds:
<steamWorkshopUrl>steam://url/CommunityFilePage/2009463077</steamWorkshopUrl> <steamWorkshopUrl>steam://url/CommunityFilePage/2009463077</steamWorkshopUrl>
<downloadUrl>https://github.com/pardeike/HarmonyRimWorld/releases/latest</downloadUrl> <downloadUrl>https://github.com/pardeike/HarmonyRimWorld/releases/latest</downloadUrl>
</li> </li>
<!--
<li>
<packageId>vegapnk.cumpilation</packageId>
<displayName>Cumpilation</displayName>
<steamWorkshopUrl></steamWorkshopUrl>
<downloadUrl>https://github.com/vegapnk/Cumpilation</downloadUrl>
</li>
-->
</modDependencies> </modDependencies>
<loadAfter> <loadAfter>
<li>Ludeon.RimWorld</li> <li>ASMR.RJW.RaceSupport</li>
<li>Ludeon.RimWorld.Royalty</li> <li>biotexpans.insect</li>
<li>Ludeon.RimWorld.Ideology</li> <li>biotexpans.mammalia</li>
<li>Ludeon.RimWorld.Biotech</li> <li>biotexpans.mythic</li>
<li>rim.job.world</li>
<li>brrainz.harmony</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>OskarPotocki.VanillaFactionsExpanded.Core</li>
<li>sarg.alphaanimals</li> <li>oskarpotocki.vfe.empire</li>
<li>Sl4vP0weR.DominantGene</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>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>vegapnk.cumpilation</li>
<li>zal.papou</li>
</loadAfter> </loadAfter>
</ModMetaData> </ModMetaData>

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Manifest> <Manifest>
<identifier>RJW-Genes</identifier> <identifier>RJW-Genes</identifier>
<version>2.6.2</version> <version>2.7.0</version>
<dependencies> <dependencies>
<li>RimJobWorld</li> <li>RimJobWorld</li>
</dependencies> </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) # 2.6.2 (15-02-2026)
(Commit by @Telanda-DDS) (Commit by @Telanda-DDS)