diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 0e2154e..1f3d4d5 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -23,4 +23,6 @@ But please consider also the following:
- Many of the Icons I made (e.g. Genitalia Types) include things from [OpenMoji](https://openmoji.org/) which is awesome
- 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)
\ No newline at end of file
+- Hypersexual & Zoophile comes from [RJW](https://gitgud.io/Ed86/rjw)
+- Cockeater & Naked Prowess come from *WasMachenSachen*.
+- Fertilin, Fertilin Drain, Healpussy, Succubus Wing & Tail come from Shabakur
\ No newline at end of file
diff --git a/Common/Defs/AbilityDefs/Ability_NakedProwess.xml b/Common/Defs/AbilityDefs/Ability_NakedProwess.xml
index 71ad638..82d5bd8 100644
--- a/Common/Defs/AbilityDefs/Ability_NakedProwess.xml
+++ b/Common/Defs/AbilityDefs/Ability_NakedProwess.xml
@@ -4,7 +4,7 @@
rjw_genes_naked_prowessEnhance the strength and resilience of your naked body with fertilin.
- Things/Mote/Heart
+ Genes/Icons/rjw_naked_prowessThings/Mote/HeartCastAbilityOnThingFalse
diff --git a/Common/Defs/AbilityDefs/Ability_Seduce.xml b/Common/Defs/AbilityDefs/Ability_Seduce.xml
index fb87fea..3310595 100644
--- a/Common/Defs/AbilityDefs/Ability_Seduce.xml
+++ b/Common/Defs/AbilityDefs/Ability_Seduce.xml
@@ -4,7 +4,7 @@
rjw_genes_seduceSeduce the target to approach the caster.
- Things/Mote/Heart
+ Genes/Icons/seduceTruetruetrue
diff --git a/Common/Defs/GeneDefs/GeneDefs_LifeForce.xml b/Common/Defs/GeneDefs/GeneDefs_LifeForce.xml
index fe67321..cc70eae 100644
--- a/Common/Defs/GeneDefs/GeneDefs_LifeForce.xml
+++ b/Common/Defs/GeneDefs/GeneDefs_LifeForce.xml
@@ -15,7 +15,7 @@
truetrueA reserve of biological strength which can be gained and spent in a variety of ways. \n\nFertilin can be increased by absorbing cum, typically through oral sex or stored cum. \n\nIf fertilin reaches zero, {PAWN_nameDef} will become very unhappy and may try to obtain some forcefully.
- UI/Icons/Genes/Gene_Hemogenic
+ Genes/Icons/FertilinAlt0rjw_genes_fertilin-2
@@ -39,7 +39,7 @@
Carriers lose an additional 15 fertilin per day from biological entropy.fertilinRJW_Genes.Gene_LifeForceDrain
- UI/Icons/Genes/Gene_HemogenDrain
+ Genes/Icons/FertilinDrainAltrjw_genes_lifeforce0.15rjw_genes_fertilin
@@ -53,7 +53,7 @@
pussyhealerCarriers of this gene are able use vaginal sex to tend to other's wounds.
- Things/Mote/Heart
+ Genes/Icons/Healpussyrjw_genes_lifeforce9rjw_genes_fertilin
@@ -79,7 +79,7 @@
cockeaterCarriers of this gene are able eat cocks to restore their fertilin supply. Cocks are consumed during that process.
- Things/Mote/Heart
+ Genes/Icons/cockeaterrjw_genes_lifeforce11rjw_genes_fertilin
@@ -130,7 +130,7 @@
seductionCarriers of this gene are able to seduce a pawn into having sex with them.
- Things/Mote/Heart
+ Genes/Icons/seducerjw_genes_lifeforce13rjw_genes_fertilin
@@ -155,7 +155,7 @@
rjw_genes_naked_prowessCarriers of this gene are able to temporarily increase their strength and resilience, while they are naked.
- Things/Mote/Heart
+ Genes/Icons/rjw_naked_prowessrjw_genes_lifeforce13rjw_genes_fertilin
@@ -173,7 +173,7 @@
rjw_genes_cum_eaterCarriers of this gene are able to absorb fertilin through eating cum. This includes oral sex, eating cum for food or sucking out cumflated pawns.
- Things/Mote/Heart
+ Genes/Icons/cumeaterrjw_genes_lifeforce1rjw_genes_fertilin
@@ -181,27 +181,16 @@
- rjw_genes_vaginal_absorber
-
- Carriers of this gene are able to absorb the fertilin inside sperm through their vagina.
- Things/Mote/Heart
+ rjw_genes_fertilin_absorber
+
+ Carriers of this gene are able to absorb the fertilin inside sperm through their vagina and anus.
+ Genes/Icons/Vaginal_cum_absorptionrjw_genes_lifeforce2rjw_genes_fertilin1
-
- rjw_genes_anal_absorber
-
- Carriers of this gene are able to absorb the fertilin inside sperm through their anus.
- Things/Mote/Heart
- rjw_genes_lifeforce
- 3
- rjw_genes_fertilin
- 1
-
-
rjw_genes_drainer
diff --git a/Common/Defs/GeneDefs/Xenotype_Lifeforce.xml b/Common/Defs/GeneDefs/Xenotype_Lifeforce.xml
index 9942abf..38dfa28 100644
--- a/Common/Defs/GeneDefs/Xenotype_Lifeforce.xml
+++ b/Common/Defs/GeneDefs/Xenotype_Lifeforce.xml
@@ -31,8 +31,7 @@
rjw_genes_demonic_genitalia
rjw_genes_cum_eater
-
rjw_genes_vaginal_absorber
-
rjw_genes_anal_absorber
+
rjw_genes_fertilin_absorber
rjw_genes_paralysingkiss
rjw_genes_seduce
@@ -89,7 +88,7 @@
UVSensitivity_Intense
AptitudeStrong_Intellectual
Ears_Pointed
-
Headbone_MiniHorns
+
Headbone_CenterHorn
Skin_InkBlack
@@ -114,7 +113,6 @@
KillThirst
Robust
Pain_Reduced
-
rjw_genes_rapist
Beauty_Ugly
Hair_BaldOnly
Hair_ShortOnly
@@ -125,6 +123,7 @@
AptitudePoor_Crafting
AptitudePoor_Artistic
Unstoppable
+
rjw_genes_rapist
rjw_genes_female_only
rjw_genes_lifeforce
rjw_genes_lifeforce_drain
diff --git a/Common/Defs/HediffDefs/Hediffs_Aphrodisiac.xml b/Common/Defs/HediffDefs/Hediffs_Aphrodisiac.xml
new file mode 100644
index 0000000..3d1048c
--- /dev/null
+++ b/Common/Defs/HediffDefs/Hediffs_Aphrodisiac.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+ rjw_genes_aphrodisiac_pheromone
+ HediffWithComps
+
+ sex drive increasing due to smelling aphrodisiac pheromones.
+ (1,0,0.5)
+ 1.0
+
+
+ -4.0
+
+
+
+
+
+
+ 1.25
+
+
+
+ 0.35
+
+
+
+ 1.8
+
+
+
+ 0.9
+
+
+
+ 2.5
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Common/Defs/HediffDefs/Hediffs_Fertilin.xml b/Common/Defs/HediffDefs/Hediffs_Fertilin.xml
index fd56ec9..d8ee3db 100644
--- a/Common/Defs/HediffDefs/Hediffs_Fertilin.xml
+++ b/Common/Defs/HediffDefs/Hediffs_Fertilin.xml
@@ -1,26 +1,5 @@
-
- rjw_genes_aphrodisiac_pheromone
- HediffWithComps
-
- sex drive increasing due to smelling aphrodisiac pheromones.
- (1,0,0.5)
- 1.0
-
-
+
+
+
+
\ No newline at end of file
diff --git a/Common/Textures/Genes/Icons/FertilinAlt.png b/Common/Textures/Genes/Icons/FertilinAlt.png
new file mode 100644
index 0000000..f89bc2d
Binary files /dev/null and b/Common/Textures/Genes/Icons/FertilinAlt.png differ
diff --git a/Common/Textures/Genes/Icons/FertilinDrainAlt.png b/Common/Textures/Genes/Icons/FertilinDrainAlt.png
new file mode 100644
index 0000000..adb198b
Binary files /dev/null and b/Common/Textures/Genes/Icons/FertilinDrainAlt.png differ
diff --git a/Common/Textures/Genes/Icons/Healpussy.png b/Common/Textures/Genes/Icons/Healpussy.png
new file mode 100644
index 0000000..46a11a3
Binary files /dev/null and b/Common/Textures/Genes/Icons/Healpussy.png differ
diff --git a/Common/Textures/Genes/Icons/Vaginal_cum_absorption.png b/Common/Textures/Genes/Icons/Vaginal_cum_absorption.png
new file mode 100644
index 0000000..4148bde
Binary files /dev/null and b/Common/Textures/Genes/Icons/Vaginal_cum_absorption.png differ
diff --git a/Common/Textures/Genes/Icons/cockeater.png b/Common/Textures/Genes/Icons/cockeater.png
new file mode 100644
index 0000000..deab6ef
Binary files /dev/null and b/Common/Textures/Genes/Icons/cockeater.png differ
diff --git a/Common/Textures/Genes/Icons/cumeater.png b/Common/Textures/Genes/Icons/cumeater.png
new file mode 100644
index 0000000..3150a18
Binary files /dev/null and b/Common/Textures/Genes/Icons/cumeater.png differ
diff --git a/Common/Textures/Genes/Icons/rjw_naked_prowess.png b/Common/Textures/Genes/Icons/rjw_naked_prowess.png
new file mode 100644
index 0000000..468fc60
Binary files /dev/null and b/Common/Textures/Genes/Icons/rjw_naked_prowess.png differ
diff --git a/Common/Textures/Genes/Icons/seduce.png b/Common/Textures/Genes/Icons/seduce.png
new file mode 100644
index 0000000..635132c
Binary files /dev/null and b/Common/Textures/Genes/Icons/seduce.png differ
diff --git a/Common/Textures/Genes/Icons/vagina_base.png b/Common/Textures/Genes/Icons/vagina_base.png
new file mode 100644
index 0000000..3f300a0
Binary files /dev/null and b/Common/Textures/Genes/Icons/vagina_base.png differ
diff --git a/KNOWN_BUGS.md b/KNOWN_BUGS.md
index a5efec9..ebedd72 100644
--- a/KNOWN_BUGS.md
+++ b/KNOWN_BUGS.md
@@ -15,6 +15,16 @@ Things to consider:
There also is a known mod-conflict with `rjw Animations patch` (See #18), so make sure you use up-to-date versions of everything.
+## Seduce aborts on sex-start!
+
+Error: You have a succubus using seduce on a hostile pawn, they start sex but immediately abort.
+
+Things to Consider:
+
+1. Is your Succubus drafted? If not, they might have a flight-mode set and are scared of the enemy.
+
+It seems that things changing Enemy Combat AI also affect this. One report was about CAI5000 and we also expect Combat Extended to be incompatible.
+
## Random Vaginas for Goblins
Error: Pawns have different genitalia than expected, e.g. if the "no vagina" gene is specified there are pawns with vaginas AND a penis.
diff --git a/README.md b/README.md
index ade08b3..d138b8a 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@ This mod adds genes related and based on RJW to Rimworld.
- Extra Genitalia (and a Futa Attempt)
- Most RJW Traits, Cumflation Immunity, Elasticity
- Cum-Amount Changes, Transfer Nutrition Boosts
-- Mech Breeding / Insect Breeding Support
+- Mech Breeding / Insect Breeding Additions
- Human-Animal Gene Inheritance merged from [Shabakur](https://github.com/Shabakur/RJW_Animal_Gene_Inheritance)
- Succubi, Incubi & Cumazones that utilize Fertilin, similar to Hemogen
@@ -32,4 +32,5 @@ One of the main motivations was to have genes being added to the xenotypes that
1. Please load this after any mod adding genes, and after the used RJW-Mods (Licentia, Sexperience).
2. Should not be used with the original RJW_Animal_Gene_Inheritance anymore.
-3. There was an issue with other "Male-Only / Female-Only" Mods --- for which we provide our own Genes now.
\ No newline at end of file
+3. There was an issue with other "Male-Only / Female-Only" Mods --- for which we provide our own Genes now.
+4. CAI5000 will not crash, but will make *Seduce*-Ability fail.
\ No newline at end of file
diff --git a/Source/GeneDefOf.cs b/Source/GeneDefOf.cs
index f8a84f1..e4af81f 100644
--- a/Source/GeneDefOf.cs
+++ b/Source/GeneDefOf.cs
@@ -82,8 +82,7 @@ namespace RJW_Genes
public static readonly GeneDef rjw_genes_pussyhealing;
public static readonly GeneDef rjw_genes_lifeforce_drain;
public static readonly GeneDef rjw_genes_cum_eater;
- public static readonly GeneDef rjw_genes_vaginal_absorber;
- public static readonly GeneDef rjw_genes_anal_absorber;
+ public static readonly GeneDef rjw_genes_fertilin_absorber;
public static readonly GeneDef rjw_genes_drainer;
public static readonly GeneDef rjw_genes_seduce;
public static readonly GeneDef rjw_genes_paralysingkiss;
diff --git a/Source/Genes/ExtraGenitalia/Gene_ExtraAnus.cs b/Source/Genes/ExtraGenitalia/Gene_ExtraAnus.cs
index cea77f2..65121e9 100644
--- a/Source/Genes/ExtraGenitalia/Gene_ExtraAnus.cs
+++ b/Source/Genes/ExtraGenitalia/Gene_ExtraAnus.cs
@@ -1,6 +1,7 @@
using Verse;
using rjw;
using RimWorld;
+using System.Linq;
namespace RJW_Genes
{
@@ -13,6 +14,13 @@ namespace RJW_Genes
{
base.PostMake();
+ // Some sources add Genes before they fire, e.g. Character Editor
+ // This should harden the gene, to solve #19
+ if (HasAlreadyTwoAnus())
+ {
+ return;
+ }
+
if (additional_anus == null)
{
CreateAndAddAnus();
@@ -23,6 +31,13 @@ namespace RJW_Genes
{
base.PostAdd();
+ // Some sources add Genes before they fire, e.g. Character Editor
+ // This should harden the gene, to solve #19
+ if (HasAlreadyTwoAnus())
+ {
+ return;
+ }
+
if (additional_anus == null)
{
CreateAndAddAnus();
@@ -53,5 +68,15 @@ namespace RJW_Genes
pawn.health.AddHediff(additional_anus, partBPR);
}
+ internal bool HasAlreadyTwoAnus()
+ {
+ if (pawn == null)
+ return false;
+
+ var possible_breasts =
+ Genital_Helper.get_AllPartsHediffList(pawn).Where(t => Genital_Helper.is_anus(t));
+
+ return possible_breasts.Count() >= 2;
+ }
}
}
diff --git a/Source/Genes/ExtraGenitalia/Gene_ExtraBreasts.cs b/Source/Genes/ExtraGenitalia/Gene_ExtraBreasts.cs
index 8829854..84fb107 100644
--- a/Source/Genes/ExtraGenitalia/Gene_ExtraBreasts.cs
+++ b/Source/Genes/ExtraGenitalia/Gene_ExtraBreasts.cs
@@ -1,6 +1,7 @@
using Verse;
using rjw;
using RimWorld;
+using System.Linq;
namespace RJW_Genes
{
@@ -13,6 +14,13 @@ namespace RJW_Genes
{
base.PostMake();
+ // Some sources add Genes before they fire, e.g. Character Editor
+ // This should harden the gene, to solve #19
+ if (HasAlreadyTwoBreasts())
+ {
+ return;
+ }
+
// Tits are only added for female pawns!
if (GenderUtility.IsFemale(pawn) && additional_breasts == null)
{
@@ -24,6 +32,13 @@ namespace RJW_Genes
{
base.PostAdd();
+ // Some sources add Genes before they fire, e.g. Character Editor
+ // This should harden the gene, to solve #19
+ if (HasAlreadyTwoBreasts())
+ {
+ return;
+ }
+
// Tits are only added for female pawns!
if (GenderUtility.IsFemale(pawn) && additional_breasts == null)
{
@@ -55,5 +70,16 @@ namespace RJW_Genes
pawn.health.AddHediff(additional_breasts, partBPR);
}
+ internal bool HasAlreadyTwoBreasts()
+ {
+ if (pawn == null)
+ return false;
+
+ var possible_breasts =
+ Genital_Helper.get_AllPartsHediffList(pawn).Where(t => t.def.defName.Contains("breast"));
+
+ return possible_breasts.Count() >= 2;
+ }
+
}
}
diff --git a/Source/Genes/ExtraGenitalia/Gene_ExtraPenis.cs b/Source/Genes/ExtraGenitalia/Gene_ExtraPenis.cs
index aee18c7..7b8fcb4 100644
--- a/Source/Genes/ExtraGenitalia/Gene_ExtraPenis.cs
+++ b/Source/Genes/ExtraGenitalia/Gene_ExtraPenis.cs
@@ -1,6 +1,7 @@
using Verse;
using rjw;
using RimWorld;
+using System.Linq;
namespace RJW_Genes
{
@@ -13,6 +14,13 @@ namespace RJW_Genes
{
base.PostMake();
+ // Some sources add Genes before they fire, e.g. Character Editor
+ // This should harden the gene, to solve #19
+ if (HasAlreadyTwoPenis())
+ {
+ return;
+ }
+
// Penis are only added for male pawns!
if (GenderUtility.IsMale(pawn) && additional_penis == null)
{
@@ -24,6 +32,13 @@ namespace RJW_Genes
{
base.PostAdd();
+ // Some sources add Genes before they fire, e.g. Character Editor
+ // This should harden the gene, to solve #19
+ if (HasAlreadyTwoPenis())
+ {
+ return;
+ }
+
// Penis are only added for male pawns!
if (GenderUtility.IsMale(pawn) && additional_penis == null)
{
@@ -55,5 +70,17 @@ namespace RJW_Genes
pawn.health.AddHediff(additional_penis, partBPR);
}
+
+ internal bool HasAlreadyTwoPenis()
+ {
+ if (pawn == null)
+ return false;
+
+ var possible_breasts =
+ Genital_Helper.get_AllPartsHediffList(pawn).Where(t => Genital_Helper.is_penis(t));
+
+ return possible_breasts.Count() >= 2;
+ }
+
}
}
diff --git a/Source/Genes/ExtraGenitalia/Gene_ExtraVagina.cs b/Source/Genes/ExtraGenitalia/Gene_ExtraVagina.cs
index 9940de0..fa02b87 100644
--- a/Source/Genes/ExtraGenitalia/Gene_ExtraVagina.cs
+++ b/Source/Genes/ExtraGenitalia/Gene_ExtraVagina.cs
@@ -1,6 +1,7 @@
using Verse;
using rjw;
using RimWorld;
+using System.Linq;
namespace RJW_Genes
{
@@ -18,6 +19,13 @@ namespace RJW_Genes
{
base.PostMake();
+ // Some sources add Genes before they fire, e.g. Character Editor
+ // This should harden the gene, to solve #19
+ if (HasAlreadyTwoVaginas())
+ {
+ return;
+ }
+
// Vaginas are only added for female pawns!
if (GenderUtility.IsFemale(pawn) && additional_vagina == null)
{
@@ -29,6 +37,13 @@ namespace RJW_Genes
{
base.PostAdd();
+ // Some sources add Genes before they fire, e.g. Character Editor
+ // This should harden the gene, to solve #19
+ if (HasAlreadyTwoVaginas())
+ {
+ return;
+ }
+
// Vaginas are only added for female pawns!
if (GenderUtility.IsFemale(pawn) && additional_vagina == null)
{
@@ -60,5 +75,15 @@ namespace RJW_Genes
pawn.health.AddHediff(additional_vagina, partBPR);
}
+ internal bool HasAlreadyTwoVaginas()
+ {
+ if (pawn == null)
+ return false;
+
+ var possible_breasts =
+ Genital_Helper.get_AllPartsHediffList(pawn).Where(t => Genital_Helper.is_vagina(t));
+
+ return possible_breasts.Count() >= 2;
+ }
}
}
diff --git a/Source/Genes/Life_Force/HediffComp_SeverityFromFertilin.cs b/Source/Genes/Life_Force/HediffComp_SeverityFromFertilin.cs
index d209423..4b8b3a7 100644
--- a/Source/Genes/Life_Force/HediffComp_SeverityFromFertilin.cs
+++ b/Source/Genes/Life_Force/HediffComp_SeverityFromFertilin.cs
@@ -47,7 +47,7 @@ namespace RJW_Genes
if (cachedLifeForceGene.Resource.Value <= cachedLifeForceGene.Resource.MinLevelForAlert && this.Pawn.IsHashIntervalTick(2500) && Rand.Chance(0.03f)) //~50% chance each day for mental break
{
if (this.Pawn.genes.HasGene(GeneDefOf.rjw_genes_cum_eater)
- || this.Pawn.genes.HasGene(GeneDefOf.rjw_genes_vaginal_absorber) || this.Pawn.genes.HasGene(GeneDefOf.rjw_genes_anal_absorber) || this.Pawn.genes.HasGene(GeneDefOf.rjw_genes_drainer))
+ || this.Pawn.genes.HasGene(GeneDefOf.rjw_genes_fertilin_absorber) || this.Pawn.genes.HasGene(GeneDefOf.rjw_genes_drainer))
{
//TODO: use mentalstatedef instead of mentalbreakdef
MentalBreakDef randomrape = GeneDefOf.rjw_genes_lifeforce_randomrape;
diff --git a/Source/Genes/Life_Force/Patches/Patch_SatisfyPersonal_LifeForceGain.cs b/Source/Genes/Life_Force/Patches/Patch_SatisfyPersonal_LifeForceGain.cs
index 74cb0bb..6ea0a62 100644
--- a/Source/Genes/Life_Force/Patches/Patch_SatisfyPersonal_LifeForceGain.cs
+++ b/Source/Genes/Life_Force/Patches/Patch_SatisfyPersonal_LifeForceGain.cs
@@ -180,24 +180,17 @@ namespace RJW_Genes
{
absorb_factor += 1f;
}
- else if (props.sexType == xxx.rjwSextype.Vaginal && GeneUtility.HasGeneNullCheck(PawnWithLifeForce, GeneDefOf.rjw_genes_vaginal_absorber))
+ else if (props.sexType == xxx.rjwSextype.Vaginal && GeneUtility.HasGeneNullCheck(PawnWithLifeForce, GeneDefOf.rjw_genes_fertilin_absorber))
{
absorb_factor += 1f;
}
- else if (props.sexType == xxx.rjwSextype.Anal && GeneUtility.HasGeneNullCheck(PawnWithLifeForce, GeneDefOf.rjw_genes_anal_absorber))
+ else if (props.sexType == xxx.rjwSextype.Anal && GeneUtility.HasGeneNullCheck(PawnWithLifeForce, GeneDefOf.rjw_genes_fertilin_absorber))
{
absorb_factor += 1f;
}
- else if (props.sexType == xxx.rjwSextype.DoublePenetration)
+ else if (props.sexType == xxx.rjwSextype.DoublePenetration && GeneUtility.HasGeneNullCheck(PawnWithLifeForce, GeneDefOf.rjw_genes_fertilin_absorber))
{
- if (GeneUtility.HasGeneNullCheck(PawnWithLifeForce, GeneDefOf.rjw_genes_vaginal_absorber))
- {
- absorb_factor += 0.5f;
- }
- if (GeneUtility.HasGeneNullCheck(PawnWithLifeForce, GeneDefOf.rjw_genes_anal_absorber))
- {
- absorb_factor += 0.5f;
- }
+ absorb_factor += 1f;
}
else if (props.sexType == xxx.rjwSextype.Scissoring || props.sexType == xxx.rjwSextype.Cunnilingus)
{
diff --git a/Source/Genes/Life_Force/Patches/Patch_Vanilla_Inheritance_Fertilin.cs b/Source/Genes/Life_Force/Patches/Patch_Vanilla_Inheritance_Fertilin.cs
index 6bb3c92..b4b327c 100644
--- a/Source/Genes/Life_Force/Patches/Patch_Vanilla_Inheritance_Fertilin.cs
+++ b/Source/Genes/Life_Force/Patches/Patch_Vanilla_Inheritance_Fertilin.cs
@@ -58,8 +58,7 @@ namespace RJW_Genes
private static List FertilinSourceGenes = new List() {
GeneDefOf.rjw_genes_drainer,
GeneDefOf.rjw_genes_cum_eater,
- GeneDefOf.rjw_genes_vaginal_absorber,
- GeneDefOf.rjw_genes_anal_absorber,
+ GeneDefOf.rjw_genes_fertilin_absorber,
GeneDefOf.rjw_genes_cockeater
};
diff --git a/Source/Genes/Special/Gene_Aphrodisiac_Pheromones.cs b/Source/Genes/Special/Gene_Aphrodisiac_Pheromones.cs
index 46f25d2..e3628dc 100644
--- a/Source/Genes/Special/Gene_Aphrodisiac_Pheromones.cs
+++ b/Source/Genes/Special/Gene_Aphrodisiac_Pheromones.cs
@@ -5,21 +5,30 @@ using RimWorld;
namespace RJW_Genes
{
public class Gene_Aphrodisiac_Pheromones : Gene
- {
+ {
+
+ // Default XML Setting is that it looses 4 Severity per day - so a "fully libido" gives 6h boost.
+ // This means that adding +.25 equals 1.5h of Libido.
+ // Tick Speed is hence set to 0.5h
+
+ const int APHRODISIAC_DISTANCE = 25;
+ const int TICK_INTERVAL = 60000 / 48 ; // 60k = 1 day, we want 0.5h which is 1/48th of 1 day.
+
+ const float SEXFREQ_THRESHOLD = 0.5f;
// Summary: once every one hour check for all pawns nearby and in line of sight (same room) and add/renew a hediff which lasts for 1 hour.
public override void Tick()
{
base.Tick();
- if (this.pawn.IsHashIntervalTick(2500) && this.pawn.Map != null)
+ if (this.pawn.IsHashIntervalTick(TICK_INTERVAL) && this.pawn.Map != null)
{
// Only spread pheromones if sexdrive above 1
float sexfrequency = this.pawn.GetStatValue(StatDef.Named("SexFrequency"));
- if(sexfrequency > 1f)
+ if(sexfrequency > SEXFREQ_THRESHOLD)
{
foreach (Pawn pawn in this.AffectedPawns(this.pawn.Position, this.pawn.Map))
{
- this.InduceAphrodisiac(pawn, sexfrequency);
+ this.InduceAphrodisiac(pawn);
}
}
}
@@ -31,7 +40,7 @@ namespace RJW_Genes
foreach (Pawn pawn in map.mapPawns.AllPawns)
{
if (pawn != null && this.pawn != null && pawn != this.pawn
- && pos.DistanceTo(pawn.Position) < 5 && GenSight.LineOfSight(pos, pawn.Position, pawn.Map)
+ && pos.DistanceTo(pawn.Position) < APHRODISIAC_DISTANCE && GenSight.LineOfSight(pos, pawn.Position, pawn.Map)
&& !GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_aphrodisiac_pheromones))
{
yield return pawn;
@@ -41,33 +50,21 @@ namespace RJW_Genes
yield break;
}
- // Applies or renews a hediff which increases sexdrive for 6 hours
- private void InduceAphrodisiac(Pawn pawn, float sexfrequency)
+ private void InduceAphrodisiac(Pawn pawn)
{
- Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_aphrodisiac_pheromone);
+ Hediff aphrodisiac = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.rjw_genes_aphrodisiac_pheromone);
- if (hediff != null)
+ if (aphrodisiac != null)
{
- hediff.Severity = 1f;
+ aphrodisiac.Severity += 0.25f;
}
else
{
- Hediff aphrodisiac = HediffMaker.MakeHediff(HediffDefOf.rjw_genes_aphrodisiac_pheromone, pawn);
- foreach (StatModifier stat in aphrodisiac.CurStage.statFactors)
- {
- if (stat.stat.defName == "SexFrequency")
- {
- stat.value = ModifySexfrequency(pawn, sexfrequency);
- pawn.health.AddHediff(aphrodisiac);
- }
- }
+ aphrodisiac = HediffMaker.MakeHediff(HediffDefOf.rjw_genes_aphrodisiac_pheromone, pawn);
+ aphrodisiac.Severity = 0.5f;
+ pawn.health.AddHediff(aphrodisiac);
}
}
- // Function to modify aphrodisiac strength, currently has no effect, but provides an easy hook for other modders and patches.
- public float ModifySexfrequency(Pawn pawn, float sexfrequency)
- {
- return sexfrequency;
- }
}
}
diff --git a/Source/Interactions/SuccubusTailjob/GenesPartKindUsageRule.cs b/Source/Interactions/SuccubusTailjob/GenesPartKindUsageRule.cs
index 1825550..8e993aa 100644
--- a/Source/Interactions/SuccubusTailjob/GenesPartKindUsageRule.cs
+++ b/Source/Interactions/SuccubusTailjob/GenesPartKindUsageRule.cs
@@ -35,12 +35,9 @@ namespace RJW_Genes.Interactions
yield return new Weighted(weight, LewdablePartKind.Beak);
}
- if (pawn.genes.HasGene(GeneDefOf.rjw_genes_vaginal_absorber))
+ if (pawn.genes.HasGene(GeneDefOf.rjw_genes_fertilin_absorber))
{
yield return new Weighted(weight, LewdablePartKind.Vagina);
- }
- if (pawn.genes.HasGene(GeneDefOf.rjw_genes_anal_absorber))
- {
yield return new Weighted(weight, LewdablePartKind.Anus);
}
}
@@ -64,12 +61,10 @@ namespace RJW_Genes.Interactions
}
yield return new Weighted(weight, LewdablePartKind.Mouth);
yield return new Weighted(weight, LewdablePartKind.Beak);
- if (pawn.genes.HasGene(GeneDefOf.rjw_genes_vaginal_absorber))
+
+ if (pawn.genes.HasGene(GeneDefOf.rjw_genes_fertilin_absorber))
{
yield return new Weighted(weight, LewdablePartKind.Vagina);
- }
- if (pawn.genes.HasGene(GeneDefOf.rjw_genes_anal_absorber))
- {
yield return new Weighted(weight, LewdablePartKind.Anus);
}
}
diff --git a/TODOS.md b/TODOS.md
index b19f8e1..66083a5 100644
--- a/TODOS.md
+++ b/TODOS.md
@@ -3,6 +3,12 @@
I have many ideas but not too much time / knowledge of Rimworld or Modding.
So 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
+
## Planned Genes
**Adjustable Cock-Size** like e.g. artificial genitalia have