This commit is contained in:
Shabakur 2023-01-16 12:13:42 +01:00
commit 982339a84e
40 changed files with 492 additions and 214 deletions

View File

@ -6,7 +6,12 @@ Features:
- Orgasm Rush got a Hediff
- Unbreakable Gene
- Age-Transfer and Youth-Fountain per Sex Gene
- Bisexual and Homosexual Genes with Placeholder Icon
- Balancing some Genes by changing metabolism and complexity
- Pheromone Gene (#13, Shabakur)
- RJW Race-Support Compatibility (#12,#13, Shabakur)
- Animal Gene Inheritance Gene-Chance Multiplier per Setting (#13, Shabakur)
- Lots of Debug-Only Logging for Animal Gene Inheritance
Succubus:
@ -14,6 +19,9 @@ Fixes:
- Issue with Breast-Size (#8) fixed by lowercasing breast-match (Shabakur)
- Error on Game Load when Licentia Genes are tried to be added to Xenotypes for players without Licentia (#5)
- Futa Gene only triggers if Pawn is not a futa already (#2)
- Genitalia Resizing triggers on 20th Birthday (#11)
- RJW-Gene-Inheritance Settings now do things (#13, Shabakur)
# 1.0.1 (2022-12-20)

Binary file not shown.

View File

@ -63,7 +63,7 @@
<GeneCategoryDef>
<defName>rjw_genes_special</defName>
<label>Genital Related Damage</label>
<label>Genital Based Special Abilities</label>
<displayPriorityInXenotype>8</displayPriorityInXenotype>
</GeneCategoryDef>

View File

@ -13,7 +13,7 @@
</GeneDef>
<GeneDef ParentName="rjw_genes_wings">
<defName>rjw_genes_Succubus_Wings</defName>
<defName>rjw_genes_succubus_wings</defName>
<label>succubus wings</label>
<description>Carriers of this gene grow succubus wings.</description>
<iconPath>Genes/Icons/Succubus_Wings</iconPath>

View File

@ -9,7 +9,7 @@
<GeneDef ParentName="GeneGenitaliaSizeBase">
<defName>rjw_genes_big_male_genitalia</defName>
<label>Big Male Genitaliasize</label>
<description>Penises of this Xenotype are bigger.</description>
<description>Penises of this Xenotype are bigger.(Resizing takes place at 20th Birthday)</description>
<iconPath>Genes/Icons/Small_Male_Genitalia</iconPath>
<geneClass>RJW_Genes.Gene_BigMaleGenitalia</geneClass>
<displayOrderInCategory>751</displayOrderInCategory>
@ -21,7 +21,7 @@
<GeneDef ParentName="GeneGenitaliaSizeBase">
<defName>rjw_genes_small_male_genitalia</defName>
<label>Small Male Genitaliasize</label>
<description>Penises of this Xenotype are smaller.</description>
<description>Penises of this Xenotype are smaller. (Resizing takes place at 20th Birthday)</description>
<iconPath>Genes/Icons/Big_Male_Genitalia</iconPath>
<geneClass>RJW_Genes.Gene_SmallMaleGenitalia</geneClass>
<displayOrderInCategory>753</displayOrderInCategory>
@ -34,7 +34,7 @@
<GeneDef ParentName="GeneGenitaliaSizeBase">
<defName>rjw_genes_loose_female_genitalia</defName>
<label>Loose Female Genitalia</label>
<description>Vaginas of this Xenotype are quite spacy.</description>
<description>Vaginas of this Xenotype are quite spacy. (Resizing takes place at 20th Birthday)</description>
<iconPath>Genes/Icons/Loose_Female_Genitalia</iconPath>
<geneClass>RJW_Genes.Gene_LooseFemaleGenitalia</geneClass>
<displayOrderInCategory>754</displayOrderInCategory>
@ -46,7 +46,7 @@
<GeneDef ParentName="GeneGenitaliaSizeBase">
<defName>rjw_genes_tight_female_genitalia</defName>
<label>Tight Female Genitalia</label>
<description>Vaginas of this Xenotype are pretty tight.</description>
<description>Vaginas of this Xenotype are pretty tight.(Resizing takes place at 20th Birthday)</description>
<iconPath>Genes/Icons/Tight_Female_Genitalia</iconPath>
<geneClass>RJW_Genes.Gene_TightFemaleGenitalia</geneClass>
<displayOrderInCategory>756</displayOrderInCategory>
@ -59,7 +59,7 @@
<GeneDef ParentName="GeneGenitaliaSizeBase">
<defName>rjw_genes_big_breasts</defName>
<label>Big Breasts</label>
<description>Females of this Xenotype have big honkers.</description>
<description>Females of this Xenotype have big honkers.(Resizing takes place at 20th Birthday)</description>
<iconPath>Genes/Icons/Big_Breasts</iconPath>
<geneClass>RJW_Genes.Gene_BigBreasts</geneClass>
<displayOrderInCategory>757</displayOrderInCategory>
@ -71,7 +71,7 @@
<GeneDef ParentName="GeneGenitaliaSizeBase">
<defName>rjw_genes_small_breasts</defName>
<label>Small Breasts</label>
<description>Females of this Xenotype have smaller breasts.</description>
<description>Females of this Xenotype have smaller breasts.(Resizing takes place at 20th Birthday)</description>
<iconPath>Genes/Icons/Small_Breasts</iconPath>
<geneClass>RJW_Genes.Gene_SmallBreasts</geneClass>
<displayOrderInCategory>759</displayOrderInCategory>
@ -84,7 +84,7 @@
<GeneDef ParentName="GeneGenitaliaSizeBase">
<defName>rjw_genes_loose_anus</defName>
<label>Loose Anus</label>
<description>The Anus of this Xenotype is roomy.</description>
<description>The Anus of this Xenotype is roomy.(Resizing takes place at 20th Birthday)</description>
<iconPath>Genes/Icons/Loose_Anus</iconPath>
<geneClass>RJW_Genes.Gene_LooseAnus</geneClass>
<displayOrderInCategory>760</displayOrderInCategory>
@ -96,7 +96,7 @@
<GeneDef ParentName="GeneGenitaliaSizeBase">
<defName>rjw_genes_tight_anus</defName>
<label>Tight Anus</label>
<description>The anus of this Xenotype is small.</description>
<description>The anus of this Xenotype is small.(Resizing takes place at 20th Birthday)</description>
<iconPath>Genes/Icons/Tight_Anus</iconPath>
<geneClass>RJW_Genes.Gene_TightAnus</geneClass>
<displayOrderInCategory>762</displayOrderInCategory>

View File

@ -34,7 +34,7 @@
</GeneDef>
<GeneDef>
<defName>rjw_genes_lifeforcedrain</defName>
<defName>rjw_genes_lifeforce_drain</defName>
<label>fertilin drain</label>
<labelShortAdj>draining</labelShortAdj>
<description>Carriers lose an additional 15 fertilin per day from biological entropy.</description>

View File

@ -29,4 +29,41 @@
</li>
</forcedTraits>
</GeneDef>
<GeneDef>
<defName>rjw_genes_homosexual</defName>
<label>Homosexual</label>
<displayCategory>Reproduction</displayCategory>
<description>This Gene makes you gay.</description>
<iconPath>UI\Ideoligions\Universal\RoundC</iconPath>
<biostatMet>0</biostatMet>
<displayOrderInCategory>3</displayOrderInCategory>
<forcedTraits>
<li>
<def>Gay</def>
</li>
</forcedTraits>
<exclusionTags>
<li>rjw_genes_sexual_orientation</li>
</exclusionTags>
</GeneDef>
<GeneDef>
<defName>rjw_genes_bisexual</defName>
<label>Bisexual</label>
<displayCategory>Reproduction</displayCategory>
<description>Carriers of this Gene are Bisexual.</description>
<iconPath>UI\Ideoligions\Universal\RoundC</iconPath>
<biostatMet>0</biostatMet>
<displayOrderInCategory>4</displayOrderInCategory>
<forcedTraits>
<li>
<def>Bisexual</def>
</li>
</forcedTraits>
<exclusionTags>
<li>rjw_genes_sexual_orientation</li>
</exclusionTags>
</GeneDef>
</Defs>

View File

@ -11,19 +11,6 @@
<displayOrderInCategory>1</displayOrderInCategory>
</GeneDef>
<GeneDef>
<defName>rjw_genes_aphrodisiac_pheromones</defName>
<label>Aphrodisiac Pheromones</label>
<displayCategory>rjw_genes_special</displayCategory>
<geneClass>RJW_Genes.Gene_Aphrodisiac_Pheromones</geneClass>
<description>Carriers of this gene create an aphrodisiac pheremones which induce an increased sexdrive to others nearby, increasing in strength as the sexdrive of the carrier increases.\n\nCarriers are unaffected by others with this gene.</description>
<iconPath>Things/Mote/Heart</iconPath>
<displayOrderInCategory>2</displayOrderInCategory>
<biostatCpx>1</biostatCpx>
<biostatMet>1</biostatMet>
</GeneDef>
<GeneDef>
<defName>rjw_genes_youth_fountain</defName>
<label>Youth Fountain</label>
@ -45,4 +32,17 @@
<iconPath>UI/Icons/ColonistBar/Idle</iconPath>
<displayOrderInCategory>3</displayOrderInCategory>
</GeneDef>
<GeneDef>
<defName>rjw_genes_aphrodisiac_pheromones</defName>
<label>Aphrodisiac Pheromones</label>
<displayCategory>rjw_genes_special</displayCategory>
<geneClass>RJW_Genes.Gene_Aphrodisiac_Pheromones</geneClass>
<description>Pheremones of this pawn induce an incressed sexdrive to others nearby.</description>
<iconPath>UI/Memes/FleshPurity</iconPath>
<displayOrderInCategory>4</displayOrderInCategory>
<biostatCpx>1</biostatCpx>
<biostatMet>1</biostatMet>
</GeneDef>
</Defs>

View File

@ -2,7 +2,12 @@
<Defs>
<RJW_BGS.RaceGeneDef Name = "Canine">
<defName>Canine</defName>
<raceGroup>Canine_Group</raceGroup>
<raceGroups>
<li>Canine_Group</li>
<li>CanineAnimal</li>
<li>CanineSingleGenderAnimal</li>
<li>CanineSkinAnimal</li>
</raceGroups>
<genes>
<li>
<defName>Ears_Floppy</defName>
@ -38,7 +43,11 @@
<RJW_BGS.RaceGeneDef>
<defName>Insect</defName>
<raceGroup>Insect_Group</raceGroup>
<raceGroups>
<li>Insect_Group</li>
<li>ArthropodOvipositorAnimal</li>
<li>ArthropodOvipositorHornyAnimal</li>
</raceGroups>
<genes>
<li>
<defName>Beauty_Ugly</defName>
@ -73,7 +82,14 @@
<RJW_BGS.RaceGeneDef>
<defName>Feline</defName>
<raceGroup>Feline_Group</raceGroup>
<raceGroups>
<li>Feline_Group</li>
<li>FelineAnimal</li>
<li>FelineHornyAnimal</li>
<li>FelineSingleGenderAnimal</li>
<li>AA_SandProwlerAnimal</li>
</raceGroups>
<genes>
<li>
<defName>Tail_Furry</defName>
@ -108,7 +124,10 @@
<RJW_BGS.RaceGeneDef>
<defName>Equine</defName>
<raceGroup>Equine_Group</raceGroup>
<raceGroups>
<li>Equine_Group</li>
<li>HorseAnimal</li>
</raceGroups>
<genes>
<li>
<defName>Furskin</defName>
@ -143,7 +162,12 @@
<RJW_BGS.RaceGeneDef>
<defName>Dragon</defName>
<raceGroup>Dragon_Group</raceGroup>
<raceGroups>
<li>Dragon_Group</li>
<li>ThrumboAnimal</li>
<li>DragonAnimal</li>
<li>DragonSingleGenderAnimal</li>
</raceGroups>
<genes>
<li>
<defName>Unstoppable</defName>
@ -166,7 +190,7 @@
<chance>0.1</chance>
</li>
<li>
<defName>rjw_genes_draconic_genitalia</defName>
<defName>rjw_genes_dragon_genitalia</defName>
<chance>0.6</chance>
</li>
<li>
@ -190,7 +214,12 @@
<RJW_BGS.RaceGeneDef>
<defName>Rodent</defName>
<raceGroup>Rodent_Group</raceGroup>
<raceGroups>
<li>Rodent_Group</li>
<li>RodentAnimal</li>
<li>RodentSingleGenderAnimal</li>
<li>DragonSingleGenderAnimal</li>
</raceGroups>
<genes>
<li>
<defName>Furskin</defName>
@ -225,7 +254,10 @@
<RJW_BGS.RaceGeneDef>
<defName>Racoon</defName>
<raceGroup>Raccon_Group</raceGroup>
<raceGroups>
<li>Raccon_Group</li>
<li>RaccoonAnimal</li>
</raceGroups>
<genes>
<li>
<defName>Furskin</defName>

View File

@ -1,12 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<!--
<Defs>
<!-- this is to disable the xml, remove it for your own xml
<RJW_BGS.RaceGeneDef>
<defName>Canine</defName>
defName can be anything you want, as long as it is unique
<raceGroup>Canine_Group</raceGroup>
RJW.Racegroupdef, all animals in the raceGroup will be part of this group, RJW race support uses this so those can be used to quickly add a group
<raceGroups>
<li>Canine_Group</li>
<li>CanineAnimal</li> from racesupport
<li>CanineSingleGenderAnimal</li> from racesupport
<li>CanineSkinAnimal</li> from racesupport
</raceGroups>
RJW.Racegroupdef, all animals in the added raceGroups will be part of this group, RJW race support uses other defnames and overwrite vanilla ones, so add them to if you use it.
<raceNames>
<li> </li>
@ -38,10 +43,10 @@
For each gene you need to find the defname and give it a chance to appear. Each gene is rolled independently.
</RJW_BGS.RaceGeneDef>
-->
this is to disable the xml, remove it for your own xml -->
<!-- You can use parents to have animals get specific genes in addition to the group. So warg children will have a chance for Ears_Floppy, rjw_genes_slime_genitalia and StrongStomach
<!-- this is to disable the xml, remove it for your own xml
You can use parents to have animals get specific genes in addition to the group. So warg children will have a chance for Ears_Floppy, rjw_genes_slime_genitalia and StrongStomach
<RJW_BGS.RaceGeneDef ParentName = "Canine">
<defName>Warg</defName>
<raceNames>
@ -54,5 +59,7 @@
</li>
</genes>
</RJW_BGS.RaceGeneDef>
-->
this is to disable the xml, remove it for your own xml -->
</Defs>

View File

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<XenotypeDef>
<defName>rjw_genes_succubus</defName>
<label>Succubus</label>
<description>Succubi are strongly enhanced xenohumans. Powered by archites, their abilities go far beyond normal genetic enhancements. These overnaturally beautiful creatures strive parasitically on the Fertilin found in semen. </description>
<descriptionShort>Succubi are beautiful and extremely hungry Xenohumans. They strive on having sex and extracting their victims life-force through this. </descriptionShort>
<iconPath>UI/Icons/Xenotypes/Sanguophage</iconPath>
<soundDefOnImplant>PawnBecameSanguophage</soundDefOnImplant>
<generateWithXenogermReplicatingHediffChance>0.5</generateWithXenogermReplicatingHediffChance>
<xenogermReplicatingDurationLeftDaysRange>0.1~140</xenogermReplicatingDurationLeftDaysRange>
<combatPowerFactor>1</combatPowerFactor>
<displayPriority>-1000</displayPriority>
<factionlessGenerationWeight>0.005</factionlessGenerationWeight>
<doubleXenotypeChances>
<Pigskin>0.02</Pigskin>
<Impid>0.02</Impid>
<Yttakin>0.02</Yttakin>
<Neanderthal>0.02</Neanderthal>
<Waster>0.02</Waster>
<Dirtmole>0.02</Dirtmole>
</doubleXenotypeChances>
<genes>
<li>rjw_genes_bisexual</li>
<li>rjw_genes_hypersexual</li>
<li>rjw_genes_female_only</li>
<li>rjw_genes_lifeforce</li>
<li>rjw_genes_lifeforce_drain</li>
<li>rjw_genes_vaginal_absorber</li>
<li>rjw_genes_anal_absorber</li>
<li>rjw_genes_drainer</li>
<li>rjw_genes_pussyhealer</li>
<li>rjw_genes_paralysingkiss</li>
<li>rjw_genes_seduce</li>
<li>rjw_genes_elasticity</li>
<li>rjw_genes_succubus_tail</li>
<li>rjw_genes_aphrodisiac_pheromones</li>
<li>Beauty_Pretty</li>
<li>MoveSpeed_Quick</li>
<li>Robust</li>
<li>UVSensitivity_Intense</li>
<li>AptitudeStrong_Social</li>
<li>Ears_Pointed</li>
<li>Headbone_MiniHorns</li>
<li>Skin_Purple</li>
</genes>
</XenotypeDef>
</Defs>

View File

@ -1,10 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace RJW_BGS
namespace RJW_BGS
{
public class BestialityGeneInheritanceDef
{

View File

@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Generic;
using Verse;
using RimWorld;
using rjw;
@ -20,14 +16,18 @@ namespace RJW_BGS
if (mother.RaceProps.Humanlike && father.RaceProps.Humanlike)
return genelist;
ModLog.Message($"Trigger an Animal-Gene-Inheritance for {father.Name} and {mother.Name}");
//One parent must be an animal and the other must be human, so only one needs to return
if (father != null && !father.RaceProps.Humanlike)
{
if (RJW_BGSSettings.rjw_bgs_detailed_debug)
ModLog.Message($"Father was found to be animal - looking up genes for {father.Name}");
return SelectGenes(father);
}
if (mother != null && !mother.RaceProps.Humanlike)
{
if (RJW_BGSSettings.rjw_bgs_detailed_debug)
ModLog.Message($"Mother was found to be animal - looking up genes for {mother.Name}");
return SelectGenes(mother);
}
@ -48,30 +48,48 @@ namespace RJW_BGS
{
foreach (BestialityGeneInheritanceDef gene in raceGeneDef.genes)
{
if (gene.chance * RJW_BGSSettings.global_gene_chance >= Rand.Range(0.01f,1f))
if (gene.chance * RJW_BGSSettings.rjw_bgs_global_gene_chance >= Rand.Range(0.01f,1f))
{
genelist.Add(DefDatabase<GeneDef>.GetNamed(gene.defName));
}
}
}
if (RJW_BGSSettings.rjw_bgs_detailed_debug)
ModLog.Message($"From {raceGeneDef.genes.Count} possible genes in {raceGeneDef.defName}, {genelist.Count} were added by chance ({RJW_BGSSettings.rjw_bgs_global_gene_chance} chance multiplier from Settings).");
return genelist;
}
/// <summary>
/// Adds a list of Genes to the pawns existing GeneSet.
/// Whether it is added as a Xenogene or Endogene is configured in Mod-Settings.
/// </summary>
/// <param name="pawn">The pawn for which Genes will be added</param>
/// <param name="genes">The Genes to add (Endogene by default, Xenogene with Mod Settings)</param>
public static void AddGenes(Pawn pawn, List<GeneDef> genes)
{
foreach (GeneDef gene in genes)
{
pawn.genes.AddGene(gene, false);
pawn.genes.AddGene(gene, RJW_BGSSettings.rjw_bgs_animal_genes_as_xenogenes);
}
}
//For ParchRJWHediffInsect_egg
/// <summary>
/// Initiates a bestiality baby with genes if the baby does not exist earlier.
/// This is used to make rjw-egg-pregnancies work.
/// Related file: PatchRJWHediffInsect_Egg.cs
/// </summary>
/// <param name="mother">The mother of the baby.</param>
/// <param name="dad">The father of the baby.</param>
/// <param name="baby">The baby created in non-pregnancy-way (has 0 Genes yet)</param>
public static void NewGenes(Pawn mother, Pawn dad, Pawn baby)
{
if (!RJW_BGSSettings.enabled)
if (!RJW_BGSSettings.rjw_bgs_enabled)
{
return;
}
ModLog.Message($"Triggering an New-Gene Animal-Gene-Inheritance for {baby.Name} ({dad.Name} + {mother.Name})");
if (baby.RaceProps.Humanlike)
{
if (baby.genes == null)

View File

@ -16,7 +16,7 @@ namespace RJW_BGS
[HarmonyPostfix]
public static void AddGenes(Pawn mother, Pawn dad, ref Hediff_BasePregnancy __instance)
{
if (!RJW_BGSSettings.enabled)
if (!RJW_BGSSettings.rjw_bgs_enabled)
{
return;
}

View File

@ -1,14 +1,8 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;
using System.Reflection;
using System.Reflection.Emit;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HarmonyLib;
using rjw;
using RimWorld;
using Verse;
namespace RJW_BGS
{

View File

@ -1,15 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HarmonyLib;
using RimWorld;
using Verse;
using rjw;
namespace RJW_BGS
{
/// <summary>
/// This Patch is applied to change the normal pregnancy to add animal-inheritance.
/// If the settings allow animal gene inheritance,
/// the genes are determined and "simply added".
/// </summary>
[HarmonyPatch(typeof(PregnancyUtility), "GetInheritedGeneSet", new Type[]
{
typeof(Pawn),
@ -22,7 +24,7 @@ namespace RJW_BGS
[HarmonyPostfix]
public static void AnimalInheritedGenes(Pawn father, Pawn mother, ref GeneSet __result)
{
if (!RJW_BGSSettings.enabled)
if (!RJW_BGSSettings.rjw_bgs_enabled)
{
return;
}

View File

@ -21,23 +21,31 @@ namespace RJW_BGS
listing_Standard.ColumnWidth = rect.width / 2.05f;
listing_Standard.Begin(rect);
listing_Standard.Gap(24f);
listing_Standard.CheckboxLabeled("enabled", ref enabled, "no function yet", 0f, 1f);
listing_Standard.CheckboxLabeled("enabled", ref rjw_bgs_enabled, "If toggled, Animal Pregnancies will try inherit genes.", 0f, 1f);
//listing_Standard.CheckboxLabeled("sexfrenzy", ref sexfrenzy, "disable the effects", 0f, 1f);
listing_Standard.Gap(5f);
listing_Standard.Label("gene inheritance chance"+ ": " +
Math.Round((double)(RJW_BGSSettings.global_gene_chance * 100f), 0).ToString() + "%", -1f, "modify chance for a gene to be inherited.");
RJW_BGSSettings.global_gene_chance = listing_Standard.Slider(RJW_BGSSettings.global_gene_chance, 0f, 5f);
Math.Round((double)(RJW_BGSSettings.rjw_bgs_global_gene_chance * 100f), 0).ToString() + "%", -1f, "modify chance for a gene to be inherited.");
RJW_BGSSettings.rjw_bgs_global_gene_chance = listing_Standard.Slider(RJW_BGSSettings.rjw_bgs_global_gene_chance, 0f, 5f);
listing_Standard.Gap(5f);
listing_Standard.CheckboxLabeled("genes as xenogenes", ref rjw_bgs_animal_genes_as_xenogenes, "If toggled, animal genes will be added as xenogenes.", 0f, 1f);
listing_Standard.Gap(5f);
listing_Standard.CheckboxLabeled("detailed-debug", ref rjw_bgs_detailed_debug, "Adds detailed information to the log about pregnancies and genes.", 0f, 1f);
listing_Standard.End();
}
public override void ExposeData()
{
base.ExposeData();
Scribe_Values.Look<bool>(ref RJW_BGSSettings.enabled, "enabled", RJW_BGSSettings.enabled, true);
Scribe_Values.Look<float>(ref RJW_BGSSettings.global_gene_chance, "global_gene_chance", RJW_BGSSettings.global_gene_chance, true);
Scribe_Values.Look<bool>(ref RJW_BGSSettings.rjw_bgs_enabled, "rjw_bgs_enabled", RJW_BGSSettings.rjw_bgs_enabled, true);
Scribe_Values.Look<float>(ref RJW_BGSSettings.rjw_bgs_global_gene_chance, "rjw_bgs_global_gene_chance", RJW_BGSSettings.rjw_bgs_global_gene_chance, true);
Scribe_Values.Look<bool>(ref RJW_BGSSettings.rjw_bgs_animal_genes_as_xenogenes, "rjw_bgs_animal_genes_as_xenogenes", RJW_BGSSettings.rjw_bgs_animal_genes_as_xenogenes, true);
Scribe_Values.Look<bool>(ref RJW_BGSSettings.rjw_bgs_detailed_debug, "rjw_bgs_detailed_debug", RJW_BGSSettings.rjw_bgs_detailed_debug, true);
}
public static float global_gene_chance = 1f;
public static bool enabled = true;
public static float rjw_bgs_global_gene_chance = 1f;
public static bool rjw_bgs_enabled = true;
public static bool rjw_bgs_animal_genes_as_xenogenes = false;
public static bool rjw_bgs_detailed_debug = false;
}
}

View File

@ -11,11 +11,11 @@ namespace RJW_BGS
public class RaceGeneDef : Def
{
public int priority;
public String raceGroup;
public string raceGroup; //keeping this for backwards compatibility
public List<string> raceGroups; //racegroup, but in list form so multiple can be entered, preference to use this over racegroup
public List<string> raceNames;
public List<string> pawnKindNames;
public List<BestialityGeneInheritanceDef> genes;
//public List<float> genechances;
public String hybridName;
}
}

View File

@ -1,11 +1,8 @@
using System;
using rjw;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using rjw;
using Verse;
using RimWorld;
namespace RJW_BGS
{
@ -21,14 +18,14 @@ namespace RJW_BGS
return result;
}
return null;
//First check if there is a matching pawnkinddef then race, then racegroup
}
public static List<RaceGeneDef> ValidRaceGeneDefs(Pawn pawn)
{
PawnKindDef kindDef = pawn.kindDef;
if (kindDef == null)
{
ModLog.Warning($"Error looking up PawnKindDef for {pawn.Name} - Could not lookup Animal Inheritance Genes");
return null;
}
string raceName = kindDef.race.defName;
@ -36,6 +33,9 @@ namespace RJW_BGS
PawnData pawnData = SaveStorage.DataStore.GetPawnData(pawn);
RaceGroupDef raceGroupDef = pawnData.RaceSupportDef;
if (RJW_BGSSettings.rjw_bgs_detailed_debug)
ModLog.Message($"Looking up Animal-Inheritable Genes for {pawn.Name} with KindDef {kindDef.defName},RaceName {raceName}, PawnKind {pawnKindName} and RaceGroup {raceGroupDef.defName}");
IEnumerable<RaceGeneDef> allDefs = DefDatabase<RaceGeneDef>.AllDefs;
List<RaceGeneDef> pawnKindDefs = allDefs.Where(delegate (RaceGeneDef group)
{
@ -43,26 +43,60 @@ namespace RJW_BGS
return pawnKindNames != null && pawnKindNames.Contains(pawnKindName);
}).ToList<RaceGeneDef>();
if (pawnKindDefs.Count() > 0)
{
DebugPrintRaceGeneDefs("PawnKindDefs",pawn.Name.ToStringFull,pawnKindDefs);
return pawnKindDefs;
}
else if (RJW_BGSSettings.rjw_bgs_detailed_debug)
ModLog.Message($"Did not find PawnKindDefs for {pawn.Name.ToStringFull}");
List<RaceGeneDef> raceKindDefs = allDefs.Where(delegate (RaceGeneDef group)
{
List<string> raceNames = group.raceNames;
return raceNames != null && raceNames.Contains(raceName);
}).ToList<RaceGeneDef>();
if (raceKindDefs.Count() > 0)
{
DebugPrintRaceGeneDefs("PawnKindDefs", pawn.Name.ToStringFull, raceKindDefs);
return raceKindDefs;
}
else if (RJW_BGSSettings.rjw_bgs_detailed_debug)
ModLog.Message($"Did not find RaceKindDefs for {pawn.Name.ToStringFull}");
List<RaceGeneDef> raceGroupDefs = new List<RaceGeneDef>();
if (raceGroupDef != null)
{
raceGroupDefs = allDefs.Where(delegate (RaceGeneDef group)
{
String raceGroupDefName = group.raceGroup;
return raceGroupDefName != null && raceGroupDefName == raceGroupDef.defName;
string raceGroupDefName = group.raceGroup;
List<string> list_raceGroupDefName = group.raceGroups;
return (raceGroupDefName != null && raceGroupDefName == raceGroupDef.defName)
|| (list_raceGroupDefName != null && list_raceGroupDefName.Contains(raceGroupDef.defName));
}).ToList<RaceGeneDef>();
}
if (raceGroupDefs.Count() > 0)
{
DebugPrintRaceGeneDefs("RaceKindDefs", pawn.Name.ToStringFull, raceGroupDefs);
return raceGroupDefs;
}
else if (RJW_BGSSettings.rjw_bgs_detailed_debug)
ModLog.Message($"Did not find RaceGroupDefs for {pawn.Name.ToStringFull}");
ModLog.Message($"Did not find any Genes inheritable for {pawn.Name.ToStringFull}");
return new List<RaceGeneDef>();
}
private static void DebugPrintRaceGeneDefs(String header,String identifier,List<RaceGeneDef> defs)
{
if (RJW_BGSSettings.rjw_bgs_detailed_debug)
{
var defString = "[";
foreach (RaceGeneDef raceGeneDef in defs)
defString += $"({raceGeneDef.priority}:{raceGeneDef.defName} - {raceGeneDef.genes.Count} Genes)";
defString += "]";
ModLog.Message($"Found the following {header}-Genes for {identifier}: {defString}");
}
}
}
}

34
Source/Common/ModLog.cs Normal file
View File

@ -0,0 +1,34 @@
using Verse;
namespace RJW_Genes
{
internal class ModLog
{
public static string ModId => "RJW-Genes";
/// <summary>
/// Logs the given message with [SaveStorage.ModId] appended.
/// </summary>
public static void Error(string message)
{
Log.Error($"[{ModId}] {message}");
}
/// <summary>
/// Logs the given message with [SaveStorage.ModId] appended.
/// </summary>
public static void Message(string message)
{
Log.Message($"[{ModId}] {message}");
}
/// <summary>
/// Logs the given message with [SaveStorage.ModId] appended.
/// </summary>
public static void Warning(string message)
{
Log.Warning($"[{ModId}] {message}");
}
}
}

View File

@ -51,6 +51,7 @@ namespace RJW_Genes
public static readonly GeneDef rjw_genes_mechbreeder;
public static readonly GeneDef rjw_genes_insectincubator;
public static readonly GeneDef rjw_genes_insectbreeder;
public static readonly GeneDef rjw_genes_zoophile;
// Cum
public static readonly GeneDef rjw_genes_no_cum;
@ -63,7 +64,8 @@ namespace RJW_Genes
// Reproduction
public static readonly GeneDef rjw_genes_hypersexual;
public static readonly GeneDef rjw_genes_rapist;
public static readonly GeneDef rjw_genes_zoophile;
public static readonly GeneDef rjw_genes_homosexual;
public static readonly GeneDef rjw_genes_bisexual;
// Damage & Side Effects
[MayRequire("LustLicentia.RJWLabs")] public static readonly GeneDef rjw_genes_elasticity;
@ -71,23 +73,29 @@ namespace RJW_Genes
// Special
public static readonly GeneDef rjw_genes_orgasm_rush;
public static readonly GeneDef rjw_genes_youth_fountain;
public static readonly GeneDef rjw_genes_sex_age_drain;
public static readonly GeneDef rjw_genes_aphrodisiac_pheromones;
// LifeForce
public static readonly GeneDef rjw_genes_lifeforce;
public static readonly GeneDef rjw_genes_pussyhealing;
public static readonly GeneDef rjw_genes_lifeforce_drain;
public static readonly GeneDef rjw_genes_vaginal_absorber;
public static readonly GeneDef rjw_genes_anal_absorber;
public static readonly GeneDef rjw_genes_drainer;
// Cosmetic
public static readonly GeneDef rjw_genes_succubus_tail;
public static readonly GeneDef rjw_genes_succubus_wings;
// Others & Non-Genes
public static readonly GeneDef rjw_genes_youth_fountain;
public static readonly GeneDef rjw_genes_sex_age_drain;
public static readonly HediffDef rjw_genes_orgasm_rush_hediff;
public static readonly XenotypeDef Succubus;
}
}

View File

@ -1,5 +1,4 @@
using LicentiaLabs;
using rjw;
using rjw;
using Verse;
namespace RJW_Genes

View File

@ -13,6 +13,12 @@ namespace RJW_Genes
{
base.PostMake();
// 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))
{
return;
}
if (GenderUtility.IsFemale(pawn) && additional_genital == null)
{
createAndAddPenis();
@ -27,6 +33,12 @@ namespace RJW_Genes
{
base.PostAdd();
// 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))
{
return;
}
if (pawn.gender == Gender.Female && additional_genital == null)
{
createAndAddPenis();
@ -79,5 +91,15 @@ namespace RJW_Genes
pawn.health.AddHediff(additional_genital, partBPR);
}
private static bool IsAlreadyFuta(Pawn pawn)
{
if (pawn == null)
return false;
if (!Genital_Helper.has_genitals(pawn))
return false;
return
(Genital_Helper.has_penis_fertile(pawn) || Genital_Helper.has_penis_infertile(pawn))
&& Genital_Helper.has_vagina(pawn) ;
}
}
}

View File

@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using Verse;
using RimWorld;
namespace RJW_Genes
@ -102,7 +103,7 @@ namespace RJW_Genes
return pawn.genes.HasGene(GeneDefOf.rjw_genes_youth_fountain);
}
internal static bool IsAgeDrainer(Pawn pawn)
public static bool IsAgeDrainer(Pawn pawn)
{
if (pawn.genes == null)
{
@ -173,5 +174,20 @@ namespace RJW_Genes
}
return pawn.genes.HasGene(GeneDefOf.rjw_genes_unbreakable);
}
public static List<Gene_GenitaliaResizingGene> GetGenitaliaResizingGenes(Pawn pawn)
{
var ResizingGenes = new List<Gene_GenitaliaResizingGene>();
// Error Handling: Issue with Pawn or Genes return empty.
if (pawn == null || pawn.genes == null)
return ResizingGenes;
foreach (Gene gene in pawn.genes.GenesListForReading)
if (gene is Gene_GenitaliaResizingGene resizing_gene)
ResizingGenes.Add(resizing_gene);
return ResizingGenes;
}
}
}

View File

@ -1,24 +1,12 @@
using Verse;
namespace RJW_Genes
{
public class Gene_BigBreasts : RJW_Gene
public class Gene_BigBreasts : Gene_GenitaliaResizingGene
{
public override void PostMake()
public override void Resize()
{
base.PostMake();
if (pawn.gender == Gender.Female)
SizeAdjuster.AdjustAllBreastSizes(pawn,0.5f,1.0f);
}
public override void PostAdd()
{
base.PostAdd();
if (pawn.gender == Gender.Female)
SizeAdjuster.AdjustAllBreastSizes(pawn, 0.5f, 1.0f);
}
}
}
}

View File

@ -1,20 +1,10 @@
namespace RJW_Genes
{
public class Gene_BigMaleGenitalia : RJW_Gene
public class Gene_BigMaleGenitalia : Gene_GenitaliaResizingGene
{
public override void PostMake()
public override void Resize()
{
base.PostMake();
SizeAdjuster.AdjustAllPenisSizes(pawn,0.5f,1.0f);
}
public override void PostAdd()
{
base.PostAdd();
SizeAdjuster.AdjustAllPenisSizes(pawn, 0.5f, 1.0f);
}
}
}
}

View File

@ -0,0 +1,49 @@
namespace RJW_Genes
{
/// <summary>
/// Parent Gene for Genitalia Resizing. All Resizing genes should inherit for this class.
///
/// This helps with some functions (e.g. "hasGenitaliaResizingGenes(pawn)") but also to fire genitalia resizing later in life for Pawns.
/// (No Children with huge ding dongs, and I don't want kids with tight anuses I am not that degenerate)
/// </summary>
public abstract class Gene_GenitaliaResizingGene : RJW_Gene
{
public const int RESIZING_AGE = 20;
public bool WasApplied { get; set; }
public override void PostMake()
{
base.PostMake();
if (pawn.ageTracker.AgeBiologicalYears >= RESIZING_AGE)
{
Resize();
WasApplied = true;
}
}
public override void PostAdd()
{
base.PostAdd();
if (pawn.ageTracker.AgeBiologicalYears >= RESIZING_AGE)
{
Resize();
WasApplied = true;
}
}
/// <summary>
/// Used to resize the pawns genitalia.
/// All Logic should be put here:
/// 1. Filters for Gender
/// 2. Filters for Genitalia Existance
/// 3. Selection of right Genitalia
/// 4. Adjustment of Size
///
/// I kept it intentionally broad, so that e.g. the Penis Resize can resize multiple penises and also for futas,
/// while the breast-gene is female only.
/// </summary>
public abstract void Resize();
}
}

View File

@ -1,22 +1,12 @@
namespace RJW_Genes
using Verse;
namespace RJW_Genes
{
public class Gene_LooseAnus : RJW_Gene
public class Gene_LooseAnus : Gene_GenitaliaResizingGene
{
public override void PostMake()
public override void Resize()
{
base.PostMake();
SizeAdjuster.AdjustAllAnusSizes(pawn, 0.5f, 1.0f);
}
public override void PostAdd()
{
base.PostAdd();
SizeAdjuster.AdjustAllAnusSizes(pawn, 0.5f, 1.0f);
}
}
}

View File

@ -1,22 +1,12 @@
namespace RJW_Genes
using Verse;
namespace RJW_Genes
{
public class Gene_LooseFemaleGenitalia : RJW_Gene
public class Gene_LooseFemaleGenitalia : Gene_GenitaliaResizingGene
{
public override void PostMake()
public override void Resize()
{
base.PostMake();
SizeAdjuster.AdjustAllVaginaSizes(pawn, 0.5f, 1.0f);
}
public override void PostAdd()
{
base.PostAdd();
SizeAdjuster.AdjustAllVaginaSizes(pawn, 0.5f, 1.0f);
}
}
}

View File

@ -1,18 +1,11 @@
namespace RJW_Genes
using Verse;
namespace RJW_Genes
{
public class Gene_SmallBreasts : RJW_Gene
public class Gene_SmallBreasts : Gene_GenitaliaResizingGene
{
public override void PostMake()
public override void Resize()
{
base.PostMake();
SizeAdjuster.AdjustAllBreastSizes(pawn, 0.0f, 0.5f);
}
public override void PostAdd()
{
base.PostAdd();
SizeAdjuster.AdjustAllBreastSizes(pawn, 0.0f, 0.5f);
}
}

View File

@ -1,20 +1,10 @@
namespace RJW_Genes
{
public class Gene_SmallMaleGenitalia : RJW_Gene
public class Gene_SmallMaleGenitalia : Gene_GenitaliaResizingGene
{
public override void PostMake()
public override void Resize()
{
base.PostMake();
SizeAdjuster.AdjustAllPenisSizes(pawn,0.0f,0.5f);
}
public override void PostAdd()
{
base.PostAdd();
SizeAdjuster.AdjustAllPenisSizes(pawn, 0.0f, 0.5f);
}
}
}
}

View File

@ -1,21 +1,10 @@
namespace RJW_Genes
{
public class Gene_TightAnus : RJW_Gene
public class Gene_TightAnus : Gene_GenitaliaResizingGene
{
public override void PostMake()
public override void Resize()
{
base.PostMake();
SizeAdjuster.AdjustAllAnusSizes(pawn, 0.0f, 0.5f);
}
public override void PostAdd()
{
base.PostAdd();
SizeAdjuster.AdjustAllAnusSizes(pawn, 0.0f, 0.5f);
}
}
}
}

View File

@ -1,20 +1,10 @@
namespace RJW_Genes
{
public class Gene_TightFemaleGenitalia : RJW_Gene
public class Gene_TightFemaleGenitalia : Gene_GenitaliaResizingGene
{
public override void PostMake()
public override void Resize()
{
base.PostMake();
SizeAdjuster.AdjustAllVaginaSizes(pawn, 0.0f, 0.5f);
}
public override void PostAdd()
{
base.PostAdd();
SizeAdjuster.AdjustAllVaginaSizes(pawn, 0.0f, 0.5f);
}
}
}
}

View File

@ -0,0 +1,30 @@
using HarmonyLib;
using Verse;
namespace RJW_Genes
{
/// <summary>
/// This Patch adds behavior to all resizing genes:
/// At Age RESIZING_MIN_AGE the Pawns Resizing Genes will trigger again, if not already triggered somewhere else.
/// This is meant to allow kids to grow up without resized genitals, and resize later (Fixing #11).
/// </summary>
[HarmonyPatch(typeof(Pawn_AgeTracker), "BirthdayBiological")]
public class Patch_ResizingOnAdulthood
{
static void Postfix(Pawn ___pawn, int birthdayAge)
{
if (birthdayAge >= Gene_GenitaliaResizingGene.RESIZING_AGE)
{
foreach(Gene_GenitaliaResizingGene gene in GeneUtility.GetGenitaliaResizingGenes(___pawn))
{
if (!gene.WasApplied)
{
gene.Resize();
gene.WasApplied = true;
}
}
}
}
}
}

View File

@ -24,7 +24,7 @@ namespace RJW_Genes
Pawn pawn = this.pawn;
return ((pawn != null) ? pawn.ageTracker : null) == null ||
((float)this.pawn.ageTracker.AgeBiologicalYears >= this.def.minAgeActive && this.pawn.ageTracker.AgeBiologicalYears >= (RJWSettings.AllowYouthSex ? 13f : 18f));
((float)this.pawn.ageTracker.AgeBiologicalYears >= this.def.minAgeActive);
}
}

