diff --git a/CHANGELOG.md b/CHANGELOG.md
index df15b6f..3852765 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -13,6 +13,7 @@
- "Genes" to support VRE Androids having Mechanical Genitalia. Thanks to @Jaaldabaoth (#88)
- "Curiosity Genes" alongside other Curiosities from VRE. Thanks to @Jaaldabaoth (#88)
- Support for many VE-Genetics Animals into the Animal-Framework. Thanks to @Jaaldabaoth (#88)
+- "Likes Cumflation"-Gene now also makes pawns immune against the effects of cumflations. They are still cumflated.
**Fixes**:
@@ -20,6 +21,8 @@
- Lower-casing most labels to fit rimworld standards, thanks to @Flock-of-birds (#83)
- X-Gender-Only Genes leave / re-add artificial genitalia. Thanks to @Jaaldabaoth (#84 / #88)
- 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)
**Changes**:
@@ -27,6 +30,10 @@
- Minified some Race-Patches, thanks to @Flock-of-birds (#83)
- XML-Genitalia-Genes can now also provide Breasts. Thanks to @Jaaldabaoth (#84 / #88)
- Many patches and files went into a `Mods`Folder and use an `LoadFolders.xml`. Thanks to @Jaaldabaoth (#84 / #88)
+- Translate-Keys for Settings
+- 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
# 2.0.0
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index b596a24..103a4f5 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -28,4 +28,6 @@ But please consider also the following:
- Placeholder, Rapist, Necrophile come from [RJW-Sexperience Ideology](https://gitgud.io/amevarashi/rjw-sexperience-ideology/)
- Hypersexual & Zoophile comes from [RJW](https://gitgud.io/Ed86/rjw)
- Cockeater & Naked Prowess come from *WasMachenDennSachen* but I copied it from Discord Chat.
-- Fertilin, Fertilin Drain, Healpussy, Succubus Wing & Tail come from Shabakur
\ No newline at end of file
+- 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
\ No newline at end of file
diff --git a/Common/Assemblies/Rjw-Genes.dll b/Common/Assemblies/Rjw-Genes.dll
index 214b962..30fbc3b 100644
Binary files a/Common/Assemblies/Rjw-Genes.dll and b/Common/Assemblies/Rjw-Genes.dll differ
diff --git a/Common/Defs/AbilityDefs/Ability_MatingCall.xml b/Common/Defs/AbilityDefs/Ability_MatingCall.xml
index 98cb5c7..a45fb1d 100644
--- a/Common/Defs/AbilityDefs/Ability_MatingCall.xml
+++ b/Common/Defs/AbilityDefs/Ability_MatingCall.xml
@@ -5,8 +5,8 @@
rjw_genes_ability_mating_callCalls nearby animals to breed me.
- UI/Abilities/AnimalBerserkPulse
-
+ Genes/Icons/Animal_Mating_Call
+
truefalse
diff --git a/Common/Defs/AbilityDefs/Ability_PheromoneSpit.xml b/Common/Defs/AbilityDefs/Ability_PheromoneSpit.xml
index 584e0a8..1305665 100644
--- a/Common/Defs/AbilityDefs/Ability_PheromoneSpit.xml
+++ b/Common/Defs/AbilityDefs/Ability_PheromoneSpit.xml
@@ -4,7 +4,8 @@
rjw_genes_ability_pheromone_spitSpit 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.
- UI/Abilities/PiercingSpine
+ Genes/Icons/Pheromone_Spit
+
3000201true
diff --git a/Common/Defs/GeneDefs/GeneDefs_Breeding.xml b/Common/Defs/GeneDefs/GeneDefs_Breeding.xml
index 76d4369..200af57 100644
--- a/Common/Defs/GeneDefs/GeneDefs_Breeding.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_Breeding.xml
@@ -82,7 +82,7 @@
rjw_genes_mating_callThis gene allows to call nearby animals and invite them for mating.
- UI/Abilities/AnimalBerserkPulse
+ Genes/Icons/Animal_Mating_Call65
rjw_genes_ability_mating_call
@@ -99,7 +99,7 @@
rjw_genes_pheromone_spitThis gene allows to mark targets for breeding, enticing nearby animals for a ride.
- UI/Abilities/AnimalBerserkPulse
+ Genes/Icons/Pheromone_Spit66
rjw_genes_ability_pheromone_spit
diff --git a/Common/Defs/GeneDefs/GeneDefs_ExtraGenitalia.xml b/Common/Defs/GeneDefs/GeneDefs_ExtraGenitalia.xml
index a9e9a46..6d4a732 100644
--- a/Common/Defs/GeneDefs/GeneDefs_ExtraGenitalia.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_ExtraGenitalia.xml
@@ -164,7 +164,7 @@
rjw_genes_genitalia_extrasCarriers of this gene have udders and breasts.
- Things/Mote/Heart
+ Genes/Icons/RJW_Genes_UdderRJW_Genes.Gene_UdderBreasts711
diff --git a/Common/Defs/GeneDefs/GeneDefs_GenitaliaTypes.xml b/Common/Defs/GeneDefs/GeneDefs_GenitaliaTypes.xml
index 5cc2e9d..2b6e5d6 100644
--- a/Common/Defs/GeneDefs/GeneDefs_GenitaliaTypes.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_GenitaliaTypes.xml
@@ -68,7 +68,7 @@
rjw_genes_feline_genitaliaCarriers of this gene develop feline genitalia.
- Genes/Icons/Genitalia_Feline
+ Genes/Icons/RJW_Genes_Feline_Genitalia
CatPenis
diff --git a/Common/Defs/GeneDefs/GeneDefs_SexSpecial.xml b/Common/Defs/GeneDefs/GeneDefs_SexSpecial.xml
index a4ecb4d..4e85dc7 100644
--- a/Common/Defs/GeneDefs/GeneDefs_SexSpecial.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_SexSpecial.xml
@@ -137,7 +137,7 @@
sextamerBestiality has a chance to tame animals or advance their training.
- UI/Abilities/AnimalBerserkPulse
+ Genes/Icons/Sexual_Tamer142-1
diff --git a/Common/Defs/HediffDefs/Hediffs_CounterCumflation.xml b/Common/Defs/HediffDefs/Hediffs_CounterCumflation.xml
new file mode 100644
index 0000000..1b30c82
--- /dev/null
+++ b/Common/Defs/HediffDefs/Hediffs_CounterCumflation.xml
@@ -0,0 +1,181 @@
+
+
+
+ rjw_genes_cumflation_counter
+ HediffWithComps
+
+ cumflation negator
+ Negates the negative effects usually produced by being cumflated.
+ (240,200,110)
+ false
+ 1.0
+ false
+ false
+
+
+ -0.75
+
+
+
+
+
+ false
+
+
+
+ 0.2
+ false
+
+ -0.1
+
+
+
+ Moving
+ 0.1
+
+
+
+
+
+ 0.4
+ false
+
+ -0.3
+
+
+
+ Moving
+ 0.3
+
+
+ -0.1
+
+
+
+ 0.65
+ false
+
+ +0.5
+
+
+
+ Moving
+ 0.6
+
+
+ -0.3
+
+
+
+ 0.9
+ false
+
+ -0.7
+
+
+
+ Moving
+ 1.0
+
+
+ -0.5
+
+
+
+
+
+ rjw_genes_cumstuffed_counter
+ HediffWithComps
+
+ cumstuffed negated
+ Negates the negative effects that one would suffer from being cumstuffed.
+ (240,200,110)
+ false
+ 1.0
+ false
+ false
+
+
+ -0.75
+
+
+
+
0
+
0
+
0.75
+
0.5
+
0.2
+
+
+
+
+
+
+ false
+
+
+
+ 0.2
+ 0.95
+ false
+
+ -0.05
+
+
+
+ Moving
+ 0.03
+
+
+
+
+
+ 0.4
+ 0.9
+
+ -0.1
+
+ false
+
+
+ Moving
+ 0.1
+
+
+
+
+
+ 0.6
+ 0.75
+ false
+
+ -0.15
+
+
+
+ Moving
+ 0.2
+
+
+ -0.15
+
+
+
+ 0.8
+ 0.5
+ false
+
+ -0.2
+
+
+
+ Moving
+ 0.3
+
+
+ -0.3
+
+
+
+
+
diff --git a/Common/Languages/English/Keyed/Bestiality.xml b/Common/Languages/English/Keyed/Bestiality.xml
new file mode 100644
index 0000000..e6edf59
--- /dev/null
+++ b/Common/Languages/English/Keyed/Bestiality.xml
@@ -0,0 +1,4 @@
+
+
+ animal-hybrid
+
diff --git a/Common/Languages/English/Keyed/Mod_Settings.xml b/Common/Languages/English/Keyed/Mod_Settings.xml
new file mode 100644
index 0000000..d425cd5
--- /dev/null
+++ b/Common/Languages/English/Keyed/Mod_Settings.xml
@@ -0,0 +1,33 @@
+
+
+ Genitalia resizing age:
+ years
+ At this age (in biological years) any resizing gene will be applied. This is done to prevent changes and issues related to genitalia changing in the pawns growth, but also for 'ethics'.
+
+ Fertilin-Gain from Animals:
+ % of fertilin gained (compared to human-baseline).
+
+ Sexdemon Visits
+ If enabled, incubi and succubi can spawn in through an event.
+ Size matters
+ Incubi and succubi will consider size/tightness of partners genital for deciding if they want to join
+ Sexdemon groups
+ Multiple sexdemons can spawn during a event
+ Succubi
+ Allow Succubi to spawn through this event
+ Incubi
+ Allow Incubi to spawn through this event
+
+ Regret Stealing Love
+ If off, pawns will not get bad thoughts for seduction.
+
+
+ Animal-Mating GenitalCheck
+ If on, only animals that 'can rape' will be engaging in bestiality after being hit by a animal mating pulse. This usually means that only male animals will start breeding.
+
+ generous-donor cheatmode
+ When enabled, pawns with the 'generous donor' are not drained and not fertilin exhausted. Hence they can fuel succubi and incubi non-stop. This makes them drastically easier to keep, and you should not do it.
+
+ detailed-debug
+ Adds detailed information to the log about interactions and genes.
+
diff --git a/Common/Languages/English/Keyed/Mod_Settings_AnimalGeneInheritance.xml b/Common/Languages/English/Keyed/Mod_Settings_AnimalGeneInheritance.xml
new file mode 100644
index 0000000..bb7012d
--- /dev/null
+++ b/Common/Languages/English/Keyed/Mod_Settings_AnimalGeneInheritance.xml
@@ -0,0 +1,18 @@
+
+
+
+ enabled
+ If toggled, Animal Pregnancies will try inherit genes.
+
+
+
+
+ genes as xenogenes
+ If toggled on, animal genes will be added as xenogenes.
+
+ enable VE genetics hybridation
+ If enabled and if you have VE genetics it will enable the hybridation system.
+
+
+
+
diff --git a/Common/Textures/Genes/Icons/Animal_Mating_Call.png b/Common/Textures/Genes/Icons/Animal_Mating_Call.png
new file mode 100644
index 0000000..c8ff964
Binary files /dev/null and b/Common/Textures/Genes/Icons/Animal_Mating_Call.png differ
diff --git a/Common/Textures/Genes/Icons/Pheromone_Spit.png b/Common/Textures/Genes/Icons/Pheromone_Spit.png
new file mode 100644
index 0000000..743d0a3
Binary files /dev/null and b/Common/Textures/Genes/Icons/Pheromone_Spit.png differ
diff --git a/Common/Textures/Genes/Icons/RJW_Genes_Feline_Genitalia.png b/Common/Textures/Genes/Icons/RJW_Genes_Feline_Genitalia.png
new file mode 100644
index 0000000..7b0dc9f
Binary files /dev/null and b/Common/Textures/Genes/Icons/RJW_Genes_Feline_Genitalia.png differ
diff --git a/Common/Textures/Genes/Icons/RJW_Genes_Mating_Call.png b/Common/Textures/Genes/Icons/RJW_Genes_Mating_Call.png
new file mode 100644
index 0000000..1079d89
Binary files /dev/null and b/Common/Textures/Genes/Icons/RJW_Genes_Mating_Call.png differ
diff --git a/Common/Textures/Genes/Icons/RJW_Genes_Udder.png b/Common/Textures/Genes/Icons/RJW_Genes_Udder.png
new file mode 100644
index 0000000..9a641e1
Binary files /dev/null and b/Common/Textures/Genes/Icons/RJW_Genes_Udder.png differ
diff --git a/Common/Textures/Genes/Icons/Sexual_Tamer.png b/Common/Textures/Genes/Icons/Sexual_Tamer.png
new file mode 100644
index 0000000..ce35369
Binary files /dev/null and b/Common/Textures/Genes/Icons/Sexual_Tamer.png differ
diff --git a/README.md b/README.md
index 9ea66bc..697bcdc 100644
--- a/README.md
+++ b/README.md
@@ -14,6 +14,8 @@ This mod adds genes related and based on RJW to Rimworld.
- Human-Animal Gene Inheritance merged from [Shabakur](https://github.com/Shabakur/RJW_Animal_Gene_Inheritance)
- Patches for some popular / common Xenotypes from other Mods.
+*You might not see all of them. Many genes just show up if other mods are loaded*.
+
**Conflicts:**
1. Should not be used with the original RJW_Animal_Gene_Inheritance anymore.
2. There was an issue with other "Male-Only / Female-Only" Mods --- for which we provide our own Genes now.
diff --git a/Source/Animal_Inheritance/Patches/Patch_RJW_BestialityPregnancyUtility.cs b/Source/Animal_Inheritance/Patches/Patch_RJW_BestialityPregnancyUtility.cs
index c5f6366..d8440e8 100644
--- a/Source/Animal_Inheritance/Patches/Patch_RJW_BestialityPregnancyUtility.cs
+++ b/Source/Animal_Inheritance/Patches/Patch_RJW_BestialityPregnancyUtility.cs
@@ -7,6 +7,7 @@ using HarmonyLib;
using RimWorld;
using Verse;
using rjw;
+using static RimWorld.PsychicRitualRoleDef;
namespace RJW_BGS
{
@@ -43,7 +44,9 @@ namespace RJW_BGS
// The mix-breed babies should be labelled hybrids
baby.genes.hybrid = true;
- baby.genes.xenotypeName = "Hybrid";
+
+ //reason = "AbilityDisabledNoFertilinGene".Translate(this.parent.pawn);
+ baby.genes.xenotypeName = "rjw_genes_bestiality_hybrid".Translate();
}
}
}
diff --git a/Source/Animal_Inheritance/Settings/RJW_BGSSettings.cs b/Source/Animal_Inheritance/Settings/RJW_BGSSettings.cs
index d853424..854df07 100644
--- a/Source/Animal_Inheritance/Settings/RJW_BGSSettings.cs
+++ b/Source/Animal_Inheritance/Settings/RJW_BGSSettings.cs
@@ -21,18 +21,18 @@ namespace RJW_BGS
listing_Standard.ColumnWidth = rect.width / 2.05f;
listing_Standard.Begin(rect);
listing_Standard.Gap(24f);
- listing_Standard.CheckboxLabeled("enabled", ref rjw_bgs_enabled, "If toggled, Animal Pregnancies will try inherit genes.", 0f, 1f);
+ listing_Standard.CheckboxLabeled("rjw_genes_animal_inheritance_settings_enabled_key".Translate(), ref rjw_bgs_enabled, "rjw_genes_animal_inheritance_settings_enabled_explanation".Translate(), 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.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.CheckboxLabeled("rjw_genes_animal_inheritance_settings_added_as_xenogene_key".Translate(), ref rjw_bgs_animal_genes_as_xenogenes, "rjw_genes_animal_inheritance_settings_added_as_xenogene_explanation".Translate(), 0f, 1f);
listing_Standard.Gap(5f);
- listing_Standard.CheckboxLabeled("enable VE genetics hybridation", ref rjw_bgs_VE_genetics, "If enabled and if you have VE genetics it will enable the hybridation system.", 0f, 1f);
+ listing_Standard.CheckboxLabeled("rjw_genes_animal_inheritance_settings_ve_genetics_hybridization_key".Translate(), ref rjw_bgs_VE_genetics, "rjw_genes_animal_inheritance_settings_ve_genetics_hybridization_explanation".Translate(), 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.CheckboxLabeled("rjw_genes_animal_inheritance_settings_detailed_debug_key".Translate(), ref rjw_bgs_detailed_debug, "rjw_genes_animal_inheritance_settings_detailed_debug_explanation".Translate(), 0f, 1f);
listing_Standard.End();
}
diff --git a/Source/Genes/Breeding/AnimalBreedingHelper.cs b/Source/Genes/Breeding/AnimalBreedingHelper.cs
index f2386e9..c44a4c3 100644
--- a/Source/Genes/Breeding/AnimalBreedingHelper.cs
+++ b/Source/Genes/Breeding/AnimalBreedingHelper.cs
@@ -29,8 +29,13 @@ namespace RJW_Genes
{
if (ends_manhunter)
EndManHunter(animal);
- ForceBreedingJob(toBeBred, animal);
- breeder_counter++;
+
+ if (!RJW_Genes_Settings.animalMatingPulseCheckForGenitals || rjw.xxx.can_rape(animal))
+ {
+ ForceBreedingJob(toBeBred, animal);
+ breeder_counter++;
+ }
+
}
ModLog.Message($"{breeder_counter} of {animals.Count()} Animals in range are trying to breed {toBeBred}");
}
diff --git a/Source/Genes/Cum/Patch_Cumflation.cs b/Source/Genes/Cum/Patch_CumflationImmunity.cs
similarity index 97%
rename from Source/Genes/Cum/Patch_Cumflation.cs
rename to Source/Genes/Cum/Patch_CumflationImmunity.cs
index a1f54a7..49f8e73 100644
--- a/Source/Genes/Cum/Patch_Cumflation.cs
+++ b/Source/Genes/Cum/Patch_CumflationImmunity.cs
@@ -18,7 +18,7 @@ namespace RJW_Genes
/// Patched File: https://gitgud.io/John-the-Anabaptist/licentia-labs/-/blob/master/Source/LicentiaLabs/LicentiaLabs/Cumflation.cs
///
///
- class Patch_Cumflation
+ class Patch_CumflationImmunity
{
// This patch does not need the normal Harmony Targetting,
// as it needs to be added only on demand (See HarmonyInit.cs)
diff --git a/Source/Genes/Cum/Patch_LikesCumflation.cs b/Source/Genes/Cum/Patch_LikesCumflation.cs
new file mode 100644
index 0000000..f25f28c
--- /dev/null
+++ b/Source/Genes/Cum/Patch_LikesCumflation.cs
@@ -0,0 +1,76 @@
+using System;
+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_Genes
+{
+ ///
+ /// Changes LicentiaLabs (if Present) to add a cumflation-counter hediff, when the pawn is cumflated.
+ /// The counter hediff takes away the negative stats of the original hediff.
+ /// This code is exercised / loaded in the HarmonyInit.
+ /// Patched File: https://gitgud.io/John-the-Anabaptist/licentia-labs/-/blob/master/Source/LicentiaLabs/LicentiaLabs/Cumflation.cs
+ ///
+ ///
+ class Patch_LikesCumflation
+ {
+ // This patch does not need the normal Harmony Targetting,
+ // as it needs to be added only on demand (See HarmonyInit.cs)
+ public static void PostFix(SexProps props)
+ {
+
+ if (props == null || props.pawn == null || props.partner == null) return;
+
+ if (props.pawn.genes != null && props.pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_likes_cumflation) )
+ {
+ AddOrIncreaseCumflationCounterHediff(props.pawn);
+ }
+
+ if (props.partner.genes != null && props.partner.genes.HasActiveGene(GeneDefOf.rjw_genes_likes_cumflation))
+ {
+ AddOrIncreaseCumflationCounterHediff(props.partner);
+ }
+ }
+
+ public static void AddOrIncreaseCumflationCounterHediff(Pawn inflated)
+ {
+ Hediff cumstuffed_hediff = inflated.health.hediffSet.GetFirstHediffOfDef(LicentiaLabs.Licentia.HediffDefs.Cumstuffed);
+ //Hediff cumstuffed_hediff = LicentiaLabs.CumflationHelper.GetCumflationHediff(inflated, LicentiaLabs.Licentia.HediffDefs.Cumstuffed, "stomach");
+ if (cumstuffed_hediff != null && cumstuffed_hediff.Severity >= 0.01) {
+ ModLog.Message($"{inflated} got cumstuffed and gets the counter-part");
+ var bodyPartRecord = inflated.RaceProps.body.AllParts.Find(bpr => bpr.def.defName.Contains("stomach") || bpr.def.defName.Contains("stomach".ToLower()));
+ var counter_hediff = CreateOrGetCumflationCounterHediff(inflated, HediffDefOf.rjw_genes_cumstuffed_counter, bodyPartRecord);
+ counter_hediff.Severity = cumstuffed_hediff.Severity;
+ }
+
+ Hediff cumflation_hediff = inflated.health.hediffSet.GetFirstHediffOfDef(LicentiaLabs.Licentia.HediffDefs.Cumflation);
+ if (cumflation_hediff != null && cumflation_hediff.Severity >= 0.01)
+ {
+ ModLog.Message($"{inflated} got cumflated and gets the counter-part");
+ var bodyPartRecord = Genital_Helper.get_genitalsBPR(inflated);
+ var counter_hediff = CreateOrGetCumflationCounterHediff(inflated, HediffDefOf.rjw_genes_cumflation_counter, bodyPartRecord);
+ counter_hediff.Severity = cumflation_hediff.Severity;
+ }
+ }
+
+ public static Hediff CreateOrGetCumflationCounterHediff(Pawn inflated, HediffDef counterCumflationDef, BodyPartRecord bodyPartRecord)
+ {
+ Hediff cumflationHediff = inflated.health.hediffSet.GetFirstHediffOfDef(counterCumflationDef);
+ if (cumflationHediff == null)
+ {
+ cumflationHediff = HediffMaker.MakeHediff(counterCumflationDef, inflated, bodyPartRecord);
+ cumflationHediff.Severity = 0;
+ inflated.health.AddHediff(cumflationHediff, bodyPartRecord);
+ }
+ return cumflationHediff;
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Genes/GenitaliaSize/Gene_EvergrowingGenitalia.cs b/Source/Genes/GenitaliaSize/Gene_EvergrowingGenitalia.cs
index 552ac20..493eadf 100644
--- a/Source/Genes/GenitaliaSize/Gene_EvergrowingGenitalia.cs
+++ b/Source/Genes/GenitaliaSize/Gene_EvergrowingGenitalia.cs
@@ -9,12 +9,13 @@ namespace RJW_Genes
public class Gene_EvergrowingGenitalia : RJW_Gene
{
+ const int BASE_TICKS = 60000;
public override void Tick()
{
base.Tick();
- int interval = ModExtensionHelper.GetTickIntervalFromModExtension(GeneDefOf.rjw_genes_evergrowth, RJW_Genes_Settings.rjw_genes_evergrowth_ticks);
+ int interval = ModExtensionHelper.GetTickIntervalFromModExtension(GeneDefOf.rjw_genes_evergrowth, ModExtensionHelper.GetTickIntervalFromModExtension(this.def, BASE_TICKS));
if (pawn.IsHashIntervalTick(interval)
&& this.pawn.Map != null
&& pawn.ageTracker.AgeBiologicalYears >= RJW_Genes_Settings.rjw_genes_resizing_age)
diff --git a/Source/Genes/Special/Patches/Patch_SexualTamer.cs b/Source/Genes/Special/Patches/Patch_SexualTamer.cs
index 15215af..6e3c5e1 100644
--- a/Source/Genes/Special/Patches/Patch_SexualTamer.cs
+++ b/Source/Genes/Special/Patches/Patch_SexualTamer.cs
@@ -45,7 +45,9 @@ namespace RJW_Genes
{
if (RJW_Genes_Settings.rjw_genes_detailed_debug)
ModLog.Message($"{human} is a sextamer with bestiality on colony animal {animal} - trying to train");
+ if (animal.training == null) return;
var trainable = animal.training.NextTrainableToTrain();
+ if (trainable == null) return;
animal.training.Train(trainable, human);
}
}
diff --git a/Source/HarmonyInit.cs b/Source/HarmonyInit.cs
index f4396b9..e6c1688 100644
--- a/Source/HarmonyInit.cs
+++ b/Source/HarmonyInit.cs
@@ -57,13 +57,16 @@ namespace RJW_Genes
{
// Gene: Cumflation Immunity [Prefix Patch]
harmony.Patch(AccessTools.Method(typeof(LicentiaLabs.CumflationHelper), nameof(LicentiaLabs.CumflationHelper.Cumflation)),
- prefix: new HarmonyMethod(typeof(Patch_Cumflation), nameof(Patch_Cumflation.Prefix)));
+ prefix: new HarmonyMethod(typeof(Patch_CumflationImmunity), nameof(Patch_CumflationImmunity.Prefix)));
// Gene: Generous Donor [Postfix Patch]
harmony.Patch(AccessTools.Method(typeof(LicentiaLabs.CumflationHelper), nameof(LicentiaLabs.CumflationHelper.TransferNutrition)),
postfix: new HarmonyMethod(typeof(Patch_TransferNutrition), nameof(Patch_TransferNutrition.Postfix)));
// Gene: CumEater [Postfix Patch] -- This is not exactly licentia, but the Generous-Donor Gene is only active with Licentia
harmony.Patch(AccessTools.Method(typeof(rjw.JobDriver_Sex), nameof(rjw.JobDriver_Sex.ChangePsyfocus)),
postfix: new HarmonyMethod(typeof(Patch_SexTicks_ChangePsyfocus), nameof(Patch_SexTicks_ChangePsyfocus.Postfix)));
+ // Gene: Likes Cumflation [Postfix Patch]
+ harmony.Patch(AccessTools.Method(typeof(LicentiaLabs.CumflationHelper), nameof(LicentiaLabs.CumflationHelper.Cumflation)),
+ postfix: new HarmonyMethod(typeof(Patch_LikesCumflation), nameof(Patch_LikesCumflation.PostFix)));
}
}))();
}
diff --git a/Source/HediffDefOf.cs b/Source/HediffDefOf.cs
index 443c32e..d957096 100644
--- a/Source/HediffDefOf.cs
+++ b/Source/HediffDefOf.cs
@@ -20,6 +20,9 @@ namespace RJW_Genes
public static readonly HediffDef rjw_genes_orgasmic_mytosis_hediff;
public static readonly HediffDef rjw_genes_mytosis_shock_hediff;
+ [MayRequire("LustLicentia.RJWLabs")] public static readonly HediffDef rjw_genes_cumstuffed_counter;
+ [MayRequire("LustLicentia.RJWLabs")] public static readonly HediffDef rjw_genes_cumflation_counter;
+
public static readonly HediffDef OvaryAgitator;
public static readonly HediffDef Bioscaffold;
}
diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj
index 5c02391..6c6ef9a 100644
--- a/Source/Rjw-Genes.csproj
+++ b/Source/Rjw-Genes.csproj
@@ -48,13 +48,11 @@
-
-
@@ -73,6 +71,7 @@
+
@@ -80,7 +79,6 @@
-
@@ -96,7 +94,7 @@
-
+
@@ -219,7 +217,7 @@
False
- ..\..\rjw-sexperience-master\1.5\Assemblies\RJWSexperience.dll
+ ..\..\rjw-sexperience\1.5\Assemblies\RJWSexperience.dllFalse
diff --git a/Source/Settings/RJW_Genes_Settings.cs b/Source/Settings/RJW_Genes_Settings.cs
index 4180532..49257a8 100644
--- a/Source/Settings/RJW_Genes_Settings.cs
+++ b/Source/Settings/RJW_Genes_Settings.cs
@@ -17,58 +17,57 @@ namespace RJW_Genes
listing_Standard.maxOneColumn = true;
listing_Standard.ColumnWidth = rect.width / 2.05f;
listing_Standard.Begin(rect);
- listing_Standard.Gap(24f);
+ listing_Standard.Gap(24f);
// Genitalia Resizing Age
- listing_Standard.Label("Genitalia resizing age" + ": " +
- Math.Round((double)(RJW_Genes_Settings.rjw_genes_resizing_age), 0).ToString() , -1f, "years.");
+ listing_Standard.Label("rjw_genes_settings_genitalia_resizing_age".Translate() + " " +
+ Math.Round((double)(RJW_Genes_Settings.rjw_genes_resizing_age), 0).ToString() + "rjw_genes_settings_genitalia_resizing_postfix".Translate(), -1f, "rjw_genes_settings_genitalia_resizing_age_explanation".Translate());
RJW_Genes_Settings.rjw_genes_resizing_age = listing_Standard.Slider(RJW_Genes_Settings.rjw_genes_resizing_age, 18f, 100f);
listing_Standard.Gap(4f);
- // Evergrowth Speed
- listing_Standard.Label("number of ticks between genitalia evergrowth updates (60000 ticks are 1 day)" + ": " +
- Math.Round((double)(RJW_Genes_Settings.rjw_genes_evergrowth_ticks), 0).ToString() , -1f, "ticks.");
- RJW_Genes_Settings.rjw_genes_evergrowth_ticks = (int) listing_Standard.Slider(RJW_Genes_Settings.rjw_genes_evergrowth_ticks, 600, 60000);
- listing_Standard.Gap(4f);
// Fertilin Gain From Animals
- listing_Standard.Label("Fertilin-Gain from Animals" + ": " +
- Math.Round((double)(RJW_Genes_Settings.rjw_genes_fertilin_from_animals_factor * 100f), 0).ToString() + "", -1f, "of fertilin gained (compared to human-baseline).");
+ listing_Standard.Label("rjw_genes_settings_fertilin_gain_from_animals".Translate() + " " +
+ Math.Round((double)(RJW_Genes_Settings.rjw_genes_fertilin_from_animals_factor * 100f), 0).ToString() + "%", -1f, "rjw_genes_settings_fertilin_gain_from_animals_explanation".Translate());
RJW_Genes_Settings.rjw_genes_fertilin_from_animals_factor = listing_Standard.Slider(RJW_Genes_Settings.rjw_genes_fertilin_from_animals_factor, 0f, 3f);
listing_Standard.Gap(5f);
- listing_Standard.CheckboxLabeled("Sexdemon Visits", ref rjw_genes_sexdemon_visit, "If enabled, incubi and succubi can spawn in through an event.", 0f, 1f);
+ listing_Standard.CheckboxLabeled("rjw_genes_settings_sexdemon_spawn_key".Translate(), ref rjw_genes_sexdemon_visit, "rjw_genes_settings_sexdemon_spawn_explanation".Translate(), 0f, 1f);
if (rjw_genes_sexdemon_visit)
{
listing_Standard.Gap(3f);
- listing_Standard.CheckboxLabeled(" Size matters", ref rjw_genes_sexdemon_join_size_matters, "Incubi and succubi will consider size/tightness of partners genital for deciding if they want to join", 0f, 1f);
+ listing_Standard.CheckboxLabeled(" " + "rjw_genes_settings_sexdemon_size_matters_key".Translate(), ref rjw_genes_sexdemon_join_size_matters, "rjw_genes_settings_sexdemon_size_matters_explanation".Translate(), 0f, 1f);
listing_Standard.Gap(3f);
- listing_Standard.CheckboxLabeled(" Sexdemon groups", ref rjw_genes_sexdemon_visit_groups, "Multiple sexdemons can spawn during a event", 0f, 1f);
+ listing_Standard.CheckboxLabeled(" " + "rjw_genes_settings_sexdemon_group_spawn_key".Translate(), ref rjw_genes_sexdemon_visit_groups, "rjw_genes_settings_sexdemon_group_spawn_explanation".Translate(), 0f, 1f);
listing_Standard.Gap(3f);
- listing_Standard.CheckboxLabeled(" Succubi", ref rjw_genes_sexdemon_visit_succubi, "Allow incubi to spawn through this even", 0f, 1f);
+ listing_Standard.CheckboxLabeled(" " + "rjw_genes_settings_sexdemon_succubi_spawn_key".Translate(), ref rjw_genes_sexdemon_visit_succubi, "rjw_genes_settings_sexdemon_succubi_spawn_explanation".Translate(), 0f, 1f);
listing_Standard.Gap(3f);
- listing_Standard.CheckboxLabeled(" Incubi", ref rjw_genes_sexdemon_visit_incubi, "Allow incubi to spawn through this even", 0f, 1f);
+ listing_Standard.CheckboxLabeled(" " + "rjw_genes_settings_sexdemon_incubi_spawn_key".Translate(), ref rjw_genes_sexdemon_visit_incubi, "rjw_genes_settings_sexdemon_incubi_spawn_explanation".Translate(), 0f, 1f);
}
listing_Standard.Gap(4f);
listing_Standard.Gap(4f);
- listing_Standard.CheckboxLabeled("Regret Stealing Love", ref regretStealingLovinThoughtDisabled, "If off, pawns will not get bad thoughts for seduction.");
+ listing_Standard.CheckboxLabeled("rjw_genes_settings_regret_stealing_love_key".Translate(), ref regretStealingLovinThoughtDisabled, "rjw_genes_settings_regret_stealing_love_explanation".Translate());
+
+ listing_Standard.Gap(4f);
+ listing_Standard.CheckboxLabeled("rjw_genes_settings_animal_mating_needs_penis_key".Translate(), ref animalMatingPulseCheckForGenitals, "rjw_genes_settings_animal_mating_needs_penis_explanation".Translate());
listing_Standard.Gap(5f);
- listing_Standard.CheckboxLabeled("generous-donor cheatmode", ref rjw_genes_generous_donor_cheatmode, "When enabled, pawns with the 'generous donor' are not drained and not fertilin exhausted. Hence they can fuel succubi and incubi non-stop. This makes them drastically easier to keep, and you should not do it.", 0f, 1f);
+ listing_Standard.CheckboxLabeled("rjw_genes_settings_generous_donor_cheatmode_key".Translate(), ref rjw_genes_generous_donor_cheatmode, "rjw_genes_settings_generous_donor_cheatmode_explanation".Translate(), 0f, 1f);
listing_Standard.Gap(5f);
- listing_Standard.CheckboxLabeled("detailed-debug", ref rjw_genes_detailed_debug, "Adds detailed information to the log about interactions and genes.", 0f, 1f);
+ listing_Standard.CheckboxLabeled("rjw_genes_settings_detailed_debug_key".Translate(), ref rjw_genes_detailed_debug, "rjw_genes_settings_detailed_debug_explanation".Translate(), 0f, 1f);
listing_Standard.End();
}
public override void ExposeData()
{
base.ExposeData();
- Scribe_Values.Look(ref RJW_Genes_Settings.rjw_genes_evergrowth_ticks, "rjw_genes_evergrowth_ticks", RJW_Genes_Settings.rjw_genes_evergrowth_ticks, true);
Scribe_Values.Look(ref RJW_Genes_Settings.rjw_genes_resizing_age, "rjw_genes_resizing_age", RJW_Genes_Settings.rjw_genes_resizing_age, true);
Scribe_Values.Look(ref RJW_Genes_Settings.rjw_genes_fertilin_from_animals_factor, "rjw_genes_fertilin_from_animals_factor", RJW_Genes_Settings.rjw_genes_fertilin_from_animals_factor, true);
Scribe_Values.Look(ref RJW_Genes_Settings.rjw_genes_detailed_debug, "rjw_genes_detailed_debug", RJW_Genes_Settings.rjw_genes_detailed_debug, true);
Scribe_Values.Look(ref regretStealingLovinThoughtDisabled, "regretStealingLovinThoughtDisabled", regretStealingLovinThoughtDisabled, true);
+
+ Scribe_Values.Look(ref animalMatingPulseCheckForGenitals, "animalMatingPulseCheckForGenitals", animalMatingPulseCheckForGenitals, true);
Scribe_Values.Look(ref RJW_Genes_Settings.rjw_genes_generous_donor_cheatmode, "rjw_genes_generous_donor_cheatmode", RJW_Genes_Settings.rjw_genes_generous_donor_cheatmode, true);
Scribe_Values.Look(ref RJW_Genes_Settings.rjw_genes_sexdemon_visit, "rjw_genes_sexdemon_visit", RJW_Genes_Settings.rjw_genes_sexdemon_visit, true);
Scribe_Values.Look(ref RJW_Genes_Settings.rjw_genes_sexdemon_join_size_matters, "rjw_genes_sexdemon_join_size_matters", RJW_Genes_Settings.rjw_genes_sexdemon_join_size_matters, true);
@@ -80,8 +79,8 @@ namespace RJW_Genes
public static bool rjw_genes_detailed_debug = false;
public static float rjw_genes_fertilin_from_animals_factor = 0.1f;
public static float rjw_genes_resizing_age = 20;
- public static int rjw_genes_evergrowth_ticks = 60000;
public static bool regretStealingLovinThoughtDisabled = false;
+ public static bool animalMatingPulseCheckForGenitals = true;
public static bool rjw_genes_sexdemon_visit = true;
public static bool rjw_genes_sexdemon_join_size_matters = true;
diff --git a/TODOS.md b/TODOS.md
index 33ece5e..25f5045 100644
--- a/TODOS.md
+++ b/TODOS.md
@@ -2,15 +2,7 @@
Any help is very appreciated, even if it is just pointing me to existing similar projects.
-## Additions to existing things
-
-**Cumeater** - Look for edible cum-items when low on Fertilin
-
-**Incubi** - Add a forced striptease Ability
-
-**Age Transfer Genes** - Add (configurable) option to satisfy Bodymodders and their AgeReversalDemand
-
-## Planned Genes
+## Planned / Wanted Genes
**Adjustable Cock-Size** like e.g. artificial genitalia have
@@ -20,46 +12,18 @@ Any help is very appreciated, even if it is just pointing me to existing similar
**Cum-Drugs** eating cum has an effect similar to Go-Juice (including (separate?) addiction)
-**Death-Rest** until the pawn is cumflated.
+**Death-Rest** until the pawn is cumflated. I would have liked
-**STD Immunity** & maybe a potential to be carrier, but not suffer effects.
-
-## Planned Xenotypes
-
-**Beastmaster:**
-
-- [] Animal Mating Call (Get fucked by everything nearby, potentially ending animal rage)
-- [] Pheromone Spit that marks a target for being raped by animals
-- [] Power-Boost & Bonding to animals through zoophilia
-- [] Maybe: Boost pregnancy times of Animals
-- [] Maybe: Make it Animal-Fertilin-Dependend
-- [] Either: Can only eat meat or cannot eat meat
-- [] Gene to prefer hookups of animals that are in a menstrual cycle
-
-Can't help but think about Rexxar Porn now I am a bad person.
+**STD Immunity** & maybe a potential to be carrier, but not suffer effects. I just don't play with STDs
## Genes with Abilities and more Effects
There were some suggestions on the Discord I saved them somewhere else. I am far away from making that work, but to have them here:
-- Genitalia deal damage as per size (on normal sex-use)
+- Genitalia deal damage as per size (on normal sex-use) - This started in the branch `GenitaliaDamage` but prooves a bit overboarding!
- Genitalia can cause Terror (as ability)
-- Cumshot Sniper Abilities
+- Cumshot Sniper Abilities. Scale damage with body size and genitalia size, scale distance by cum-amount (relative to the damage - high damage projectiles need more cum per meter).
## Cleanups:
-- Streamline Filenames / Names to either be LifeForce or Fertilin (e.g. `Hediffs_Fertilin.xml` but `Pawnkind_LifeForce.xml`). I think most things are called LifeForce.
-- Similar cleanup for the patches, and make a note what to find where in the patches
- Change Project structure to the 1.3, 1.4 Structure of other mods
-
-## Split:
-
-I plan to split this mod.
-Namely, I want to make a
-
-1. base-mod (with genitalia and size genes, anything alternating all base stats)
-2. bonus-mod, with Fertilin and other complex genes
-3. xenotype-mod (only xenotypes + scenarios)
-4. animal genes inheritance (Yes, bit of a meme that it was separate mod earlier)
-
-I first want to make a bit more content, and then I hope there will be a "breaking change" in RJW so I can also do a breaking change on top of that.
\ No newline at end of file