Compare commits

...

6 commits

31 changed files with 264 additions and 100 deletions

View file

@ -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)
- 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

View file

@ -4,7 +4,7 @@
<defName>rjw_genes_naked_prowess</defName>
<label>naked prowess</label>
<description>Enhance the strength and resilience of your naked body with fertilin.</description>
<iconPath>Things/Mote/Heart</iconPath>
<iconPath>Genes/Icons/rjw_naked_prowess</iconPath>
<warmupMoteSocialSymbol>Things/Mote/Heart</warmupMoteSocialSymbol>
<jobDef>CastAbilityOnThing</jobDef>
<targetRequired>False</targetRequired>

View file

@ -4,7 +4,7 @@
<defName>rjw_genes_seduce</defName>
<label>seduce</label>
<description>Seduce the target to approach the caster.</description>
<iconPath>Things/Mote/Heart</iconPath>
<iconPath>Genes/Icons/seduce</iconPath>
<writeCombatLog>True</writeCombatLog>
<stunTargetWhileCasting>true</stunTargetWhileCasting>
<displayGizmoWhileUndrafted>true</displayGizmoWhileUndrafted>

View file

@ -15,7 +15,7 @@
<showGizmoOnWorldView>true</showGizmoOnWorldView>
<showGizmoWhenDrafted>true</showGizmoWhenDrafted>
<resourceDescription>A 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.</resourceDescription>
<iconPath>UI/Icons/Genes/Gene_Hemogenic</iconPath>
<iconPath>Genes/Icons/FertilinAlt</iconPath>
<selectionWeight>0</selectionWeight>
<displayCategory>rjw_genes_fertilin</displayCategory>
<displayOrderInCategory>-2</displayOrderInCategory>
@ -39,7 +39,7 @@
<description>Carriers lose an additional 15 fertilin per day from biological entropy.</description>
<resourceLabel>fertilin</resourceLabel>
<geneClass>RJW_Genes.Gene_LifeForceDrain</geneClass>
<iconPath>UI/Icons/Genes/Gene_HemogenDrain</iconPath>
<iconPath>Genes/Icons/FertilinDrainAlt</iconPath>
<prerequisite>rjw_genes_lifeforce</prerequisite>
<resourceLossPerDay>0.15</resourceLossPerDay>
<displayCategory>rjw_genes_fertilin</displayCategory>
@ -53,7 +53,7 @@
<label>Pussy Healer</label>
<labelShortAdj>pussyhealer</labelShortAdj>
<description>Carriers of this gene are able use vaginal sex to tend to other's wounds.</description>
<iconPath>Things/Mote/Heart</iconPath>
<iconPath>Genes/Icons/Healpussy</iconPath>
<prerequisite>rjw_genes_lifeforce</prerequisite>
<displayOrderInCategory>9</displayOrderInCategory>
<displayCategory>rjw_genes_fertilin</displayCategory>
@ -79,7 +79,7 @@
<label>Cockeater</label>
<labelShortAdj>cockeater</labelShortAdj>
<description>Carriers of this gene are able eat cocks to restore their fertilin supply. Cocks are consumed during that process.</description>
<iconPath>Things/Mote/Heart</iconPath>
<iconPath>Genes/Icons/cockeater</iconPath>
<prerequisite>rjw_genes_lifeforce</prerequisite>
<displayOrderInCategory>11</displayOrderInCategory>
<displayCategory>rjw_genes_fertilin</displayCategory>
@ -130,7 +130,7 @@
<label>seduction</label>
<labelShortAdj>seduction</labelShortAdj>
<description>Carriers of this gene are able to seduce a pawn into having sex with them.</description>
<iconPath>Things/Mote/Heart</iconPath>
<iconPath>Genes/Icons/seduce</iconPath>
<prerequisite>rjw_genes_lifeforce</prerequisite>
<displayOrderInCategory>13</displayOrderInCategory>
<displayCategory>rjw_genes_fertilin</displayCategory>
@ -155,7 +155,7 @@
<defName>rjw_genes_naked_prowess</defName>
<label>naked prowess</label>
<description>Carriers of this gene are able to temporarily increase their strength and resilience, while they are naked.</description>
<iconPath>Things/Mote/Heart</iconPath>
<iconPath>Genes/Icons/rjw_naked_prowess</iconPath>
<prerequisite>rjw_genes_lifeforce</prerequisite>
<displayOrderInCategory>13</displayOrderInCategory>
<displayCategory>rjw_genes_fertilin</displayCategory>
@ -173,7 +173,7 @@
<defName>rjw_genes_cum_eater</defName>
<label>Cum eater</label>
<description>Carriers of this gene are able to absorb fertilin through eating cum. This includes oral sex, eating cum for food or sucking out cumflated pawns. </description>
<iconPath>Things/Mote/Heart</iconPath>
<iconPath>Genes/Icons/cumeater</iconPath>
<prerequisite>rjw_genes_lifeforce</prerequisite>
<displayOrderInCategory>1</displayOrderInCategory>
<displayCategory>rjw_genes_fertilin</displayCategory>
@ -181,27 +181,16 @@
</GeneDef>
<GeneDef>
<defName>rjw_genes_vaginal_absorber</defName>
<label>Vaginal Fertilin Absorber</label>
<description>Carriers of this gene are able to absorb the fertilin inside sperm through their vagina.</description>
<iconPath>Things/Mote/Heart</iconPath>
<defName>rjw_genes_fertilin_absorber</defName>
<label>Fertilin Absorber</label>
<description>Carriers of this gene are able to absorb the fertilin inside sperm through their vagina and anus.</description>
<iconPath>Genes/Icons/Vaginal_cum_absorption</iconPath>
<prerequisite>rjw_genes_lifeforce</prerequisite>
<displayOrderInCategory>2</displayOrderInCategory>
<displayCategory>rjw_genes_fertilin</displayCategory>
<biostatCpx>1</biostatCpx>
</GeneDef>
<GeneDef>
<defName>rjw_genes_anal_absorber</defName>
<label>Anal Fertilin Absorber</label>
<description>Carriers of this gene are able to absorb the fertilin inside sperm through their anus.</description>
<iconPath>Things/Mote/Heart</iconPath>
<prerequisite>rjw_genes_lifeforce</prerequisite>
<displayOrderInCategory>3</displayOrderInCategory>
<displayCategory>rjw_genes_fertilin</displayCategory>
<biostatCpx>1</biostatCpx>
</GeneDef>
<GeneDef>
<defName>rjw_genes_drainer</defName>
<label>vitality drainer</label>