View File

@ -13,9 +13,11 @@ namespace RJW_Genes.Genes.Special
{
const long AGE_TRANSFERED = 120000; // 120k == 2 days
// 20 Years * 60 Days / Year * 60k Ticks/Day + 1 for safety
const long MINIMUM_AGE = 20 * 60 * 60000 + 1;
// Comment Below in for debugging, changes years
// const long AGE_TRANSFERED = 6000000; // 6000k == 100 days
// const long AGE_TRANSFERED = 12000000;
public static void Postfix(SexProps props)
{
if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal() )
@ -25,12 +27,12 @@ namespace RJW_Genes.Genes.Special
if (GeneUtility.IsAgeDrainer(props.pawn))
{
var pawnAge = props.pawn.ageTracker.AgeBiologicalTicks;
var pawnMinAge = props.pawn.ageTracker.AdultMinAgeTicks;
//ModLog.Error($"Firing Age Drain \nMinimum Age is \t{MINIMUM_AGE} \nPawn Age is \t{pawnAge} \nTransferred \t{AGE_TRANSFERED}\nResulting in \t{pawnAge - AGE_TRANSFERED}");
// Make Partner older
props.partner.ageTracker.AgeBiologicalTicks += AGE_TRANSFERED;
// Make Pawn younger
props.pawn.ageTracker.AgeBiologicalTicks = Math.Max(pawnMinAge, pawnAge - AGE_TRANSFERED);
props.pawn.ageTracker.AgeBiologicalTicks = Math.Max(MINIMUM_AGE, (pawnAge - AGE_TRANSFERED));
}
}

