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