View file

@ -31,8 +31,7 @@
<li>rjw_genes_demonic_genitalia</li>
<li>rjw_genes_cum_eater</li>
<li>rjw_genes_vaginal_absorber</li>
<li>rjw_genes_anal_absorber</li>
<li>rjw_genes_fertilin_absorber</li>
<li>rjw_genes_paralysingkiss</li>
<li>rjw_genes_seduce</li>
@ -89,7 +88,7 @@
<li>UVSensitivity_Intense</li>
<li>AptitudeStrong_Intellectual</li>
<li>Ears_Pointed</li>
<li>Headbone_MiniHorns</li>
<li>Headbone_CenterHorn</li>
<li>Skin_InkBlack</li>
</genes>
</XenotypeDef>
@ -114,7 +113,6 @@
<li>KillThirst</li>
<li>Robust</li>
<li>Pain_Reduced</li>
<li>rjw_genes_rapist</li>
<li>Beauty_Ugly</li>
<li>Hair_BaldOnly</li>
<li>Hair_ShortOnly</li>
@ -125,6 +123,7 @@
<li>AptitudePoor_Crafting</li>
<li>AptitudePoor_Artistic</li>
<li>Unstoppable</li>
<li>rjw_genes_rapist</li>
<li>rjw_genes_female_only</li>
<li>rjw_genes_lifeforce</li>
<li>rjw_genes_lifeforce_drain</li>

View file

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<!-- Actually, there are no pheromones for humans that we are aware of, did you know? There are smells we are conditioned to like, but actual pheromones are not known for humans. But, this is a game, so fuck it I guess? -->
<HediffDef>
<defName>rjw_genes_aphrodisiac_pheromone</defName>
<hediffClass>HediffWithComps</hediffClass>
<label>induced libido</label>
<description>sex drive increasing due to smelling aphrodisiac pheromones.</description>
<defaultLabelColor>(1,0,0.5)</defaultLabelColor>
<maxSeverity>1.0</maxSeverity>
<comps>
<li Class="HediffCompProperties_SeverityPerDay">
<severityPerDay>-4.0</severityPerDay>
</li>
</comps>
<stages>
<li>
<label>wearing off</label>
<statFactors>
<SexFrequency>1.25</SexFrequency>
</statFactors>
</li>
<li>
<minSeverity>0.35</minSeverity>
<label>moderate</label>
<statFactors>
<SexFrequency>1.8</SexFrequency>
</statFactors>
</li>
<li>
<minSeverity>0.9</minSeverity>
<label>strong</label>
<statFactors>
<SexFrequency>2.5</SexFrequency>
</statFactors>
</li>
</stages>
</HediffDef>
</Defs>