View File

@ -46,10 +46,10 @@ namespace RJW_Genes
/// <returns></returns>
public static Hediff GetOrgasmRushHediff(Pawn orgasmed)
{
Hediff orgasmRushHediff = orgasmed.health.hediffSet.GetFirstHediffOfDef(GeneDefOf.rjw_genes_orgasm_rush_hediff);
Hediff orgasmRushHediff = orgasmed.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_orgasm_rush_hediff);
if (orgasmRushHediff == null)
{
orgasmRushHediff = HediffMaker.MakeHediff(GeneDefOf.rjw_genes_orgasm_rush_hediff, orgasmed);
orgasmRushHediff = HediffMaker.MakeHediff(HediffDefOf.rjw_genes_orgasm_rush_hediff, orgasmed);
orgasmRushHediff.Severity = 0;
orgasmed.health.AddHediff(orgasmRushHediff);
}

View File

@ -13,9 +13,11 @@ namespace RJW_Genes.Genes.Special
{
const long AGE_REDUCTION = 60000; // 60k == 1 day
// 20 Years * 60 Days / Year * 60k Ticks/Day + 1 for safety
const long MINIMUM_AGE = 20 * 60 * 60000 + 1;
// Comment Below in for debugging
//const long AGE_REDUCTION = 6000000; // 6000k == 100 days
// const long AGE_REDUCTION = 6000000; // 6000k == 100 days
public static void Postfix(SexProps props)
{
if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal())
@ -25,12 +27,18 @@ namespace RJW_Genes.Genes.Special
if (GeneUtility.IsYouthFountain(props.pawn))
{
var partnerAge = props.partner.ageTracker.AgeBiologicalTicks;
var minAge = props.partner.ageTracker.AdultMinAgeTicks;
props.partner.ageTracker.AgeBiologicalTicks = Math.Max(minAge, partnerAge - AGE_REDUCTION);
//ModLog.Error($"Firing Youth Fountain \nMinimum Age is \t{MINIMUM_AGE}\t{ticksToYears(MINIMUM_AGE)}y\nPawn Age is \t{partnerAge}\t{ticksToYears(partnerAge)}y \nTransferred \t {AGE_REDUCTION}\t{ticksToYears(AGE_REDUCTION)}y\nResulting in \t{partnerAge - AGE_REDUCTION}\t{ticksToYears(partnerAge - AGE_REDUCTION)}y");
props.partner.ageTracker.AgeBiologicalTicks = Math.Max(MINIMUM_AGE, partnerAge - AGE_REDUCTION);
}
}
private static float ticksToYears(long ticks)
{
return (ticks / 60000f) / 60f;
}
}
}

