diff --git a/Common/Assemblies/Rjw-Genes.dll b/Common/Assemblies/Rjw-Genes.dll
index 5e50e3c..3e6179d 100644
Binary files a/Common/Assemblies/Rjw-Genes.dll and b/Common/Assemblies/Rjw-Genes.dll differ
diff --git a/Common/Defs/AbilityDefs/Ability_CockEater.xml b/Common/Defs/AbilityDefs/Ability_CockEater.xml
new file mode 100644
index 0000000..d333c1d
--- /dev/null
+++ b/Common/Defs/AbilityDefs/Ability_CockEater.xml
@@ -0,0 +1,34 @@
+
+
+
+ rjw_genes_cockeater
+
+ Eat the cock of another pawn, restoring fertilin based on the size of the cock.
+ Things/Mote/Heart
+ true
+ true
+ false
+ Mote_CoagulateStencil
+ Coagulate
+ Coagulate_Cast
+ CastAbilityOnThingMelee
+ 402
+
+ Verb_CastAbilityTouch
+ false
+ -1
+ 10
+
+ true
+ false
+ false
+ false
+ true
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Common/Defs/Genes/GeneDefs_LifeForce.xml b/Common/Defs/Genes/GeneDefs_LifeForce.xml
index db2de4d..6a879dd 100644
--- a/Common/Defs/Genes/GeneDefs_LifeForce.xml
+++ b/Common/Defs/Genes/GeneDefs_LifeForce.xml
@@ -24,7 +24,7 @@
- hemo
+ fert
rjw_genes_lifeforce_randomrape
@@ -55,8 +55,35 @@
life
- clotter
- tender
+ pussy
+ heal
+
+
+
+
+
+ rjw_genes_cockeater
+
+ cockeater
+ Carriers of this gene are able eat cocks to restore their fertilin supply.
+ Things/Mote/Heart
+ rjw_genes_lifeforce
+ 11
+ rjw_genes_fertilin
+
+ rjw_genes_cockeater
+
+
+ rjw_genes_cockeater
+
+ 1
+ -1
+ 18
+
+
+ life
+ cock
+ eat
diff --git a/Common/Defs/ThoughtDefs/Thoughts_LifeForce.xml b/Common/Defs/ThoughtDefs/Thoughts_LifeForce.xml
new file mode 100644
index 0000000..559ae40
--- /dev/null
+++ b/Common/Defs/ThoughtDefs/Thoughts_LifeForce.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ rjw_genes_cock_eaten
+ Thought_Memory
+ 30.0
+ 100
+ 0.4
+
+
+
+ My cock was eaten directly of my body, I am devestated.
+ -30
+
+
+
+
diff --git a/Source/Genes/Life_Force/CompAbilityEffect_CockEater.cs b/Source/Genes/Life_Force/CompAbilityEffect_CockEater.cs
new file mode 100644
index 0000000..deddbce
--- /dev/null
+++ b/Source/Genes/Life_Force/CompAbilityEffect_CockEater.cs
@@ -0,0 +1,87 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+using UnityEngine;
+using RimWorld;
+using rjw;
+using rjw.Modules.Interactions.Helpers;
+
+namespace RJW_Genes
+{
+ public class CompAbilityEffect_CockEater : CompAbilityEffect
+ {
+ private new CompProperties_AbilityCockEater Props
+ {
+ get
+ {
+ return (CompProperties_AbilityCockEater)this.props;
+ }
+ }
+ public override void Apply(LocalTargetInfo target, LocalTargetInfo dest)
+ {
+ base.Apply(target, dest);
+ Pawn pawn = target.Pawn;
+ if (pawn == null)
+ {
+ return;
+ }
+ var partBPR = Genital_Helper.get_genitalsBPR(pawn);
+ var parts = Genital_Helper.get_PartsHediffList(pawn, partBPR);
+ if (!parts.NullOrEmpty())
+ {
+ foreach (Hediff part in parts)
+ {
+ if (GenitaliaChanger.IsArtificial(part))
+ continue;
+
+ if (rjw.Genital_Helper.is_penis(part))
+ {
+ GeneUtility.OffsetLifeForce(this.parent.pawn, part.Severity); ;
+ pawn.health.RemoveHediff(part);
+ pawn.needs.mood.thoughts.memories.TryGainMemory(ThoughtDefOf.rjw_genes_cock_eaten, pawn, null);
+ break; //Only one penis at the time
+ }
+ }
+
+ }
+ }
+
+ public override bool Valid(LocalTargetInfo target, bool throwMessages = false)
+ {
+ Pawn pawn = target.Pawn;
+ if (pawn != null)
+ {
+ bool flag = pawn.Faction == this.parent.pawn.Faction || pawn.IsPrisonerOfColony;
+ bool flag2 = pawn.HostileTo(this.parent.pawn);
+ bool flag3 = pawn.Downed;
+ if (!flag && !(flag2 && flag3))
+ {
+ if (throwMessages)
+ {
+ if(flag2 && !flag3)
+ {
+ Messages.Message(pawn.Name + " is hostile, but not downed.", pawn, MessageTypeDefOf.RejectInput, false);
+ }
+ else if (!flag)
+ {
+ Messages.Message(pawn.Name + " is not a part of the colony or hostile.", pawn, MessageTypeDefOf.RejectInput, false);
+ }
+ }
+ return false;
+ }
+ if (!Genital_Helper.has_penis_fertile(pawn))
+ {
+ if (throwMessages)
+ {
+ Messages.Message(pawn.Name + " has no penis", pawn, MessageTypeDefOf.RejectInput, false);
+ }
+ return false;
+ }
+ }
+ return base.Valid(target, throwMessages);
+ }
+ }
+}
diff --git a/Source/Genes/Life_Force/CompAbilityEffect_PussyHeal.cs b/Source/Genes/Life_Force/CompAbilityEffect_PussyHeal.cs
index 5ddb6af..009588d 100644
--- a/Source/Genes/Life_Force/CompAbilityEffect_PussyHeal.cs
+++ b/Source/Genes/Life_Force/CompAbilityEffect_PussyHeal.cs
@@ -38,6 +38,7 @@ namespace RJW_Genes
//FleckMaker.AttachedOverlay(pawn, FleckDefOf.FlashHollow, Vector3.zero, 1.5f, -1f);
}
+ //Not yet implemented, but the heal should also trigger after normal sex
public void AfterSex(Pawn pawn, Pawn target)
{
List hediffs = target.health.hediffSet.hediffs;
diff --git a/Source/Genes/Life_Force/CompProperties_AbilityCockEater.cs b/Source/Genes/Life_Force/CompProperties_AbilityCockEater.cs
new file mode 100644
index 0000000..b64b346
--- /dev/null
+++ b/Source/Genes/Life_Force/CompProperties_AbilityCockEater.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+using RimWorld;
+
+namespace RJW_Genes
+{
+ public class CompProperties_AbilityCockEater : CompProperties_AbilityEffect
+ {
+ public CompProperties_AbilityCockEater()
+ {
+ this.compClass = typeof(CompAbilityEffect_CockEater);
+ }
+ }
+}
diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj
index 1039e64..d7be4a7 100644
--- a/Source/Rjw-Genes.csproj
+++ b/Source/Rjw-Genes.csproj
@@ -116,6 +116,8 @@
+
+
@@ -144,6 +146,7 @@
+
diff --git a/Source/ThoughtDefOf.cs b/Source/ThoughtDefOf.cs
new file mode 100644
index 0000000..ccb7df3
--- /dev/null
+++ b/Source/ThoughtDefOf.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using RimWorld;
+using Verse;
+namespace RJW_Genes
+{
+ [DefOf]
+ public static class ThoughtDefOf
+ {
+ public static readonly ThoughtDef rjw_genes_cock_eaten;
+ }
+}