From 0d15873bd2fa3c420246909071e624f3a19e4934 Mon Sep 17 00:00:00 2001 From: Shabakur Date: Wed, 28 Dec 2022 10:30:26 +0100 Subject: [PATCH] Healpussy gene and succubus wing retexture Brought over the healpussy gene from my mod and changed the succubus wings to a lighter version --- Common/Assemblies/Rjw-Genes.dll | Bin 52736 -> 60928 bytes Common/Defs/AbilityDefs/Ability_PussyHeal.xml | 47 ++++++ Common/Defs/Genes/GeneDefs_Cosmetic.xml | 2 +- Common/Defs/Genes/GeneDefs_LifeForce.xml | 24 +++ Common/Defs/JobDefs/Jobs_LifeForce.xml | 7 + .../Textures/Genes/Icons/Succubus_Wings.png | Bin 0 -> 1191 bytes .../Succubus_Wings_east.png | Bin 1342 -> 1263 bytes .../Succubus_Wings_north.png | Bin 1510 -> 1424 bytes .../Succubus_Wings_south.png | Bin 1510 -> 1424 bytes Source/GeneDefOf.cs | 1 + Source/Genes/GeneUtility.cs | 9 + Source/Genes/Life_Force/AbilityUtility.cs | 52 ++++++ .../Life_Force/CompAbilityEffect_PussyHeal.cs | 103 ++++++++++++ .../CompAbility_SexInteractionRequirements.cs | 155 ++++++++++++++++++ .../CompProperties_AbilityPussyHeal.cs | 20 +++ ...mpProperties_SexInteractionRequirements.cs | 25 +++ Source/Genes/Life_Force/Interactionchances.cs | 16 ++ .../JobDriver_CastAbilityAfterSex.cs | 90 ++++++++++ Source/Rjw-Genes.csproj | 7 + 19 files changed, 557 insertions(+), 1 deletion(-) create mode 100644 Common/Defs/AbilityDefs/Ability_PussyHeal.xml create mode 100644 Common/Textures/Genes/Icons/Succubus_Wings.png create mode 100644 Source/Genes/Life_Force/AbilityUtility.cs create mode 100644 Source/Genes/Life_Force/CompAbilityEffect_PussyHeal.cs create mode 100644 Source/Genes/Life_Force/CompAbility_SexInteractionRequirements.cs create mode 100644 Source/Genes/Life_Force/CompProperties_AbilityPussyHeal.cs create mode 100644 Source/Genes/Life_Force/CompProperties_SexInteractionRequirements.cs create mode 100644 Source/Genes/Life_Force/Interactionchances.cs create mode 100644 Source/Genes/Life_Force/JobDriver_CastAbilityAfterSex.cs diff --git a/Common/Assemblies/Rjw-Genes.dll b/Common/Assemblies/Rjw-Genes.dll index df5976d4d0ea45ad8130c51a1c40adbb3ec99c5e..706a831d22d0ea76c59f003a59e2540c856c831d 100644 GIT binary patch literal 60928 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 AS^xk5 diff --git a/Common/Defs/AbilityDefs/Ability_PussyHeal.xml b/Common/Defs/AbilityDefs/Ability_PussyHeal.xml new file mode 100644 index 0000000..6837a39 --- /dev/null +++ b/Common/Defs/AbilityDefs/Ability_PussyHeal.xml @@ -0,0 +1,47 @@ + + + + rjw_genes_pussyheal + + Rape another pawn, so you can heal them with your vagina's special healing power. + Things/Mote/Heart + false + true + false + 60000 + Mote_CoagulateStencil + Coagulate + Coagulate_Cast + rjw_genes_lifeforce_healpussy + 401 + + Verb_CastAbilityTouch + false + -1 + 0 + + true + false + false + false + true + + + +
  • + 0.4~0.8 +
  • +
  • + + +
  • Rape
  • + + + +
  • Vagina
  • +
    +
    + +
    +
    +
    \ No newline at end of file diff --git a/Common/Defs/Genes/GeneDefs_Cosmetic.xml b/Common/Defs/Genes/GeneDefs_Cosmetic.xml index acff4a5..5a65039 100644 --- a/Common/Defs/Genes/GeneDefs_Cosmetic.xml +++ b/Common/Defs/Genes/GeneDefs_Cosmetic.xml @@ -18,7 +18,7 @@ rjw_genes_Succubus_Wings Carriers of this gene grow succubus wings. - UI/Icons/Genes/Gene_TailFurry + Genes/Icons/Succubus_Wings (0.75, 0.75, 0.75) 1000 1 diff --git a/Common/Defs/Genes/GeneDefs_LifeForce.xml b/Common/Defs/Genes/GeneDefs_LifeForce.xml index 1428ec2..69db900 100644 --- a/Common/Defs/Genes/GeneDefs_LifeForce.xml +++ b/Common/Defs/Genes/GeneDefs_LifeForce.xml @@ -33,4 +33,28 @@ 1 1 + + + rjw_genes_pussyhealer + + pussyhealer + Carriers of this gene are able use vaginal sex to tend to other's wounds. + Things/Mote/Heart + Ability + +
  • rjw_genes_pussyheal
  • +
    + + rjw_genes_pussyheal + + 1 + 13 + + +
  • life
  • +
  • clotter
  • +
  • tender
  • +
    +
    +
    \ No newline at end of file diff --git a/Common/Defs/JobDefs/Jobs_LifeForce.xml b/Common/Defs/JobDefs/Jobs_LifeForce.xml index 274ade7..babb547 100644 --- a/Common/Defs/JobDefs/Jobs_LifeForce.xml +++ b/Common/Defs/JobDefs/Jobs_LifeForce.xml @@ -7,4 +7,11 @@ Raping false + + + rjw_genes_lifeforce_healpussy + RJW_Genes.JobDriver_CastAbilityAfterSex + Healing someone with sex. + false + \ No newline at end of file diff --git a/Common/Textures/Genes/Icons/Succubus_Wings.png b/Common/Textures/Genes/Icons/Succubus_Wings.png new file mode 100644 index 0000000000000000000000000000000000000000..5ca976fcd5550ed276e37c5d66619867771e7cb3 GIT binary patch literal 1191 zcmZ8gdrVVj6u<4dxr;*(n4+@;1!ZCQm^vQDp1NR6KEwJRHV`eyCnO=>`TsfzVkaL=gaRrib%vT zTbtcB007t$!b4&Zowq5UeuCVcr&D_ng<`~n1p)Q&o<+pKqykETa$Js=5$dP+DEy3P_hu#a>Qe7IblH zFBW#yMfiyH{b8cvL#1_paZF9UJXkgE#>LhWFJ8Cee>_1?fAgg=_ZXqL0{QF1^TTwE zbGQA5@jvW{WA58=O*tvFVTK@L2V-yc2=|fQJF*=`8gP{?dOUbr^#IeIv<;-W4O4}e z>WS}nUW$Jyv^>u!Om;;b^?iY9*`-yH*oCcoE;$P9`vjRyIhh*8l&uW@Y_@4X67e&p zpCFMpGdWp&?3MG8p~{}>WU_-RLxE3}H8;DQo1C1qOzThRuM!}$)G~u(jZh&uEf4?lt|Gm=i zy?emx9n3f?m1@!}vzW}|6V%e=7mQ^Lh`icpXycxsKDTRkE2l9xj(?H$X$!I{hw4SeMh$3RwQu|Qpsw1zs6AM2k95NjnHMv!N;lm%v#K0Apt`n61EW6i zdeUlQpeO2pC0CeHKpD`{4-N~2%zUK4ehvZcp@}E6J|6{eo$LbKqj3z)G(z_-)cSJD zFxHkR(A97zzZg>qBFS$jeI#-_ynednD9Q#~!{IjAulUEZbJvW<4RdyZ#mffF8{>tc zyZBS9Uq^tXg#`A-i}ibWjrCcowuMzP?UHilRx!+W(sD`VuFF(!v6h96pUCmOdrsFC zwJXI=NJhxMrlS+KI4LD(=O-HF7B0m4&15mqLFwgA$Xrx1)b2T8X#T3~RU<5$Sxb4< zEWSI|sB?PNsB;+axBR-tM`F-v788^^m63M<-WPLVHJmJ^=fvNOD173hj)HzF#>L=k zIWET$I^Qwo`qMS<#MzKSr`5&ri&}^MVZG9yXd*BD?ag`;gfu4-oR$;cc}rKQvEk_U zrF4AV!#P{*=B#?;we_ji=Cr+Agf0cR@*sy&z_|fIjT{Nj6gDP5zZZ4n+US_io88Zj t$%+3|-T|Eb_5*(epg-K=|GnSBgM)16%+PspgkRyNj}S@>sSmo4|1U%$J*EHv literal 0 HcmV?d00001 diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Wings/Succubus_Wings_east.png b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Wings/Succubus_Wings_east.png index 19ecc3e26357ef0e13191b76cf7d11e920326e60..71e3f532595ee4e5871eabb4d35131936e38705f 100644 GIT binary patch delta 1199 zcmV;g1W^0F3hxP!B!3BTNLh0L01FZT01FZU(%pXi000D`NklCpty1`xOStUG7JR4t=j=z=)#4Mq+4Tk zoon6V=B844bd?hG|3P)7Dz_>o=iEotEm|o600000000000Fw&^5P#5iJkQJ2Dgyu& zes{J#XF)4lU0qd&hlk(x_xE$buFhbwxk0bC{1=q}>My@3w1$n14KqIYBUrzvm_VPN zp6Vs8OvHj3K5CFAwOs=KufO~)J4Q!GRcB|X+S}WUJuu4r{Jgy>->J)Aengjs?V}Pv z=o&gaJgg254r-MRy??&G>a~A`p}Ugf<74xd`7Y88JVhLe2&pH)&dyF|XlTe=Sy?f= z!lv18(!+AOTuwbdKZn~AXbJMe!-HC0URDiC{d;{D?!YS*ZtzXu$H&K2Z*Q*-^zH4f z>gnmxU4gBmqeIn6nuctxLMZp1HAM&i=H^BX4i4%XFCHHsRexV!pWc3Xd8s%klgX%) zlaq@5!s`3q^LuHT!mCWMnv>&+FieQmLe}*{lw*&F&Vei5T>uNooFga_(+_ zDagkC{k^W~67aLLv$7yIG7yXizPX}66Vglop_~0ep`g0EyVc#@otmAURhO5SVS##T zyg|)RUh0ED34gE*_O7n3D)#>Zf}fBy6Tn+oSa55t<_3RmZceYIYpBLL&zGu&(6F>> zQsiw|JMbpxMqKb07Z<}DK!LRW?zU6+MRp_1wYxv)3upCA@FnnW@M|%_pPHJgQ4)4bLR0o0bPqn_jT0+#*J(w9oS)ZSu%Vp(1PfyJMG$YNylqdK24fp1c zX&KxWz)k@BJ@;5!S65fx%*>3=fTg9Sj*E*6@A~?hR-q1QwE$&5zH_@*HoUE^E!7AK zx=8{%8GqK+*48H{CyV)fJ~J>dpr0uy7K>_ods}U8Zkl5HGb>JtR9XQ2Lz~)f1>gRx zvROe}wHCmLy075-+TY**FflPvnx3APGT!d)u6J~F6jc_M)Dpn1v8wWOA`_sIdjk>Y z?p1G7!s6L_ZOaAkA&~S{K-kPSGga%i7O(yi`F|*vn;eonP6ElK)AwKrgYT3{`un!L zB!7^y@r3`wo7uqFa)zHUQZwc6$@)p~J*rGSR|qbr%ZNO0J40r`lilhzO)|pvHC#|8O=NUWKOvdl$Z5mu*mrc zeiM>RfM!WxbE=X&J63S^y$1X21VW3F+WjL~_r#QupqHw=j}}(%M2=mi-Yy1p`lv3T zD_Bcl|BNfB2>Pex)_wxrW+eFT{{w(FQUj~+2a^E>B$E&Y1sG^)KLNmijMybd+^GNn N002ovPDHLkV1fhHT8jVx delta 1268 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 diff --git a/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Wings/Succubus_Wings_south.png b/Common/Textures/Things/Pawn/Humanlike/BodyAttachments/rjw_genes_Succubus_Wings/Succubus_Wings_south.png index 92c4a01194f511c25abb0abd2f8dd6a7f81aae2e..331add5d2fe29b7ec9f7a9c9c9eb625d40cf1b10 100644 GIT binary patch delta 1298 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 diff --git a/Source/GeneDefOf.cs b/Source/GeneDefOf.cs index 726bb53..5ac85dd 100644 --- a/Source/GeneDefOf.cs +++ b/Source/GeneDefOf.cs @@ -74,5 +74,6 @@ namespace RJW_Genes // LifeForce public static readonly GeneDef rjw_genes_lifeforce; + public static readonly GeneDef rjw_genes_pussyhealer; } } diff --git a/Source/Genes/GeneUtility.cs b/Source/Genes/GeneUtility.cs index 3bea9a6..0a8d571 100644 --- a/Source/Genes/GeneUtility.cs +++ b/Source/Genes/GeneUtility.cs @@ -102,5 +102,14 @@ namespace RJW_Genes } return pawn.genes.HasGene(GeneDefOf.rjw_genes_generous_donor); } + + public static bool isPussyHealer(Pawn pawn) + { + if (pawn.genes == null) + { + return false; + } + return pawn.genes.HasGene(GeneDefOf.rjw_genes_pussyhealer); + } } } \ No newline at end of file diff --git a/Source/Genes/Life_Force/AbilityUtility.cs b/Source/Genes/Life_Force/AbilityUtility.cs new file mode 100644 index 0000000..896694e --- /dev/null +++ b/Source/Genes/Life_Force/AbilityUtility.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse.Sound; +using Verse; +using RimWorld; +using rjw; +using rjw.Modules.Interactions.Helpers; +using rjw.Modules.Interactions.Enums; + +namespace RJW_Genes +{ + public class AbilityUtility + { + public static void PussyHeal(SexProps props) + { + if (InteractionHelper.GetWithExtension(props.dictionaryKey).DominantHasFamily(GenitalFamily.Vagina) || InteractionHelper.GetWithExtension(props.dictionaryKey).SubmissiveHasFamily(GenitalFamily.Vagina)) + { + Pawn pawn = props.pawn; + Pawn partner = props.partner; + FloatRange tendQualityRange; + tendQualityRange.min = 0.4f; + tendQualityRange.max = 0.8f; + if (GeneUtility.isPussyHealer(pawn)) + { + Heal(partner, tendQualityRange); + } + if (GeneUtility.isPussyHealer(partner)) + { + Heal(pawn, tendQualityRange); + } + } + } + + public static bool Heal(Pawn pawn, FloatRange tendQualityRange) + { + bool any_wound_tended = false; + List hediffs = pawn.health.hediffSet.hediffs; + for (int i = hediffs.Count - 1; i >= 0; i--) + { + if ((hediffs[i] is Hediff_Injury || hediffs[i] is Hediff_MissingPart) && hediffs[i].TendableNow(false)) + { + hediffs[i].Tended(tendQualityRange.RandomInRange, tendQualityRange.TrueMax, 1); + any_wound_tended = true; + } + } + return any_wound_tended; + } + } +} \ No newline at end of file diff --git a/Source/Genes/Life_Force/CompAbilityEffect_PussyHeal.cs b/Source/Genes/Life_Force/CompAbilityEffect_PussyHeal.cs new file mode 100644 index 0000000..5ddb6af --- /dev/null +++ b/Source/Genes/Life_Force/CompAbilityEffect_PussyHeal.cs @@ -0,0 +1,103 @@ +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_PussyHeal : CompAbilityEffect + { + private new CompProperties_AbilityPussyHeal Props + { + get + { + return (CompProperties_AbilityPussyHeal)this.props; + } + } + public override void Apply(LocalTargetInfo target, LocalTargetInfo dest) + { + base.Apply(target, dest); + Pawn pawn = target.Pawn; + if (pawn == null) + { + return; + } + bool any_wound_tended = AbilityUtility.Heal(pawn, this.Props.tendQualityRange); + if (any_wound_tended) + { + MoteMaker.ThrowText(pawn.DrawPos, pawn.Map, "Sex healed wounds", 3.65f); + //pawn.needs.mood.thoughts.memories.TryGainMemory(ThoughtDefOf.Pussy_Healed, pawn, null); + } + //this.AfterSex(any_wound_tended); + //FleckMaker.AttachedOverlay(pawn, FleckDefOf.FlashHollow, Vector3.zero, 1.5f, -1f); + } + + public void AfterSex(Pawn pawn, Pawn target) + { + List hediffs = target.health.hediffSet.hediffs; + for (int i = 0; i < hediffs.Count; i++) + { + if ((hediffs[i] is Hediff_Injury || hediffs[i] is Hediff_MissingPart) && hediffs[i].TendableNow(false)) + { + //target.needs.mood.thoughts.memories.TryGainMemory(ThoughtDefOf.Pussy_Healed, pawn, null); + break; + } + } + //InteractionHelper.GetWithExtension(dictionaryKey).DominantHasTag("CanBePenetrated") + + + } + + public override bool Valid(LocalTargetInfo target, bool throwMessages = false) + { + Pawn pawn = target.Pawn; + if (pawn != null) + { + //to be replaced with severel checks to make it clear why target is unable to have sex + if (!CasualSex_Helper.CanHaveSex(pawn)) + { + if (throwMessages) + { + Messages.Message(pawn.Name + " is unable to have sex", pawn, MessageTypeDefOf.RejectInput, false); + } + return false; + } + else if (pawn.IsAnimal() && !RJWSettings.bestiality_enabled) + { + if (throwMessages) + { + Messages.Message("bestiality is disabled", pawn, MessageTypeDefOf.RejectInput, false); + } + return false; + } + //AbilityUtility.ValidateHasTendableWound(pawn, throwMessages, this.parent); + + } + return base.Valid(target, throwMessages); + } + + public override bool GizmoDisabled(out string reason) + { + reason = null; + if (!Genital_Helper.has_vagina(this.parent.pawn)) + { + reason = this.parent.pawn.Name + " has no vagina to use."; + return true; + } + else if (!RJWSettings.rape_enabled) + { + reason = "Rape is disabled"; + return true; + } + return false; + } + + + } +} diff --git a/Source/Genes/Life_Force/CompAbility_SexInteractionRequirements.cs b/Source/Genes/Life_Force/CompAbility_SexInteractionRequirements.cs new file mode 100644 index 0000000..5e926c5 --- /dev/null +++ b/Source/Genes/Life_Force/CompAbility_SexInteractionRequirements.cs @@ -0,0 +1,155 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; +using RimWorld; +using rjw; +using rjw.Modules.Interactions.Objects; +using rjw.Modules.Interactions.Helpers; +using rjw.Modules.Interactions.Enums; +using rjw.Modules.Interactions.Implementation; +using rjw.Modules.Interactions.Defs.DefFragment; +namespace RJW_Genes +{ + public class CompAbility_SexInteractionRequirements : AbilityComp + { + public CompProperties_SexInteractionRequirements Props + { + get + { + return (CompProperties_SexInteractionRequirements)this.props; + } + } + + public static List GenerateInteractionDefList(Pawn pawn, Pawn pawn2, CompProperties_SexInteractionRequirements sexpropsreq) + { + List tags = new List(); + if (pawn2.IsAnimal()) + { + tags.Add(InteractionTag.Animal); + + } + else + { + tags = sexpropsreq.tags; + } + + InteractionRequirement dominantRequirement = sexpropsreq.dominantRequirement; + InteractionRequirement submissiveRequirement = sexpropsreq.submissiveRequirement; + List sexinteractions = SexUtility.SexInterractions; + List list = new List(); + //List a = from interaction in sexinteractions + //where InteractionHelper.GetWithExtension(interaction).DominantHasFamily(dominantRequirement.families.) + // select interaction; + + //should use where select but dont fully understand that, so I am using this. + foreach (InteractionDef interactionDef in SexUtility.SexInterractions) + { + //Use rjw function to check if the interaction would be valid + if (!LewdInteractionValidatorService.Instance.IsValid(interactionDef, pawn, pawn2)) + { + continue; + } + InteractionWithExtension withExtension = InteractionHelper.GetWithExtension(interactionDef); + bool add_interaction = false; + //only add interactions which have a correct tag + foreach (InteractionTag tag in tags) + { + if (withExtension.HasInteractionTag(tag)) + { + add_interaction = true; + break; + } + } + //In case of failure go to next interaction + if (!add_interaction) + { + continue; + } + //goes to next interaction if it doesn't have the required genitals + if (dominantRequirement != null) + { + foreach (GenitalFamily genitalFamily in dominantRequirement.families) + { + if (!withExtension.DominantHasFamily(genitalFamily)) + { + add_interaction = false; + break; + + } + } + if (!add_interaction) + { + continue; + } + foreach (GenitalTag tag in dominantRequirement.tags) + { + if (!withExtension.DominantHasTag(tag)) + { + add_interaction = false; + break; + + } + } + } + //goes to next interaction if it doesn't have the required genitals + if (submissiveRequirement != null) + { + foreach (GenitalFamily genitalFamily in submissiveRequirement.families) + { + if (!withExtension.SubmissiveHasFamily(genitalFamily)) + { + add_interaction = false; + break; + + } + } + if (!add_interaction) + { + continue; + } + foreach (GenitalTag tag in submissiveRequirement.tags) + { + if (!withExtension.SubmissiveHasTag(tag)) + { + add_interaction = false; + break; + + } + + } + } + if (add_interaction) + { + list.Add(interactionDef); + } + + } + return list; + } + + //Generates a valid interaction for the requirements and assigns sexprops based on that + public static SexProps GenerateSexProps(Pawn pawn, Pawn pawn2, CompProperties_SexInteractionRequirements sexpropsreq) + { + List interactionlist = GenerateInteractionDefList(pawn, pawn2, sexpropsreq); + if (!interactionlist.Any()) + { + return null; + } + InteractionDef dictionaryKey = interactionlist.RandomElement(); + bool rape = InteractionHelper.GetWithExtension(dictionaryKey).HasInteractionTag(InteractionTag.Rape); + SexProps sexProps = new SexProps(); + sexProps.pawn = pawn; + sexProps.partner = pawn2; + sexProps.sexType = SexUtility.rjwSextypeGet(dictionaryKey); + sexProps.isRape = rape; + sexProps.isRapist = rape; + sexProps.canBeGuilty = false; + sexProps.dictionaryKey = dictionaryKey; + sexProps.rulePack = SexUtility.SexRulePackGet(dictionaryKey); + return sexProps; + } + } +} diff --git a/Source/Genes/Life_Force/CompProperties_AbilityPussyHeal.cs b/Source/Genes/Life_Force/CompProperties_AbilityPussyHeal.cs new file mode 100644 index 0000000..16ba74d --- /dev/null +++ b/Source/Genes/Life_Force/CompProperties_AbilityPussyHeal.cs @@ -0,0 +1,20 @@ +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_AbilityPussyHeal : CompProperties_AbilityEffect + { + public CompProperties_AbilityPussyHeal() + { + this.compClass = typeof(CompAbilityEffect_PussyHeal); + } + + public FloatRange tendQualityRange; + } +} diff --git a/Source/Genes/Life_Force/CompProperties_SexInteractionRequirements.cs b/Source/Genes/Life_Force/CompProperties_SexInteractionRequirements.cs new file mode 100644 index 0000000..3756d7b --- /dev/null +++ b/Source/Genes/Life_Force/CompProperties_SexInteractionRequirements.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; +using RimWorld; +using rjw; +using rjw.Modules.Interactions.Defs.DefFragment; +using rjw.Modules.Interactions.Enums; + +namespace RJW_Genes +{ + public class CompProperties_SexInteractionRequirements : AbilityCompProperties + { + public CompProperties_SexInteractionRequirements() + { + this.compClass = typeof(CompAbility_SexInteractionRequirements); + } + + public List tags = new List(); + public InteractionRequirement dominantRequirement; + public InteractionRequirement submissiveRequirement; + } +} diff --git a/Source/Genes/Life_Force/Interactionchances.cs b/Source/Genes/Life_Force/Interactionchances.cs new file mode 100644 index 0000000..fd7a43d --- /dev/null +++ b/Source/Genes/Life_Force/Interactionchances.cs @@ -0,0 +1,16 @@ +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 Interaction_weights + { + public InteractionDef interaction; + public int weight = 1; + + } +} diff --git a/Source/Genes/Life_Force/JobDriver_CastAbilityAfterSex.cs b/Source/Genes/Life_Force/JobDriver_CastAbilityAfterSex.cs new file mode 100644 index 0000000..7198890 --- /dev/null +++ b/Source/Genes/Life_Force/JobDriver_CastAbilityAfterSex.cs @@ -0,0 +1,90 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using RimWorld; +using Verse; +using Verse.AI; +using rjw; + +namespace RJW_Genes +{ + public class JobDriver_CastAbilityAfterSex : JobDriver_SexBaseInitiator + { + //Summary// + //Similar to jobdriver rape, but it cast an ability after sex and tries to limit what kind of sexinteractions are allowed. + protected override IEnumerable MakeNewToils() + { + base.setup_ticks(); + //this.FailOnDespawnedOrNull(TargetIndex.A); + //this.FailOnCannotTouch(TargetIndex.B, PathEndMode.OnCell); + this.FailOnDespawnedNullOrForbidden(this.iTarget); + //this.FailOn(() => !target.health.capacities.CanBeAwake); + JobDef PartnerJob = xxx.gettin_raped; + yield return Toils_Goto.Goto(TargetIndex.A, PathEndMode.OnCell); + yield return new Toil + { + defaultCompleteMode = ToilCompleteMode.Instant, + socialMode = RandomSocialMode.Off, + initAction = delegate () + { + Job newJob = JobMaker.MakeJob(PartnerJob, this.pawn, this.Partner); + this.Partner.jobs.StartJob(newJob, JobCondition.InterruptForced, null, false, true, null, null, false, false, null, false, true); + } + }; + Toil toil = new Toil(); + toil.defaultCompleteMode = ToilCompleteMode.Never; + toil.socialMode = RandomSocialMode.Off; + toil.defaultDuration = this.duration; + toil.handlingFacing = true; + toil.FailOn(() => this.Partner.CurJob.def != PartnerJob); + toil.initAction = delegate () + { + this.Partner.pather.StopDead(); + this.Partner.jobs.curDriver.asleep = false; + + //Tries to find CompProperties_SexInteractionRequirements and if it finds it it will try and generate sexprops based on the sexpropsrequirements. + foreach (AbilityComp comp in this.job.ability.comps) + { + if (comp.props is CompProperties_SexInteractionRequirements) + { + CompProperties_SexInteractionRequirements sexpropsreq = comp.props as CompProperties_SexInteractionRequirements; + this.Sexprops = CompAbility_SexInteractionRequirements.GenerateSexProps(this.pawn, this.Partner, sexpropsreq); + } + } + this.Start(); + this.Sexprops.usedCondom = (CondomUtility.TryUseCondom(this.pawn) || CondomUtility.TryUseCondom(this.Partner)); + }; + toil.AddPreTickAction(delegate + { + if (this.pawn.IsHashIntervalTick(this.ticks_between_hearts)) + { + this.ThrowMetaIconF(this.pawn.Position, this.pawn.Map, FleckDefOf.Heart); + } + this.SexTick(this.pawn, this.Partner, true, true); + SexUtility.reduce_rest(this.Partner, 1f); + SexUtility.reduce_rest(this.pawn, 1f); + if (this.ticks_left <= 0) + { + this.ReadyForNextToil(); + } + }); + toil.AddFinishAction(delegate + { + this.End(); + }); + yield return toil; + yield return new Toil + { + initAction = delegate () + { + SexUtility.ProcessSex(this.Sexprops); + }, + defaultCompleteMode = ToilCompleteMode.Instant + }; + yield return Toils_Combat.CastVerb(TargetIndex.A, TargetIndex.B, false); + yield break; + } + } +} diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj index 3f24101..26c21bf 100644 --- a/Source/Rjw-Genes.csproj +++ b/Source/Rjw-Genes.csproj @@ -114,7 +114,14 @@ + + + + + + +