View File

@ -14,5 +14,6 @@ namespace RJW_Genes
public static readonly HediffDef Aphrodisiac_Pheromone;
public static readonly HediffDef Fertilin_Lost;
public static readonly HediffDef Succubus_Drained;
public static readonly HediffDef rjw_genes_orgasm_rush_hediff;
}
}

View File

@ -63,7 +63,6 @@
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="First.cs" />
<Compile Include="Animal_Inheritance\Harmony_Init.cs" />
<Compile Include="Animal_Inheritance\InheritanceUtility.cs" />
<Compile Include="Animal_Inheritance\PatchRJWBestialityPregnancyUtility.cs" />
@ -74,6 +73,7 @@
<Compile Include="Animal_Inheritance\RJW_BGSSettings.cs" />
<Compile Include="Animal_Inheritance\RJW_BGSSettingsController.cs" />
<Compile Include="Animal_Inheritance\BestialityGeneInheritanceDef.cs" />
<Compile Include="Common\ModLog.cs" />
<Compile Include="GeneDefOf.cs" />
<Compile Include="Genes\Breeding\Gene_MechBreeder.cs" />
<Compile Include="Genes\Breeding\PatchMechBirth.cs" />
@ -85,6 +85,7 @@
<Compile Include="Genes\Cum\Gene_MuchCum.cs" />
<Compile Include="Genes\Cum\Gene_NoCum.cs" />
<Compile Include="Genes\Cum\Patch_TransferNutrition.cs" />
<Compile Include="Genes\Damage\Gene_Unbreakable.cs" />
<Compile Include="Genes\Damage\Gene_Elasticity.cs" />
<Compile Include="Genes\Cum\Patch_Cumflation.cs" />
<Compile Include="Genes\ExtraGenitalia\Gene_ExtraBreasts.cs" />
@ -101,6 +102,7 @@
<Compile Include="Genes\Gender\Gene_MaleOnly.cs" />
<Compile Include="Genes\GeneUtility.cs" />
<Compile Include="Genes\GenitaliaSize\Gene_BigBreasts.cs" />
<Compile Include="Genes\GenitaliaSize\Gene_GenitaliaResizingGene.cs" />
<Compile Include="Genes\GenitaliaSize\Gene_LooseAnus.cs" />
<Compile Include="Genes\GenitaliaSize\Gene_LooseFemaleGenitalia.cs" />
<Compile Include="Genes\GenitaliaSize\Gene_TightAnus.cs" />
@ -108,6 +110,7 @@
<Compile Include="Genes\GenitaliaSize\Gene_TightFemaleGenitalia.cs" />
<Compile Include="Genes\GenitaliaSize\Gene_SmallMaleGenitalia.cs" />
<Compile Include="Genes\GenitaliaSize\Gene_BigMaleGenitalia.cs" />
<Compile Include="Genes\GenitaliaSize\Patch_ResizingOnAdulthood.cs" />
<Compile Include="Genes\GenitaliaSize\SizeAdjuster.cs" />
<Compile Include="Genes\Genitalia\Gene_SlimeGenitalia.cs" />
<Compile Include="Genes\Genitalia\Gene_DragonGenitalia.cs" />
@ -134,9 +137,7 @@
<Compile Include="Genes\Life_Force\ThinkNode_ConditionalLowLifeForce.cs" />
<Compile Include="Genes\Life_Force\ThinkNode_ConditionalCritcalLifeForce.cs" />
<Compile Include="Genes\Life_Force\JobGiver_GetLifeForce.cs" />
<Compile Include="Genes\Damage\Gene_Unbreakable.cs" />
<Compile Include="Genes\Special\Patch_AgeDrain.cs" />
<Compile Include="Genes\Special\Patch_Youth_Fountain.cs" />
<Compile Include="Interactions\CompAbility_SexInteractionRequirements.cs" />
<Compile Include="Genes\Life_Force\Abilities\CompAbilityEffect_PussyHeal.cs" />
<Compile Include="Genes\Life_Force\Abilities\CompProperties_AbilityLifeForceCost.cs" />
@ -155,6 +156,7 @@
<Compile Include="Genes\Special\Gene_Aphrodisiac_Pheromones_.cs" />
<Compile Include="Genes\Life_Force\Patch_LifeForce.cs" />
<Compile Include="Genes\Special\Patch_OrgasmRush.cs" />
<Compile Include="Genes\Special\Patch_Youth_Fountain.cs" />
<Compile Include="HarmonyInit.cs" />
<Compile Include="HediffDefOf.cs" />
<Compile Include="Interactions\CustomSexInteraction_Helper.cs" />