View file

@ -1,26 +1,5 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<HediffDef>
<defName>rjw_genes_aphrodisiac_pheromone</defName>
<hediffClass>HediffWithComps</hediffClass>
<label>induced libido</label>
<description>sex drive increasing due to smelling aphrodisiac pheromones.</description>
<defaultLabelColor>(1,0,0.5)</defaultLabelColor>
<maxSeverity>1.0</maxSeverity>
<comps>
<li Class="HediffCompProperties_SeverityPerDay">
<severityPerDay>-24.0</severityPerDay>
</li>
</comps>
<stages>
<li>
<becomeVisible>true</becomeVisible>
<statFactors>
<SexFrequency>2</SexFrequency> <!--This is a lie, it gets changed when applied -->
</statFactors>
</li>
</stages>
</HediffDef>
<HediffDef>
<defName>rjw_genes_fertilin_lost</defName>

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
<!-- Add RJW Sex meditation focus icon to VanillaPsycastsExpanded -->
<Operation Class="PatchOperationFindMod">
<mods>
<li>RimJobWorld</li>
</mods>
<match Class="PatchOperationAdd">
<xpath>/Defs/ThingDef[defName="UsedCondom"]/ingestible</xpath>
<value>
<outcomeDoers>
<li Class="RJW_Genes.IngestionOutcomeDoer_LifeForceOffset">
<FertilinPerUnit>1</FertilinPerUnit>
</li>
</outcomeDoers>
</value>
</match>
</Operation>
</Patch>

View file

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
<Operation Class="PatchOperationSequence">
<operations>
<li Class="PatchOperationFindMod">
<mods>
<li>RJW Sexperience</li>
</mods>
<match Class="PatchOperationAdd">
<xpath>Defs/XenotypeDef[defName="rjw_genes_succubus"]/genes</xpath>
<value>
<li>AptitudeRemarkable_Sex</li>
</value>
</match>
</li>
<li Class="PatchOperationFindMod">
<mods>
<li>RJW Sexperience</li>
</mods>
<match Class="PatchOperationAdd">
<xpath>Defs/XenotypeDef[defName="rjw_genes_incubus"]/genes</xpath>
<value>
<li>AptitudeRemarkable_Sex</li>
</value>
</match>
</li>
</operations>
</Operation>
</Patch>

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

View file

@ -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.

View file

@ -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.
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.

View file

@ -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;

View file

@ -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;
}
}
}

View file

@ -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;
}
}
}

View file

@ -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;
}
}
}

View file

@ -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;
}
}
}

View file

@ -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;

View file

@ -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)
{

View file

@ -58,8 +58,7 @@ namespace RJW_Genes
private static List<GeneDef> FertilinSourceGenes = new List<GeneDef>() {
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
};

View file

@ -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;
}
}
}

View file

@ -35,12 +35,9 @@ namespace RJW_Genes.Interactions
yield return new Weighted<LewdablePartKind>(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<LewdablePartKind>(weight, LewdablePartKind.Vagina);
}
if (pawn.genes.HasGene(GeneDefOf.rjw_genes_anal_absorber))
{
yield return new Weighted<LewdablePartKind>(weight, LewdablePartKind.Anus);
}
}
@ -64,12 +61,10 @@ namespace RJW_Genes.Interactions
}
yield return new Weighted<LewdablePartKind>(weight, LewdablePartKind.Mouth);
yield return new Weighted<LewdablePartKind>(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<LewdablePartKind>(weight, LewdablePartKind.Vagina);
}
if (pawn.genes.HasGene(GeneDefOf.rjw_genes_anal_absorber))
{
yield return new Weighted<LewdablePartKind>(weight, LewdablePartKind.Anus);
}
}

View file

@ -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