diff --git a/CHANGELOG.md b/CHANGELOG.md
index ab1db00..7f25417 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -96,6 +96,7 @@ but they are meant mostly to have infectors immune against their own diseases.
- Fixed an Issue where pawns would always get the Pheromone social boost, unless they had the pheromone (#113)
- Fixed two hidden dependencies on Ideology and Royalty (#115)
+- Fixed some more hidden dependencies on Ideology Icons (#118)
**Internal:**
@@ -105,6 +106,8 @@ but they are meant mostly to have infectors immune against their own diseases.
**Notes:**
+*One Time Error Load*
+
The changes to the cum-gene will give a 1-time warning on loading the save. The warning looks like this:
```
Could not find class RJW_Genes.Gene_MuchCum while resolving node li. Trying to use Verse.Gene instead. Full node:
rjw_genes_much_cumThing_Human697null82
@@ -115,6 +118,12 @@ Verse.Log:Error (string)
This is not dangerous.
+*Supporting*
+
+You can now support me with [buying me a coffee](https://buymeacoffee.com/vegapnk).
+The mod will remain free, open source and I will not hide or lock any features.
+Its just meant if you want to drop me a tip.
+
# 2.1.0 (27-06-2024)
**Additions**:
diff --git a/Common/Defs/GeneDefs/GeneDefs_Breeding.xml b/Common/Defs/GeneDefs/GeneDefs_Breeding.xml
index 463046f..33a8078 100644
--- a/Common/Defs/GeneDefs/GeneDefs_Breeding.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_Breeding.xml
@@ -42,8 +42,8 @@
rjw_genes_fertile_anus
- Xenotypes with this gene have a functional uterus connected to the anal cavity even
- for males
+ Xenotypes with this gene have a functional uterus if they do not possess one by means of their vagina.
+ For males, it is connected to the anal cavity and leads to a normal pregnancy.Genes/Icons/Fertile_anus54
diff --git a/Common/Defs/GeneDefs/GeneDefs_Damage.xml b/Common/Defs/GeneDefs/GeneDefs_Damage.xml
index d045a68..2e7f941 100644
--- a/Common/Defs/GeneDefs/GeneDefs_Damage.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_Damage.xml
@@ -7,7 +7,7 @@
rjw_genes_damageThis Gene makes the Carrier unable to get mood or social penalties from being raped
and they cannot be broken for a long period of time.
- UI/Icons/Rituals/TrialDefend
+ Genes/Icons/TrialDefend2-11
diff --git a/Common/Defs/GeneDefs/GeneDefs_Diseases.xml b/Common/Defs/GeneDefs/GeneDefs_Diseases.xml
index b9c1a45..167fd0b 100644
--- a/Common/Defs/GeneDefs/GeneDefs_Diseases.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_Diseases.xml
@@ -23,7 +23,7 @@
imply negative side-effects.
1-1
- UI/Icons/Rituals/TrialDefend
+ Genes/Icons/TrialDefend
+
+
+
+
+
\ No newline at end of file
diff --git a/Common/Defs/HediffDefs/Hediffs_InfectiveGenderChanges.xml b/Common/Defs/HediffDefs/Hediffs_InfectiveGenderChanges.xml
new file mode 100644
index 0000000..3dce4c0
--- /dev/null
+++ b/Common/Defs/HediffDefs/Hediffs_InfectiveGenderChanges.xml
@@ -0,0 +1,147 @@
+
+
+
+
+ rjw_genes_feminization_progress
+ HediffWithComps
+
+ Something is changing this pawn - there is a chance to develop female features
+ upon sex.
+ false
+ 1.0
+ false
+ false
+
+
+ -0.01
+
+
+
+
+
+
+ false
+
+
+
+
+ 0.6
+ true
+
+
+ Consciousness
+ -0.5
+
+
+
+ 0.25
+
+
+
+
+
+ 0.8
+
+
+ Consciousness
+ -0.05
+
+
+ true
+
+ 0.5
+ 0.25
+
+
+
+
+
+ 0.9
+
+
+ Consciousness
+ -0.1
+
+
+ true
+
+ 1.0
+ 0.5
+
+
+
+
+
+
+
+ rjw_genes_twinkification_progress
+ HediffWithComps
+
+ Something is changing this pawn - there is a chance to turn into a cute,
+ breedable twink upon sex.
+ false
+ 1.0
+ false
+ false
+
+
+ -0.01
+
+
+
+
+
+
+ false
+
+
+
+
+ 0.6
+ true
+
+
+ Consciousness
+ -0.5
+
+
+
+ 0.25
+
+
+
+
+
+ 0.8
+
+
+ Consciousness
+ -0.05
+
+
+ true
+
+ 0.5
+ 0.25
+
+
+
+
+
+ 0.9
+
+
+ Consciousness
+ -0.1
+
+
+ true
+
+ 1.5
+ 0.5
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Common/Defs/TipSetDefs/Tips.xml b/Common/Defs/TipSetDefs/Tips.xml
index 7147147..bc7aca3 100644
--- a/Common/Defs/TipSetDefs/Tips.xml
+++ b/Common/Defs/TipSetDefs/Tips.xml
@@ -23,6 +23,8 @@
The Settings for Animal-Gene Inheritance are distributed between RJW-Pregnancy-Settings and their own Mod-Options.
+
Children born by pawns with the `Fertile Anus` gene might be bullied at school, but they can still live a fulfilling and happy life.
+
diff --git a/Common/Textures/Genes/Icons/FireLeaves.png b/Common/Textures/Genes/Icons/FireLeaves.png
new file mode 100644
index 0000000..4f1b247
Binary files /dev/null and b/Common/Textures/Genes/Icons/FireLeaves.png differ
diff --git a/Common/Textures/Genes/Icons/FleshPurity.png b/Common/Textures/Genes/Icons/FleshPurity.png
new file mode 100644
index 0000000..0843812
Binary files /dev/null and b/Common/Textures/Genes/Icons/FleshPurity.png differ
diff --git a/Common/Textures/Genes/Icons/RoundC.png b/Common/Textures/Genes/Icons/RoundC.png
new file mode 100644
index 0000000..e2288f5
Binary files /dev/null and b/Common/Textures/Genes/Icons/RoundC.png differ
diff --git a/Common/Textures/Genes/Icons/TrialDefend.png b/Common/Textures/Genes/Icons/TrialDefend.png
new file mode 100644
index 0000000..1275bf2
Binary files /dev/null and b/Common/Textures/Genes/Icons/TrialDefend.png differ
diff --git a/README.md b/README.md
index a09fef6..b9e5d14 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,8 @@
# RJW-Genes [NSFW]
+[](https://buymeacoffee.com/vegapnk)
+[](https://opensource.org/licenses/MIT)
+
This mod adds genes related and based on RJW to Rimworld.
## Current Features
diff --git a/Source/Common/Defs/HediffIncreaseOnSexExtension.cs b/Source/Common/Defs/HediffIncreaseOnSexExtension.cs
new file mode 100644
index 0000000..c5f648f
--- /dev/null
+++ b/Source/Common/Defs/HediffIncreaseOnSexExtension.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+
+namespace RJW_Genes
+{
+ public class HediffIncreaseOnSexExtension: DefModExtension
+ {
+ public HediffDef hediffDef;
+ public float severityIncrease;
+ public float applicationChance;
+
+ public bool canCreateHediff;
+
+ public bool applicableForWomen;
+ public bool applicableForMen;
+ public bool requiresPenetrativeSex;
+ }
+
+}
diff --git a/Source/Common/patches/Patch_HediffIncreaseOnSex.cs b/Source/Common/patches/Patch_HediffIncreaseOnSex.cs
new file mode 100644
index 0000000..55e85a3
--- /dev/null
+++ b/Source/Common/patches/Patch_HediffIncreaseOnSex.cs
@@ -0,0 +1,80 @@
+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
+{
+
+ ///
+ /// This patch "only" applies the hediff increase on sex.
+ /// It checks for the hediff, creates it if necessary and applicable,
+ /// and increases it based on the severity, chance and genders specified in the Extension.
+ ///
+ /// Some hediffs want follow up logic, e.g. the Feminization Gene,
+ /// which is handled in an extra patch (that requires the hediff to be present already).
+ ///
+ [HarmonyPatch(typeof(SexUtility), "Aftersex")]
+ public class Patch_HediffIncreaseOnSex
+ {
+
+ public static void Postfix(SexProps props)
+ {
+ if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal() || props.pawn.IsAnimal())
+ {
+ return;
+ }
+
+ Pawn pawn = props.pawn;
+ Pawn partner = props.partner;
+
+ if (pawn.genes == null || partner.genes == null) return;
+
+ TryApplyHediffsOfSex(pawn, partner, props);
+ TryApplyHediffsOfSex(partner, pawn, props);
+ }
+
+ ///
+ /// Checks for every gene in a pawn if it applies a hediff or the severity of an existing hediff in a sexual partner.
+ /// If the checks pass, the hediff is added or changed accordingly.
+ ///
+ /// Pawn that holds (one or many) genes that might apply a hediff change
+ /// Pawn that will receive or alter any hediffs, if applicable
+ /// The Sexprops, used for checking if sex is penetrative
+ static void TryApplyHediffsOfSex(Pawn pawn, Pawn partner, SexProps props)
+ {
+ var random = new Random();
+
+ foreach (Gene gene in pawn.genes.GenesListForReading)
+ {
+ HediffIncreaseOnSexExtension ext = gene.def.GetModExtension();
+ if (ext == null) continue;
+
+ if (DiseaseHelper.IsImmuneAgainstGeneticDisease(partner, gene.def)) continue;
+ if (ext.requiresPenetrativeSex && DiseaseHelper.IsPenetrativeSex(props)) continue;
+ if (!ext.applicableForMen && partner.gender == Gender.Male) continue;
+ if (!ext.applicableForWomen && partner.gender == Gender.Female) continue;
+ if (random.NextDouble() >= ext.applicationChance) continue;
+
+ Hediff hediff = partner.health.hediffSet.GetFirstHediffOfDef(ext.hediffDef);
+ if (hediff == null)
+ {
+ if (!ext.canCreateHediff) continue;
+ hediff = partner.health.GetOrAddHediff(ext.hediffDef);
+ hediff.Severity = 0.01f;
+ ModLog.Debug($"{partner} got hediff {hediff.def.defName} from Patch_HediffIncreaseOnSex ({gene.def.defName}) upon sex with {pawn}");
+ }
+ float initial_severity = hediff.Severity;
+ ModLog.Debug($"{partner}s hediff {hediff.def.defName} was changed by Patch_HediffIncreaseOnSex ({gene.def.defName}) upon sex with {pawn} [from {initial_severity} to {initial_severity + ext.severityIncrease}]");
+ hediff.Severity += ext.severityIncrease;
+
+ // DevNote: I also want to have "negative" hediff changes here, but I think its not necessary. Once the severity reaches 0, or below, the hediff should remove itself.
+ }
+ }
+
+ }
+}
diff --git a/Source/GeneDefOf.cs b/Source/GeneDefOf.cs
index f4a2d08..64b84f6 100644
--- a/Source/GeneDefOf.cs
+++ b/Source/GeneDefOf.cs
@@ -108,6 +108,8 @@ namespace RJW_Genes
public static readonly GeneDef rjw_genes_sexual_genetic_swap;
public static readonly GeneDef rjw_genes_sexual_genetic_thief;
public static readonly GeneDef rjw_genes_pregnancy_overwrite;
+ public static readonly GeneDef rjw_genes_feminizer;
+ public static readonly GeneDef rjw_genes_twinkifier;
// Cosmetic
public static readonly GeneDef rjw_genes_succubus_tail;
@@ -131,6 +133,12 @@ namespace RJW_Genes
public static readonly GeneDef rjw_genes_major_vulnerability;
public static readonly GeneDef rjw_genes_fluctual_sexual_needs;
public static readonly GeneDef rjw_genes_size_blinded;
+ public static readonly GeneDef rjw_genes_infectious_low_fertility;
+ public static readonly GeneDef rjw_genes_infectious_increased_sex_need;
+ public static readonly GeneDef rjw_genes_infectious_bisexuality;
+ public static readonly GeneDef rjw_genes_infectious_homosexuality;
+ public static readonly GeneDef rjw_genes_infectious_hypersexuality;
+ public static readonly GeneDef rjw_genes_stretcher;
//Other Defs
public static readonly XenotypeDef rjw_genes_succubus;
diff --git a/Source/Genes/Special/Patches/Patch_Twinkifier.cs b/Source/Genes/Special/Patches/Patch_Twinkifier.cs
new file mode 100644
index 0000000..53c9d46
--- /dev/null
+++ b/Source/Genes/Special/Patches/Patch_Twinkifier.cs
@@ -0,0 +1,78 @@
+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
+{
+ ///
+ /// This patch handles the changes produced by `rjw_genes_twinkifier`.
+ /// It requires the hediff `rjw_genes_twinkification_in_progress` which is managed separately, in `Patch_HediffIncreaseOnSex`.
+ ///
+ [HarmonyPatch(typeof(SexUtility), "Aftersex")]
+ public static class Patch_Twinkifier
+ {
+ const float MINOR_APPLICATION_CHANCE = 0.25f; // = 25% to have a minor transformation
+ const float MAJOR_APPLICATION_CHANCE = 0.10f; // = 10% to have a major transformation
+
+ public static void Postfix(SexProps props)
+ {
+ if (props == null || props.pawn == null || !props.hasPartner() || props.partner == null)
+ return;
+ if (props.pawn.IsAnimal() || props.partner.IsAnimal())
+ return;
+
+ ApplyTwinkification(props.pawn);
+ ApplyTwinkification(props.partner);
+ }
+
+ private static void ApplyTwinkification(Pawn pawn)
+ {
+ if (pawn == null) return;
+ Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_twinkification_progress);
+ if (hediff == null) return;
+
+ var Random = new Random();
+ switch (hediff.SeverityLabel)
+ {
+ case "severe":
+ case "critical":
+ {
+ if (Random.NextDouble() < MAJOR_APPLICATION_CHANCE)
+ majorChange(pawn);
+ } break;
+ case "minor":
+ {
+ if (Random.NextDouble() < MINOR_APPLICATION_CHANCE)
+ minorChange(pawn);
+ } break;
+ }
+
+ }
+
+ private static void minorChange(Pawn pawn)
+ {
+ // Minor Infectious Vulnerability
+ // Smaller Genitalia
+ // Remove Beard
+ // Thin Body Type
+ }
+
+ private static void majorChange(Pawn pawn)
+ {
+ // Final Gene-Pool should have:
+ // - Fragile (?)
+ // - Infectious Vulnerability
+ // - Infectious Homosexuality
+ // - Beauty
+ // - Fertile Anus
+
+ pawn.genes.AddGene(GeneDefOf.rjw_genes_fertile_anus, !RJW_Genes_Settings.rjw_genes_genetic_disease_as_endogenes);
+ pawn.genes.AddGene(GeneDefOf.rjw_genes_infectious_homosexuality, !RJW_Genes_Settings.rjw_genes_genetic_disease_as_endogenes);
+ }
+ }
+}
diff --git a/Source/HediffDefOf.cs b/Source/HediffDefOf.cs
index d957096..4214041 100644
--- a/Source/HediffDefOf.cs
+++ b/Source/HediffDefOf.cs
@@ -20,6 +20,10 @@ namespace RJW_Genes
public static readonly HediffDef rjw_genes_orgasmic_mytosis_hediff;
public static readonly HediffDef rjw_genes_mytosis_shock_hediff;
+ public static readonly HediffDef rjw_genes_twinkification_progress;
+ public static readonly HediffDef rjw_genes_feminization_progress;
+
+ // Note: Counter does meant it counters it, not it's counting
[MayRequire("LustLicentia.RJWLabs")] public static readonly HediffDef rjw_genes_cumstuffed_counter;
[MayRequire("LustLicentia.RJWLabs")] public static readonly HediffDef rjw_genes_cumflation_counter;
diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj
index dabb692..8300996 100644
--- a/Source/Rjw-Genes.csproj
+++ b/Source/Rjw-Genes.csproj
@@ -58,6 +58,7 @@
+
@@ -68,6 +69,7 @@
+
@@ -195,6 +197,7 @@
+