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