diff --git a/CHANGELOG.md b/CHANGELOG.md
index 660c671..9de9d2c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,14 @@
-<<<<<<< HEAD
+# 1.2
+
+Changes:
+
+- Cocoon Weaver Gene
+
+Fixes:
+
+- Cockeater Ability has now Icon of Cockeater Gene
+- Cockeater now leaves a bite wound!
+
# 1.1.4
Fixes:
diff --git a/Common/Defs/AbilityDefs/Ability_CockEater.xml b/Common/Defs/AbilityDefs/Ability_CockEater.xml
index d333c1d..f74e38c 100644
--- a/Common/Defs/AbilityDefs/Ability_CockEater.xml
+++ b/Common/Defs/AbilityDefs/Ability_CockEater.xml
@@ -4,7 +4,7 @@
rjw_genes_cockeater
Eat the cock of another pawn, restoring fertilin based on the size of the cock.
- Things/Mote/Heart
+ Genes/Icons/cockeater
true
true
false
@@ -27,8 +27,7 @@
-
-
+
\ No newline at end of file
diff --git a/Common/Defs/AbilityDefs/Ability_CocoonWeaver.xml b/Common/Defs/AbilityDefs/Ability_CocoonWeaver.xml
new file mode 100644
index 0000000..ae0858f
--- /dev/null
+++ b/Common/Defs/AbilityDefs/Ability_CocoonWeaver.xml
@@ -0,0 +1,32 @@
+
+
+
+ rjw_genes_cocoonweaver
+
+ Weaves the victim into a (self-sustaining) cocoon. The victim cannot move, but can be bred.
+ Things/Mote/Heart
+ true
+ true
+ false
+ Mote_CocoonStencil
+ CocoonWeave
+ CastAbilityOnThingMelee
+ 403
+
+ Verb_CastAbilityTouch
+ false
+ -1
+ 15
+
+ true
+ false
+ false
+ false
+ true
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Common/Defs/Effects/cocoonweave.xml b/Common/Defs/Effects/cocoonweave.xml
new file mode 100644
index 0000000..78b7963
--- /dev/null
+++ b/Common/Defs/Effects/cocoonweave.xml
@@ -0,0 +1,78 @@
+
+
+
+
+ CocoonWeave
+
+
+ SubEffecter_SprayerChance
+ Mote_WeaveA
+ 1
+ 0.05
+ 0.25~0.5
+ RandomDrawPosOnTarget
+ true
+
+
+ SubEffecter_SprayerChance
+ Mote_WeaveB
+ 1
+ 0.05
+ 0.25~0.5
+ RandomDrawPosOnTarget
+ true
+
+
+
+
+
+ MoteAttached
+ MoteOverhead
+
+ 0.45
+ 0.1
+ 0.2
+
+
+ Graphic_MoteWithAgeSecs
+ PawnSilhouetteStencilColorAnimated
+ (0.65, 0.65)
+
+ <_NumFrames>5
+ <_FramesPerSec>7.5
+
+
+
+
+
+ Mote_CocoonStencil
+ MoteAttached
+ Terrain
+
+ 0.1
+ 0.1
+ 999999
+ True
+
+
+ Graphic_PawnBodySilhouette
+ PawnSilhouetteStencil
+ Things/Mote/Transparent
+
+
+
+
+ Mote_WeaveA
+
+ Things/Mote/Cocoon/WeaveA
+
+
+
+
+ Mote_WeaveB
+
+ Things/Mote/Cocoon/WeaveB
+
+
+
+
\ No newline at end of file
diff --git a/Common/Defs/GeneDefs/GeneCategories.xml b/Common/Defs/GeneDefs/GeneCategories.xml
index 06b31cc..8106c8e 100644
--- a/Common/Defs/GeneDefs/GeneCategories.xml
+++ b/Common/Defs/GeneDefs/GeneCategories.xml
@@ -67,6 +67,11 @@
8
+
+ rjw_genes_hive
+
+ 7
+
\ No newline at end of file
diff --git a/Common/Defs/GeneDefs/GeneDefs_Hive.xml b/Common/Defs/GeneDefs/GeneDefs_Hive.xml
new file mode 100644
index 0000000..8b6ab1f
--- /dev/null
+++ b/Common/Defs/GeneDefs/GeneDefs_Hive.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ rjw_genes_cocoonweaver
+
+ cocooner
+ Carriers of this gene can produce a cocoon to prepare helpless victims for breeding.
+ Things/Mote/Heart
+ 11
+ rjw_genes_hive
+
+ rjw_genes_cocoonweaver
+
+
+ rjw_genes_cocoonweaver
+
+ 1
+ -1
+
+
+
\ No newline at end of file
diff --git a/Common/Textures/Things/Mote/Cocoon/WeaveA.psd b/Common/Textures/Things/Mote/Cocoon/WeaveA.psd
new file mode 100644
index 0000000..2328868
Binary files /dev/null and b/Common/Textures/Things/Mote/Cocoon/WeaveA.psd differ
diff --git a/Common/Textures/Things/Mote/Cocoon/WeaveB.psd b/Common/Textures/Things/Mote/Cocoon/WeaveB.psd
new file mode 100644
index 0000000..c1a852e
Binary files /dev/null and b/Common/Textures/Things/Mote/Cocoon/WeaveB.psd differ
diff --git a/Source/Genes/Hive/Abilities/CompAbilityEffect_CocoonWeaver.cs b/Source/Genes/Hive/Abilities/CompAbilityEffect_CocoonWeaver.cs
new file mode 100644
index 0000000..af362aa
--- /dev/null
+++ b/Source/Genes/Hive/Abilities/CompAbilityEffect_CocoonWeaver.cs
@@ -0,0 +1,81 @@
+using Verse;
+using RimWorld;
+using rjw;
+
+namespace RJW_Genes
+{
+ ///
+ /// The CocoonWeaver Ability applies the RJW-Cocoon to a pawn.
+ /// Friendly Pawns can always be cocooned, neutral and hostile pawns must be downed.
+ ///
+ public class CompAbilityEffect_CocoonWeaver : CompAbilityEffect
+ {
+ private new CompProperties_AbilityCocoonWeaver Props
+ {
+ get
+ {
+ return (CompProperties_AbilityCocoonWeaver)this.props;
+ }
+ }
+
+
+ public override void Apply(LocalTargetInfo target, LocalTargetInfo dest)
+ {
+ base.Apply(target, dest);
+
+ Pawn CocooningPawn = this.parent.pawn;
+ Pawn PawnToCocoon = target.Pawn;
+
+ // Error Case - Null Pawn
+ if (PawnToCocoon == null)
+ {
+ return;
+ }
+
+ PawnToCocoon.health.AddHediff(HediffDef.Named("RJW_Cocoon"));
+
+ }
+
+ ///
+ /// For validity, there are a few checks:
+ /// 0. Target is not already cocooned
+ /// 1. Target is either Colonist / Prisoner
+ /// 2. If the Target is an enemy or neutral, it must be downed.
+ ///
+ public override bool Valid(LocalTargetInfo target, bool throwMessages = false)
+ {
+ Pawn cocoonTarget = target.Pawn;
+ if (cocoonTarget != null)
+ {
+ bool CocoonTargetIsColonistOrPrisoner = cocoonTarget.Faction == this.parent.pawn.Faction || cocoonTarget.IsPrisonerOfColony;
+ bool CocoonTargetIsHostile = cocoonTarget.HostileTo(this.parent.pawn);
+ bool CocoonTargetIsDowned = cocoonTarget.Downed;
+
+ if (cocoonTarget.health.hediffSet.hediffs.Any(t => t.def.defName == "RJW_Cocoon"))
+ {
+ if (throwMessages)
+ Messages.Message(cocoonTarget.Name + " is already cocooned.", cocoonTarget, MessageTypeDefOf.RejectInput, false);
+ return false;
+ }
+
+ if (!CocoonTargetIsColonistOrPrisoner && !(CocoonTargetIsHostile && CocoonTargetIsDowned))
+ {
+ if (throwMessages)
+ {
+ if(CocoonTargetIsHostile && !CocoonTargetIsDowned)
+ {
+ Messages.Message(cocoonTarget.Name + " is hostile, but not downed.", cocoonTarget, MessageTypeDefOf.RejectInput, false);
+ }
+ else if (!CocoonTargetIsColonistOrPrisoner)
+ {
+ Messages.Message(cocoonTarget.Name + " is not a part of the colony or hostile.", cocoonTarget, MessageTypeDefOf.RejectInput, false);
+ }
+ }
+ return false;
+ }
+ }
+ return base.Valid(target, throwMessages);
+ }
+
+ }
+}
diff --git a/Source/Genes/Hive/Abilities/CompProperties_AbilityCocoonWeaver.cs b/Source/Genes/Hive/Abilities/CompProperties_AbilityCocoonWeaver.cs
new file mode 100644
index 0000000..e73d22d
--- /dev/null
+++ b/Source/Genes/Hive/Abilities/CompProperties_AbilityCocoonWeaver.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_AbilityCocoonWeaver : CompProperties_AbilityEffect
+ {
+ public CompProperties_AbilityCocoonWeaver()
+ {
+ this.compClass = typeof(CompAbilityEffect_CocoonWeaver);
+ }
+ }
+}
diff --git a/Source/Genes/Life_Force/Abilities/CompAbilityEffect_CockEater.cs b/Source/Genes/Life_Force/Abilities/CompAbilityEffect_CockEater.cs
index dc0f0fa..977c77b 100644
--- a/Source/Genes/Life_Force/Abilities/CompAbilityEffect_CockEater.cs
+++ b/Source/Genes/Life_Force/Abilities/CompAbilityEffect_CockEater.cs
@@ -51,9 +51,9 @@ namespace RJW_Genes
}
// Increase LifeForce for Biter
GeneUtility.OffsetLifeForce(GeneUtility.GetLifeForceGene(CockBiter), gained_lifeforce);
-
// Handle Damage for Bitten
- CockBittenPawn.health.RemoveHediff(part);
+ CockBittenPawn.TakeDamage(new DamageInfo(DamageDefOf.Bite, 99999f, 999f, hitPart: Genital_Helper.get_genitalsBPR(CockBittenPawn)));
+ //CockBittenPawn.health.RemoveHediff(part);
CockBittenPawn.needs.mood.thoughts.memories.TryGainMemory(ThoughtDefOf.rjw_genes_cock_eaten, CockBittenPawn, null);
//Only one penis at the time
diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj
index 29d14d9..dbb4495 100644
--- a/Source/Rjw-Genes.csproj
+++ b/Source/Rjw-Genes.csproj
@@ -87,6 +87,8 @@
+
+