Compare commits

...

8 commits

27 changed files with 220 additions and 87 deletions

View file

@ -23,7 +23,15 @@
- Issues with Elasticity References (#87)
- Null Pointer for LoveFeeding when finding Mechs. Thanks to @Jaaldabaoth (Fixes #90)
- Changes to the Implants introduced in 2.0.0 - they imposed a hidden dependency on Royalty (Fixes #89)
- Issues when generating relations (#98, fixed in #106 thanks @Jaaldabaoth)
- Hardening of Licentia Dependencies (#105)
- Littered Birth and Chest-Burst Pregnancy are now mutually exclusive (#96)
- Youth Fountain cannot youth on masturbation anymore (#99)
- Documented the HasActiveGene Error Message (#104)
- Pawns with "rjw_genes_no_sexneed" wont go raping (or atleast way less, #100)
- Extra Nullcheck for Genes in Orgasmic Mytosis (#95)
- Orgasmic Mytosis Pawns *should* inherit the Xenotypename and favorite colour now
- Babies should not have "SexChangeThoughts" anymore when they had a (fe)male-only gene (#103)
**Changes**:
@ -34,6 +42,7 @@
- Translate-Key for Animal Hybrid Race-Names
- "Tick-Speed" for Evergrowth moved from Mod-Settings to XML
- Some new Icons thanks to Kira-Bad-Artist
- Some new Icons thanks to Archer
# 2.0.0

View file

@ -31,3 +31,4 @@ But please consider also the following:
- Fertilin, Fertilin Drain, Healpussy, Succubus Wing & Tail come from Shabakur
- Littered Birth, Many of the Penis Types are from Jaaldabaoth
- Feline Genitalia, Animal Mating Call and Udder are from Kira-Bad-Artist
- Sexual Tamer, Pheromone Spit and Mating call are from Archer

View file

@ -5,7 +5,7 @@
<defName>rjw_genes_ability_mating_call</defName>
<label>Mating Call</label>
<description>Calls nearby animals to breed me.</description>
<iconPath>Genes/Icons/Animal_Mating_Call</iconPath>
<iconPath>Genes/Icons/Mating_Call_2</iconPath>
<displayGizmoWhileUndrafted>true</displayGizmoWhileUndrafted>
<disableGizmoWhileUndrafted>false</disableGizmoWhileUndrafted>

View file

@ -4,7 +4,7 @@
<defName>rjw_genes_ability_pheromone_spit</defName>
<label>pheromone spit</label>
<description>Spit a condensed ball of animal pheromones to mark a target. Nearby Animals will try to breed the target. This means all animals - hostile, friendly and wild.</description>
<iconPath>Genes/Icons/Pheromone_Spit</iconPath>
<iconPath>Genes/Icons/RJW_Genes_PheromoneSpit</iconPath>
<cooldownTicksRange>3000</cooldownTicksRange>
<displayOrder>201</displayOrder>

View file

@ -82,7 +82,7 @@
<defName>rjw_genes_mating_call</defName>
<label>Mating Call</label>
<description>This gene allows to call nearby animals and invite them for mating.</description>
<iconPath>Genes/Icons/Animal_Mating_Call</iconPath>
<iconPath>Genes/Icons/RJW_Genes_Mating_Call</iconPath>
<displayOrderInCategory>65</displayOrderInCategory>
<abilities>
<li>rjw_genes_ability_mating_call</li>
@ -99,7 +99,7 @@
<defName>rjw_genes_pheromone_spit</defName>
<label>Pheromone Spit</label>
<description>This gene allows to mark targets for breeding, enticing nearby animals for a ride.</description>
<iconPath>Genes/Icons/Pheromone_Spit</iconPath>
<iconPath>Genes/Icons/RJW_Genes_PheromoneSpit</iconPath>
<displayOrderInCategory>66</displayOrderInCategory>
<abilities>
<li>rjw_genes_ability_pheromone_spit</li>

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8" ?>
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<GeneDef>
@ -16,11 +16,12 @@
<randomChosen>false</randomChosen>
<modExtensions>
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VanillaGenesExpanded.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="VanillaGenesExpanded.GeneExtension">
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
</li>
</modExtensions>
</GeneDef>
<GeneDef>
@ -39,11 +40,12 @@
<randomChosen>false</randomChosen>
<modExtensions>
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VanillaGenesExpanded.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="VanillaGenesExpanded.GeneExtension">
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
</li>
</modExtensions>
</GeneDef>
<!--
@ -62,7 +64,8 @@
</forcedTraits>
<modExtensions>
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VanillaGenesExpanded.GeneExtension">
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core"
Class="VanillaGenesExpanded.GeneExtension">
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
</li>
@ -70,7 +73,7 @@
</GeneDef>
-->
<GeneDef>
<GeneDef>
<defName>rjw_genes_masochist</defName>
<label>masochist</label>
<displayCategory>Reproduction</displayCategory>
@ -86,11 +89,12 @@
<randomChosen>false</randomChosen>
<modExtensions>
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VanillaGenesExpanded.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="VanillaGenesExpanded.GeneExtension">
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
</li>
</modExtensions>
</GeneDef>
<GeneDef>
@ -112,11 +116,12 @@
<randomChosen>false</randomChosen>
<modExtensions>
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VanillaGenesExpanded.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="VanillaGenesExpanded.GeneExtension">
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
</li>
</modExtensions>
</GeneDef>
<GeneDef>
@ -138,56 +143,61 @@
<randomChosen>false</randomChosen>
<modExtensions>
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VanillaGenesExpanded.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="VanillaGenesExpanded.GeneExtension">
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
</li>
</modExtensions>
</GeneDef>
<GeneDef>
<defName>rjw_genes_no_sex_need</defName>
<label>asexual</label>
<description>Carriers of this gene do not have a sex-need. They can still participate in sex, </description>
<iconPath>Genes/Icons/Empty</iconPath>
<displayOrderInCategory>5</displayOrderInCategory>
<disablesNeeds>
<li>Sex</li>
</disablesNeeds>
<biostatMet>-1</biostatMet>
<biostatCpx>2</biostatCpx>
<GeneDef>
<defName>rjw_genes_no_sex_need</defName>
<label>asexual</label>
<description>Carriers of this gene do not have a sex-need. They can still participate in
sex, </description>
<iconPath>Genes/Icons/Empty</iconPath>
<displayOrderInCategory>5</displayOrderInCategory>
<disablesNeeds>
<li>Sex</li>
</disablesNeeds>
<biostatMet>-1</biostatMet>
<biostatCpx>2</biostatCpx>
<randomChosen>false</randomChosen>
<exclusionTags>
<li>rjw_genes_sexual_orientation</li>
</exclusionTags>
<randomChosen>false</randomChosen>
<exclusionTags>
<li>rjw_genes_sexual_orientation</li>
</exclusionTags>
<modExtensions>
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core" Class="VanillaGenesExpanded.GeneExtension">
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
</li>
</modExtensions>
</GeneDef>
<modExtensions>
<li MayRequire="OskarPotocki.VanillaFactionsExpanded.Core"
Class="VanillaGenesExpanded.GeneExtension">
<backgroundPathEndogenes>Genes/Icons/RJW_Genes_Endogene_Background</backgroundPathEndogenes>
<backgroundPathXenogenes>Genes/Icons/RJW_Genes_Xenogene_Background</backgroundPathXenogenes>
</li>
</modExtensions>
</GeneDef>
<GeneDef>
<defName>LitteredBirths</defName>
<label>littered births</label>
<displayCategory>Reproduction</displayCategory>
<description>Female carriers of this gene birth litters instead of just one baby, with a chance of having two to four babies per pregnancy.</description>
<iconPath>Genes/Icons/Gene_LitteredBirths</iconPath>
<displayOrderInCategory>110</displayOrderInCategory>
<marketValueFactor>1.10</marketValueFactor>
<biostatMet>-2</biostatMet>
<biostatCpx>1</biostatCpx>
<modExtensions>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>ImpregnationFetishQuirk</Satisfiedquirk>
</li>
</modExtensions>
</GeneDef>
<GeneDef>
<defName>LitteredBirths</defName>
<label>littered births</label>
<displayCategory>Reproduction</displayCategory>
<description>Female carriers of this gene birth litters instead of just one baby, with a
chance of having two to four babies per pregnancy.</description>
<iconPath>Genes/Icons/Gene_LitteredBirths</iconPath>
<displayOrderInCategory>110</displayOrderInCategory>
<marketValueFactor>1.10</marketValueFactor>
<biostatMet>-2</biostatMet>
<biostatCpx>1</biostatCpx>
<modExtensions>
<li Class="RJW_Genes.QirkExtension">
<Satisfiedquirk>ImpregnationFetishQuirk</Satisfiedquirk>
</li>
</modExtensions>
<exclusionTags>
<li>rjw_genes_littered_birth_vs_chestburst</li>
</exclusionTags>
</GeneDef>
</Defs>

View file

@ -137,7 +137,7 @@
<label>Sexual Tamer</label>
<labelShortAdj>sextamer</labelShortAdj>
<description>Bestiality has a chance to tame animals or advance their training.</description>
<iconPath>Genes/Icons/Sexual_Tamer</iconPath>
<iconPath>Genes/Icons/RJW_Genes_SexualTamer</iconPath>
<displayOrderInCategory>14</displayOrderInCategory>
<biostatCpx>2</biostatCpx>
<biostatMet>-1</biostatMet>

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<Patch>
<Operation Class="PatchOperationFindMod">
<mods>
<li>Vanilla Races Expanded - Insector</li>
</mods>
<match Class="PatchOperationAdd">
<xpath>Defs/GeneDef[defName = "VRE_ChestburstPregnancy"]/exclusionTags</xpath>
<value>
<li>rjw_genes_littered_birth_vs_chestburst</li>
</value>
</match>
</Operation>
</Patch>

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

Binary file not shown.

View file

@ -2,6 +2,34 @@
Collection of Known Bugs and reasons for their origin.
## System.MissingMethodException: bool RimWorld.Pawn_GeneTracker.HasActiveGene(Verse.GeneDef)
You might see a bug like this:
```
Exception in Verse.AI.ThinkNode_Priority TryIssueJobPackage: System.MissingMethodException: bool RimWorld.Pawn_GeneTracker.HasActiveGene(Verse.GeneDef)
[Ref A8629303] Duplicate stacktrace, see ref for original
UnityEngine.StackTraceUtility:ExtractStackTrace ()
(wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.Log.Error_Patch2 (string)
Verse.AI.ThinkNode_Priority:TryIssueJobPackage (Verse.Pawn,Verse.AI.JobIssueParams)
Verse.AI.ThinkNode_SubtreesByTag:TryIssueJobPackage (Verse.Pawn,Verse.AI.JobIssueParams)
Verse.AI.ThinkNode_Priority:TryIssueJobPackage (Verse.Pawn,Verse.AI.JobIssueParams)
Verse.AI.Pawn_JobTracker:DetermineNextJob (Verse.ThinkTreeDef&,bool)
Verse.AI.Pawn_JobTracker:TryFindAndStartJob ()
(wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.AI.Pawn_JobTracker.EndCurrentJob_Patch1 (Verse.AI.Pawn_JobTracker,Verse.AI.JobCondition,bool,bool)
(wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.AI.Pawn_JobTracker.JobTrackerTick_Patch0 (Verse.AI.Pawn_JobTracker)
(wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.Pawn.Tick_Patch2 (Verse.Pawn)
Verse.TickList:Tick ()
(wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.TickManager.DoSingleTick_Patch3 (Verse.TickManager)
Verse.TickManager:TickManagerUpdate ()
(wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition:Verse.Game.UpdatePlay_Patch2 (Verse.Game)
Verse.Root_Play:Update ()
```
This is due to the game not being updated - hasActiveGene has been introduced later than 1.5.
You will have to update your game.
## My Youth Fountain / Age Drainer Pawns do not alter Ages!!!
Issue: You had a pawn with Youth Fountain have Sex with another Pawn, and the other pawn did not get younger.

View file

@ -12,6 +12,8 @@ namespace RJW_Genes
{
/// <summary>
/// This Patch handles the changes to Fathers / Mothers when dealing with Femboys and Male/Male Pregnancies.
///
/// This is related to
/// </summary>
[HarmonyPatch(typeof(ParentRelationUtility))]
public class Patch_ParentRelationUtility_GetParents

View file

@ -28,6 +28,9 @@ namespace RJW_Genes
if (props == null || props.pawn == null || props.partner == null) return;
// Minor Hardening to help with #105
if (!ModsConfig.IsActive("LustLicentia.RJWLabs")) return;
if (props.pawn.genes != null && props.pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_likes_cumflation) )
{
AddOrIncreaseCumflationCounterHediff(props.pawn);

View file

@ -101,5 +101,20 @@ namespace RJW_Genes
pawn.health.RemoveHediff(hediff);
}
}
/// <summary>
/// This check helps to get babies after birth, if the pawn was born with the gene it does not need to have thoughts.
/// There are very different ways to do the life stages, and there are also HAR people still around,
/// so instead of checking for stages I intentionally check for the biological ticks to be very low (that they can only exist basically if they are born right before).
/// Issue is tracked in #103.
/// </summary>
/// <param name="pawn"></param>
public static void RemoveSexChangeThoughtsIfTooYoung(Pawn pawn)
{
if (pawn.ageTracker.AgeBiologicalTicks < 1000)
{
GenderUtility.RemoveAllSexChangeThoughts(pawn);
}
}
}
}

View file

@ -14,12 +14,15 @@ namespace RJW_Genes
// Here we call Sexualization after the Sex-Change
if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
Sexualizer.sexualize_pawn(pawn);
GenderUtility.RemoveSexChangeThoughtsIfTooYoung(this.pawn);
}
public override void PostAdd()
{
base.PostMake();
AdjustPawnToFemale();
GenderUtility.RemoveSexChangeThoughtsIfTooYoung(this.pawn);
}
private void AdjustPawnToFemale()

View file

@ -14,12 +14,15 @@ namespace RJW_Genes
// Here we call Sexualization after the Sex-Change
if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
Sexualizer.sexualize_pawn(pawn);
GenderUtility.RemoveSexChangeThoughtsIfTooYoung(this.pawn);
}
public override void PostAdd()
{
base.PostMake();
AdjustPawnToMale();
GenderUtility.RemoveSexChangeThoughtsIfTooYoung(this.pawn);
}
private void AdjustPawnToMale()

View file

@ -0,0 +1,28 @@
using HarmonyLib;
using rjw;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
namespace RJW_Genes.Genes.Patches
{
/// <summary>
/// This Patch hooks after "can_rape" and changes it to false for pawns that have no sex_need (are a-sexual).
/// This helps with #100, and is more of a non-intrusive improvement over the base game.
/// </summary>
[HarmonyPatch(typeof(xxx), nameof(xxx.can_rape))]
public class Patch_Asexual_CanRape
{
public static bool PostFix(Pawn pawn, ref bool __result)
{
if (pawn != null && pawn.genes != null && pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_no_sex_need))
{
__result = false;
}
return __result;
}
}
}

View file

@ -31,6 +31,12 @@ namespace RJW_Genes.Genes.Special
return;
}
if (props.pawn == props.partner || props.sexType == xxx.rjwSextype.Masturbation || props.sexType == xxx.rjwSextype.None)
{
// This case was reported but is a bit strange, I hardened it after reports in #99
return;
}
Pawn pawn = props.pawn;
Pawn partner = props.partner;

View file

@ -31,7 +31,9 @@ namespace RJW_Genes
Pawn orgasmingPawn = __instance.pawn;
bool hasPollutedMytosis = false;
if (orgasmingPawn != null && (GeneUtility.HasGeneNullCheck(orgasmingPawn, GeneDefOf.rjw_genes_sexual_mytosis) || hasPollutedMytosis) && ! orgasmingPawn.health.hediffSet.HasHediff(HediffDefOf.rjw_genes_mytosis_shock_hediff))
if (orgasmingPawn == null || orgasmingPawn.genes == null) { return; }
if ((GeneUtility.HasGeneNullCheck(orgasmingPawn, GeneDefOf.rjw_genes_sexual_mytosis) || hasPollutedMytosis) && ! orgasmingPawn.health.hediffSet.HasHediff(HediffDefOf.rjw_genes_mytosis_shock_hediff))
{
var mytosisHediff = GetOrgasmMytosisHediff(orgasmingPawn);
mytosisHediff.Severity += SEVERITY_INCREASE_PER_ORGASM;
@ -148,6 +150,8 @@ namespace RJW_Genes
copy.style = CopyStyleTracker(copy, toMultiply.style);
copy.story = CopyStoryTracker(copy, toMultiply.story);
copy.genes.xenotypeName = toMultiply.genes.xenotypeName;
copy.story.favoriteColor = toMultiply.story.favoriteColor;
Find.LetterStack.ReceiveLetter("Orgasmic Mytosis", $"{toMultiply.NameShortColored} performed mytosis on orgasm! The pawn and its clone entered a regenerative state.",
RimWorld.LetterDefOf.NeutralEvent, copy);

View file

@ -30,6 +30,12 @@ namespace RJW_Genes.Genes.Special
return;
}
if (props.pawn == props.partner || props.sexType == xxx.rjwSextype.Masturbation || props.sexType == xxx.rjwSextype.None)
{
// This case was reported but is a bit strange, I hardened it after reports in #99
return;
}
if (GeneUtility.IsYouthFountain(props.pawn))
{
ChangeAgeForPawn(props.partner, props.pawn);

View file

@ -166,6 +166,7 @@
<Compile Include="Genes\Life_Force\UI\GeneGizmo_ResourceLifeForce.cs" />
<Compile Include="Genes\Patches\LustFeeding.cs" />
<Compile Include="Genes\Patches\MultiplePregnancies.cs" />
<Compile Include="Genes\Patches\Patch_Asexual_CanRape.cs" />
<Compile Include="Genes\Patch_AddNotifyOnGeneration.cs" />
<Compile Include="Genes\Quirks\Defs\QirkExtension.cs" />
<Compile Include="Genes\Quirks\QuirkPatcher.cs" />
@ -218,8 +219,7 @@
<Private>False</Private>
</Reference>
<Reference Include="RJWSexperience">
<HintPath>..\..\rjw-sexperience-master\1.5\Assemblies\RJWSexperience.dll</HintPath>
<Private>False</Private>
<HintPath>..\..\rjw-sexperience\1.5\Assemblies\RJWSexperience.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="UnityEngine">