From b709cab584647172063a03999b362d9560a3b674 Mon Sep 17 00:00:00 2001 From: moreoreganostodump Date: Sat, 14 Aug 2021 00:23:12 +0900 Subject: [PATCH] 1.0.1.8 --- About/Manifest.xml | 2 +- Assemblies/RJWSexperience.dll | Bin 46592 -> 59904 bytes Defs/JobDefs/Jobs_Ritual_Rape.xml | 10 - Defs/ThingDefs/Buildings_Cum.xml | 61 ++++ Defs/ThingDefs/Items_Resource_Cum.xml | 122 ++++++- Languages/English/Keyed/RJW_Sexperience.xml | 1 + LoadFolders.xml | 7 + Patches/RJW_StatDefs.xml | 3 - RJWSexperience/RJWSexperience/Buildings.cs | 51 +++ .../RJWSexperience/Ideology/RJW_Patch_Ideo.cs | 343 ++++++++++++++++++ RJWSexperience/RJWSexperience/Keyed.cs | 1 + .../RJWSexperience/PawnRelationWorkers.cs | 13 +- .../RJWSexperience/RJWSexperience.csproj | 3 + RJWSexperience/RJWSexperience/RJW_Patch.cs | 336 +---------------- .../RJWSexperience/Rimworld_Patch.cs | 2 + .../Rituals/JobGiver_DrugOrgy.cs | 279 ++++++++++++++ .../RJWSexperience/Rituals/RitualRoles.cs | 10 +- .../RJWSexperience/Thought_Recordbased.cs | 9 + RJWSexperience/RJWSexperience/Utility.cs | 78 ++++ RJWSexperience/RJWSexperience/VariousDefOf.cs | 54 +++ .../Defs}/DutyDefs/Duties_Rituals_sex.xml | 25 +- .../Defs}/Goodwill/MemeCompatibility_Sex.xml | 17 + .../Interactions_Speech_sex.xml | 0 .../Defs/JobDefs/Jobs_Ritual_Sex.xml | 31 ++ .../Defs}/MemeDefs/Memes_Sexual.xml | 89 +++++ .../PreceptDefs/Precepts_BabyFaction.xml | 0 .../Defs}/PreceptDefs/Precepts_Bestiality.xml | 0 .../PreceptDefs/Precepts_Buildings_sex.xml | 85 +++++ .../Defs}/PreceptDefs/Precepts_Incest.xml | 0 .../Defs/PreceptDefs/Precepts_Necrophilia.xml | 291 +++++++++++++++ .../Defs}/PreceptDefs/Precepts_Rape.xml | 0 .../Defs}/PreceptDefs/Precepts_Ritual_sex.xml | 22 ++ .../Defs}/PreceptDefs/Precepts_Sex.xml | 0 .../PreceptDefs/Precepts_SocialAffection.xml | 0 .../Defs}/PreceptDefs/Precepts_Submissive.xml | 0 .../RitualPatternDefs/RitualPatterns_sex.xml | 15 +- .../PreconfiguredIdeos/IdeoPresetDefs_sex.xml | 0 .../Defs}/Rituals/Ritual_Behaviors_sex.xml | 27 +- .../Defs}/Rituals/Ritual_Outcomes_sex.xml | 75 +++- .../Defs}/Rituals/Ritual_Targets_sex.xml | 8 + .../Defs/ThingDefs/Buildings_Ideo_sex.xml | 134 +++++++ .../Thoughts_Ritual_sex_Quality.xml | 55 +++ RJWSexperience_Ideology/Patches/RJW_Drugs.xml | 47 +++ .../Patches/RJW_Precepts.xml | 29 ++ .../Patches/RJW_StatDefs_Ideo.xml | 14 + .../Patches}/RJW_ThoughtDefs.xml | 0 .../Patches}/RJW_ThoughtDefsDeath.xml | 0 .../Patches}/RJW_ThoughtDefsLost.xml | 0 Textures/Things/Item/CumBucket.png | Bin 0 -> 5253 bytes Textures/UI/Issues/Necrophilia.png | Bin 0 -> 8642 bytes Textures/UI/Memes/Necrophile.png | Bin 0 -> 9010 bytes changelogs.txt | 14 + 52 files changed, 2003 insertions(+), 360 deletions(-) delete mode 100644 Defs/JobDefs/Jobs_Ritual_Rape.xml create mode 100644 Defs/ThingDefs/Buildings_Cum.xml create mode 100644 LoadFolders.xml create mode 100644 RJWSexperience/RJWSexperience/Buildings.cs create mode 100644 RJWSexperience/RJWSexperience/Ideology/RJW_Patch_Ideo.cs create mode 100644 RJWSexperience/RJWSexperience/Rituals/JobGiver_DrugOrgy.cs rename {Defs => RJWSexperience_Ideology/Defs}/DutyDefs/Duties_Rituals_sex.xml (59%) rename {Defs => RJWSexperience_Ideology/Defs}/Goodwill/MemeCompatibility_Sex.xml (61%) rename {Defs => RJWSexperience_Ideology/Defs}/InteractionDefs/Interactions_Speech_sex.xml (100%) create mode 100644 RJWSexperience_Ideology/Defs/JobDefs/Jobs_Ritual_Sex.xml rename {Defs => RJWSexperience_Ideology/Defs}/MemeDefs/Memes_Sexual.xml (72%) rename {Defs => RJWSexperience_Ideology/Defs}/PreceptDefs/Precepts_BabyFaction.xml (100%) rename {Defs => RJWSexperience_Ideology/Defs}/PreceptDefs/Precepts_Bestiality.xml (100%) create mode 100644 RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Buildings_sex.xml rename {Defs => RJWSexperience_Ideology/Defs}/PreceptDefs/Precepts_Incest.xml (100%) create mode 100644 RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Necrophilia.xml rename {Defs => RJWSexperience_Ideology/Defs}/PreceptDefs/Precepts_Rape.xml (100%) rename {Defs => RJWSexperience_Ideology/Defs}/PreceptDefs/Precepts_Ritual_sex.xml (69%) rename {Defs => RJWSexperience_Ideology/Defs}/PreceptDefs/Precepts_Sex.xml (100%) rename {Defs => RJWSexperience_Ideology/Defs}/PreceptDefs/Precepts_SocialAffection.xml (100%) rename {Defs => RJWSexperience_Ideology/Defs}/PreceptDefs/Precepts_Submissive.xml (100%) rename {Defs => RJWSexperience_Ideology/Defs}/PreceptDefs/RitualPatternDefs/RitualPatterns_sex.xml (71%) rename {Defs => RJWSexperience_Ideology/Defs}/PreconfiguredIdeos/IdeoPresetDefs_sex.xml (100%) rename {Defs => RJWSexperience_Ideology/Defs}/Rituals/Ritual_Behaviors_sex.xml (92%) rename {Defs => RJWSexperience_Ideology/Defs}/Rituals/Ritual_Outcomes_sex.xml (73%) rename {Defs => RJWSexperience_Ideology/Defs}/Rituals/Ritual_Targets_sex.xml (50%) create mode 100644 RJWSexperience_Ideology/Defs/ThingDefs/Buildings_Ideo_sex.xml rename {Defs => RJWSexperience_Ideology/Defs}/ThoughtDefs/Thoughts_Ritual_sex_Quality.xml (51%) create mode 100644 RJWSexperience_Ideology/Patches/RJW_Drugs.xml create mode 100644 RJWSexperience_Ideology/Patches/RJW_Precepts.xml create mode 100644 RJWSexperience_Ideology/Patches/RJW_StatDefs_Ideo.xml rename {Patches => RJWSexperience_Ideology/Patches}/RJW_ThoughtDefs.xml (100%) rename {Patches => RJWSexperience_Ideology/Patches}/RJW_ThoughtDefsDeath.xml (100%) rename {Patches => RJWSexperience_Ideology/Patches}/RJW_ThoughtDefsLost.xml (100%) create mode 100644 Textures/Things/Item/CumBucket.png create mode 100644 Textures/UI/Issues/Necrophilia.png create mode 100644 Textures/UI/Memes/Necrophile.png diff --git a/About/Manifest.xml b/About/Manifest.xml index d2b2963..f0ae67b 100644 --- a/About/Manifest.xml +++ b/About/Manifest.xml @@ -1,7 +1,7 @@ RJW Sexperience - 1.0.1.7 + 1.0.1.8 diff --git a/Assemblies/RJWSexperience.dll b/Assemblies/RJWSexperience.dll index 3db0243e1978acbe24d7cc253874499369230a65..2eae33b9c6472717a27c53989d8f4d2cf160c9d6 100644 GIT binary patch literal 59904 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 P!vD4!{zvft!5a8qsNC - - - - RapeVictim - RJWSexperience.JobDriver_RapeVictim - rapin' victim - false - - \ No newline at end of file diff --git a/Defs/ThingDefs/Buildings_Cum.xml b/Defs/ThingDefs/Buildings_Cum.xml new file mode 100644 index 0000000..b79b5b6 --- /dev/null +++ b/Defs/ThingDefs/Buildings_Cum.xml @@ -0,0 +1,61 @@ + + + + + CumBucket + + A bucket for collecting cums. + RJWSexperience.Building_CumBucket + + Things/Item/CumBucket + Graphic_Multi + (1,1) + + Building + PassThroughOnly + 0.4 + true + 50 + false + +
  • Metallic
  • +
  • Woody
  • +
  • Stony
  • +
    + 10 + + 50 + 8 + 200 + 1.0 + -5 + + (1,1) + + true + true + + + true + +
  • GatheredCum
  • +
    +
    +
    + + Low + + +
  • GatheredCum
  • +
    +
    +
    +
    + +
  • ITab_Storage
  • +
    + Item + false +
    + +
    diff --git a/Defs/ThingDefs/Items_Resource_Cum.xml b/Defs/ThingDefs/Items_Resource_Cum.xml index 915df14..ffb7c64 100644 --- a/Defs/ThingDefs/Items_Resource_Cum.xml +++ b/Defs/ThingDefs/Items_Resource_Cum.xml @@ -1,6 +1,6 @@ - + GatheredCum Gathered cum. @@ -24,13 +24,33 @@ 0.1 - Fluid, AnimalProduct - DesperateOnlyForHumanlikes + Fluid, AnimalProduct + DesperateOnlyForHumanlikes AteCum AteCum - -10 - -10 + -10 + -10 + +
  • + CumTolerance + 0.032 + true +
  • +
  • + 0.05 +
  • +
    + +
  • + Cum + 0.050 + 0.8 + 0.1 + 1 + 30 +
  • +
    @@ -57,6 +77,16 @@ DesperateOnlyForHumanlikes AteCum AteCum + +
  • + CumTolerance + 0.032 + true +
  • +
  • + 0.05 +
  • +
    Item Never @@ -67,7 +97,89 @@
  • AnimalProductRaw
  • + +
  • + Cum + 0.050 + 0.8 + 0.1 + 1 + 30 +
  • +
    + + Cum + + CumAddiction + CumTolerance + + + Chemical_Cum + Need_Chemical + + Addicted to cum. + 10 + + + + CumTolerance + + cum addictiveness. + false + +
  • + -0.020 +
  • +
    +
    + + + CumAddiction + Hediff_Addiction + + cum addiction. + Chemical_Cum + +
  • + -0.1 + true +
  • +
    + +
  • + + 0.25 + 0.25 + 0.5 + +
  • +
  • + + + 0.25 + 1.0 + +
  • +
    +
    + + + CumWithdrawal + ThoughtWorker_Hediff + CumAddiction + true + +
  • + false +
  • +
  • + + I need it. + -5 +
  • +
    +
    \ No newline at end of file diff --git a/Languages/English/Keyed/RJW_Sexperience.xml b/Languages/English/Keyed/RJW_Sexperience.xml index 9c8edcc..7b0339f 100644 --- a/Languages/English/Keyed/RJW_Sexperience.xml +++ b/Languages/English/Keyed/RJW_Sexperience.xml @@ -11,6 +11,7 @@ not human not animal capable of sex is required + Total gathered cum: Enable record randomizer Randomize pawn's sex records. diff --git a/LoadFolders.xml b/LoadFolders.xml new file mode 100644 index 0000000..664f5f0 --- /dev/null +++ b/LoadFolders.xml @@ -0,0 +1,7 @@ + + + +
  • \
  • +
  • RJWSexperience_Ideology
  • +
    +
    \ No newline at end of file diff --git a/Patches/RJW_StatDefs.xml b/Patches/RJW_StatDefs.xml index 48764b8..05594a9 100644 --- a/Patches/RJW_StatDefs.xml +++ b/Patches/RJW_StatDefs.xml @@ -26,9 +26,6 @@ Defs/StatDef[defName="Vulnerability"]/parts -
  • - 0.5 -
  • 3.0
  • diff --git a/RJWSexperience/RJWSexperience/Buildings.cs b/RJWSexperience/RJWSexperience/Buildings.cs new file mode 100644 index 0000000..e913598 --- /dev/null +++ b/RJWSexperience/RJWSexperience/Buildings.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; +using RimWorld; + +namespace RJWSexperience +{ + public class Building_CumBucket : Building_Storage + { + protected float storedcum = 0f; + protected float totalgathered = 0f; + + public override void ExposeData() + { + Scribe_Values.Look(ref storedcum, "storedcum", storedcum, true); + Scribe_Values.Look(ref totalgathered, "totalgathered", totalgathered, true); + base.ExposeData(); + } + + public override string GetInspectString() + { + return Keyed.RSTotalGatheredCum + String.Format("{0:0.##}ml", totalgathered); + } + + public void AddCum(float amount) + { + AddCum(amount, VariousDefOf.GatheredCum); + } + + public void AddCum(float amount, ThingDef cumDef) + { + Thing cum = ThingMaker.MakeThing(cumDef); + AddCum(amount, cum); + } + + public void AddCum(float amount, Thing cum) + { + storedcum += amount; + totalgathered += amount; + int num = (int)storedcum; + + cum.stackCount = num; + if (cum.stackCount > 0) GenPlace.TryPlaceThing(cum, PositionHeld, Map, ThingPlaceMode.Direct, out Thing res); + storedcum -= num; + } + + } +} diff --git a/RJWSexperience/RJWSexperience/Ideology/RJW_Patch_Ideo.cs b/RJWSexperience/RJWSexperience/Ideology/RJW_Patch_Ideo.cs new file mode 100644 index 0000000..f7f8098 --- /dev/null +++ b/RJWSexperience/RJWSexperience/Ideology/RJW_Patch_Ideo.cs @@ -0,0 +1,343 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using HarmonyLib; +using rjw; +using RimWorld; +using Verse; +using UnityEngine; + + +namespace RJWSexperience.Ideology +{ + [HarmonyPatch(typeof(ThinkNode_ChancePerHour_Bestiality), "MtbHours")] + public static class RJW_Patch_ChancePerHour_Bestiality + { + public static void Postfix(Pawn pawn, ref float __result) + { + Ideo ideo = pawn.Ideo; + if (ideo != null) __result *= BestialityByPrecept(ideo); // ideo is null if don't have dlc + } + + public static float BestialityByPrecept(Ideo ideo) + { + if (ideo.HasPrecept(VariousDefOf.Bestiality_Honorable)) return 0.3f; + else if (ideo.HasPrecept(VariousDefOf.Bestiality_OnlyVenerated)) return 0.6f; + else if (ideo.HasPrecept(VariousDefOf.Bestiality_Acceptable)) return 0.75f; + else if (ideo.HasPrecept(VariousDefOf.Bestiality_Disapproved)) return 1.0f; + else return 5f; + } + } + + [HarmonyPatch(typeof(ThinkNode_ChancePerHour_RapeCP), "MtbHours")] + public static class RJW_Patch_ChancePerHour_RapeCP + { + public static void Postfix(Pawn pawn, ref float __result) + { + Ideo ideo = pawn.Ideo; + if (ideo != null) __result *= RapeByPrecept(ideo); // ideo is null if don't have dlc + } + + public static float RapeByPrecept(Ideo ideo) + { + if (ideo.HasPrecept(VariousDefOf.Rape_Honorable)) return 0.25f; + else if (ideo.HasPrecept(VariousDefOf.Rape_Acceptable)) return 0.5f; + else if (ideo.HasPrecept(VariousDefOf.Rape_Disapproved)) return 1.0f; + else return 3f; + } + } + + + [HarmonyPatch(typeof(xxx), "is_rapist")] + public static class RJW_Patch_is_rapist + { + public static void Postfix(Pawn pawn, ref bool __result) + { + Ideo ideo = pawn.Ideo; + if (ideo != null && !pawn.IsSubmissive()) + { + __result = __result || ideo.HasMeme(VariousDefOf.Rapist); + } + } + + } + + [HarmonyPatch(typeof(xxx), "is_zoophile")] + public static class RJW_Patch_is_zoophile + { + public static void Postfix(Pawn pawn, ref bool __result) + { + Ideo ideo = pawn.Ideo; + if (ideo != null) + { + __result = __result || ideo.HasMeme(VariousDefOf.Zoophile); + } + } + + } + + [HarmonyPatch(typeof(xxx), "is_necrophiliac")] + public static class RJW_Patch_is_necrophiliac + { + public static void Postfix(Pawn pawn, ref bool __result) + { + Ideo ideo = pawn.Ideo; + if (ideo != null) + { + __result = __result || ideo.HasMeme(VariousDefOf.Necrophile); + } + } + + } + + + [HarmonyPatch(typeof(SexUtility), "Aftersex", new Type[] { typeof(Pawn), typeof(Pawn), typeof(bool), typeof(bool), typeof(bool), typeof(xxx.rjwSextype) })] + public static class RJW_Patch_Aftersex + { + + + public static void Postfix(Pawn pawn, Pawn partner, bool usedCondom, bool rape, bool isCoreLovin, xxx.rjwSextype sextype) + { + //Log.Message("Aftersex " + pawn.Label + ": " + sextype); + if (xxx.is_human(pawn)) AfterSexHuman(pawn, partner, usedCondom, rape, isCoreLovin, sextype); + else if (xxx.is_human(partner)) AfterSexHuman(partner, pawn, usedCondom, false, isCoreLovin, sextype, true); + + } + + + public static void AfterSexHuman(Pawn human, Pawn partner, bool usedCondom, bool rape, bool isCoreLovin, xxx.rjwSextype sextype, bool isHumanReceiving = false) + { + string tag = ""; + if (human.IsIncest(partner)) + { + tag += HETag.Incestous; + } + + if (partner.Dead) + { + Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithCorpse.TaggedEvent(human, tag + HETag.Gender(human), partner)); + } + else if (partner.IsAnimal()) + { + if (isHumanReceiving && rape) + { + if (human.IsSlave) RapeEffectSlave(human); + if (human.Ideo?.IsVeneratedAnimal(partner) ?? false) Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithVeneratedAnimal.TaggedEvent(human, tag + HETag.BeenRaped + HETag.Gender(human), partner)); + else Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithAnimal.TaggedEvent(human, tag + HETag.BeenRaped + HETag.Gender(human), partner)); + } + else + { + if (human.Ideo?.IsVeneratedAnimal(partner) ?? false) Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithVeneratedAnimal.TaggedEvent(human, tag + HETag.Gender(human), partner)); + else Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithAnimal.TaggedEvent(human, tag + HETag.Gender(human), partner)); + } + } + else if (xxx.is_human(partner)) + { + if (rape) + { + if (partner.IsSlave) + { + Find.HistoryEventsManager.RecordEvent(VariousDefOf.RapedSlave.TaggedEvent(human, tag + HETag.Rape + HETag.Gender(human), partner)); + Find.HistoryEventsManager.RecordEvent(VariousDefOf.WasRapedSlave.TaggedEvent(partner, tag + HETag.BeenRaped + HETag.Gender(partner), human)); + RapeEffectSlave(partner); + } + else if (partner.IsPrisoner) + { + Find.HistoryEventsManager.RecordEvent(VariousDefOf.RapedPrisoner.TaggedEvent(human, tag + HETag.Rape + HETag.Gender(human), partner)); + Find.HistoryEventsManager.RecordEvent(VariousDefOf.WasRapedPrisoner.TaggedEvent(partner, tag + HETag.BeenRaped + HETag.Gender(partner), human)); + partner.guest.will = Math.Max(0, partner.guest.will - 0.2f); + } + else + { + Find.HistoryEventsManager.RecordEvent(VariousDefOf.Raped.TaggedEvent(human, tag + HETag.Rape + HETag.Gender(human), partner)); + Find.HistoryEventsManager.RecordEvent(VariousDefOf.WasRaped.TaggedEvent(partner, tag + HETag.BeenRaped + HETag.Gender(partner), human)); + } + } + else + { + HistoryEventDef sexevent = GetSexHistoryDef(sextype); + if (sexevent != null) + { + Find.HistoryEventsManager.RecordEvent(sexevent.TaggedEvent(human, tag + HETag.Gender(human), partner)); + Find.HistoryEventsManager.RecordEvent(sexevent.TaggedEvent(partner, tag + HETag.Gender(partner), human)); + if (sexevent == VariousDefOf.PromiscuousSex) + { + human.records.AddTo(VariousDefOf.Lust, 1.0f); + partner.records.AddTo(VariousDefOf.Lust, 1.0f); + } + + } + } + } + } + + public static void RapeEffectSlave(Pawn victim) + { + Need_Suppression suppression = victim.needs.TryGetNeed(); + if (suppression != null) + { + Hediff broken = victim.health.hediffSet.GetFirstHediffOfDef(xxx.feelingBroken); + if (broken != null) suppression.CurLevel += 0.3f * broken.Severity + 0.05f; + else suppression.CurLevel += 0.05f; + } + } + + + /// + /// only for non-violate human sex + /// + /// + /// + /// + /// + public static HistoryEventDef GetSexHistoryDef(xxx.rjwSextype sextype) + { + switch (sextype) + { + case xxx.rjwSextype.None: + case xxx.rjwSextype.MechImplant: + default: + return null; + case xxx.rjwSextype.Vaginal: + return VariousDefOf.VaginalSex; + case xxx.rjwSextype.Anal: + case xxx.rjwSextype.Rimming: + return VariousDefOf.AnalSex; + case xxx.rjwSextype.Oral: + case xxx.rjwSextype.Fellatio: + case xxx.rjwSextype.Cunnilingus: + return VariousDefOf.OralSex; + + case xxx.rjwSextype.Masturbation: + case xxx.rjwSextype.Boobjob: + case xxx.rjwSextype.Handjob: + case xxx.rjwSextype.Footjob: + case xxx.rjwSextype.Fingering: + case xxx.rjwSextype.MutualMasturbation: + return VariousDefOf.MiscSex; + case xxx.rjwSextype.DoublePenetration: + case xxx.rjwSextype.Scissoring: + case xxx.rjwSextype.Fisting: + case xxx.rjwSextype.Sixtynine: + return VariousDefOf.PromiscuousSex; + } + + } + + } + + + /// + /// Set prefer sextype using precepts + /// + [HarmonyPatch(typeof(SexUtility), "DetermineSexScores")] + public static class RJW_Patch_DetermineSexScores + { + public static void Postfix(Pawn pawn, Pawn partner, bool rape, bool whoring, Pawn receiving, List __result) + { + Ideo ideo = pawn.Ideo; + if (ideo != null) PreceptSextype(ideo, pawn.GetStatValue(xxx.sex_drive_stat), __result, 0); + + ideo = partner.Ideo; + if (!rape && ideo != null) PreceptSextype(ideo, pawn.GetStatValue(xxx.sex_drive_stat), __result, 1); + + } + + public static void PreceptSextype(Ideo ideo, float sexdrive, List result, int offset) + { + float mult = 8.0f * Math.Max(0.3f, 1 / Math.Max(0.01f, sexdrive)); + if (ideo.HasPrecept(VariousDefOf.Sex_VaginalOnly)) + { + result[0 + offset] *= mult; + } + else if (ideo.HasPrecept(VariousDefOf.Sex_AnalOnly)) + { + result[2 + offset] *= mult; + result[6 + offset] *= mult; + } + else if (ideo.HasPrecept(VariousDefOf.Sex_OralOnly)) + { + result[4 + offset] *= mult; + result[8 + offset] *= mult; + } + else if (ideo.HasPrecept(VariousDefOf.Sex_Promiscuous)) + { + result[10 + offset] *= mult; + result[20 + offset] *= mult; + result[24 + offset] *= mult; + result[26 + offset] *= mult; + } + } + } + + + [HarmonyPatch(typeof(SexAppraiser), "would_fuck", new Type[] { typeof(Pawn), typeof(Pawn), typeof(bool), typeof(bool), typeof(bool) })] + public static class RJW_Patch_would_fuck + { + public static void Postfix(Pawn fucker, Pawn fucked, bool invert_opinion, bool ignore_bleeding, bool ignore_gender, ref float __result) + { + if (xxx.is_human(fucker)) + { + Ideo ideo = fucker.Ideo; + if (ideo != null) + { + if (fucker.IsIncest(fucked)) + { + if (ideo.HasPrecept(VariousDefOf.Incestuos_IncestOnly)) __result *= 2.0f; + else if (!fucker.relations?.DirectRelationExists(PawnRelationDefOf.Spouse, fucked) ?? false) + { + if (ideo.HasPrecept(VariousDefOf.Incestuos_Disapproved)) __result *= 0.5f; + else if (ideo.HasPrecept(VariousDefOf.Incestuos_Forbidden)) __result *= 0.1f; + } + } + if (fucked.IsAnimal()) + { + if (ideo.HasPrecept(VariousDefOf.Bestiality_Honorable)) __result *= 2.0f; + else if (ideo.HasPrecept(VariousDefOf.Bestiality_OnlyVenerated)) + { + if (ideo.IsVeneratedAnimal(fucked)) __result *= 2.0f; + else __result *= 0.05f; + } + else if (ideo.HasPrecept(VariousDefOf.Bestiality_Acceptable)) __result *= 1.0f; + else __result *= 0.5f; + } + + } + } + + } + + } + + [HarmonyPatch(typeof(PawnDesignations_Breedee), "UpdateCanDesignateBreeding")] + public static class RJW_Patch_UpdateCanDesignateBreeding + { + public static void Postfix(Pawn pawn, ref bool __result) + { + Ideo ideo = pawn.Ideo; + if (ideo != null && ideo.HasMeme(VariousDefOf.Zoophile)) + { + SaveStorage.DataStore.GetPawnData(pawn).CanDesignateBreeding = true; + __result = true; + } + } + } + + [HarmonyPatch(typeof(Hediff_BasePregnancy), "PostBirth")] + public static class RJW_Patch_PostBirth + { + public static void Postfix(Pawn mother, Pawn father, Pawn baby) + { + if (!mother.IsAnimal()) + { + //baby.SetFactionDirect(baby.GetFactionUsingPrecept()); + baby.SetFaction(baby.GetFactionUsingPrecept(out Ideo ideo)); + baby.ideo.SetIdeo(ideo); + if (baby.Faction == Find.FactionManager.OfPlayer && !baby.IsSlave) baby.guest.SetGuestStatus(null, GuestStatus.Guest); + } + } + } + +} diff --git a/RJWSexperience/RJWSexperience/Keyed.cs b/RJWSexperience/RJWSexperience/Keyed.cs index 70b3e9e..943d3bc 100644 --- a/RJWSexperience/RJWSexperience/Keyed.cs +++ b/RJWSexperience/RJWSexperience/Keyed.cs @@ -22,6 +22,7 @@ namespace RJWSexperience public static readonly string RSNotHuman = "RSNotHuman".Translate(); public static readonly string RSNotAnimal = "RSNotAnimal".Translate(); public static readonly string RSShouldCanFuck = "RSShouldCanFuck".Translate(); + public static readonly string RSTotalGatheredCum = "RSTotalGatheredCum".Translate(); public static readonly string Option_1_Label = "RSOption_1_Label".Translate(); diff --git a/RJWSexperience/RJWSexperience/PawnRelationWorkers.cs b/RJWSexperience/RJWSexperience/PawnRelationWorkers.cs index 64256e1..9125f42 100644 --- a/RJWSexperience/RJWSexperience/PawnRelationWorkers.cs +++ b/RJWSexperience/RJWSexperience/PawnRelationWorkers.cs @@ -16,17 +16,16 @@ namespace RJWSexperience { Pawn mother = other.GetMother(); Pawn father = other.GetFather(); - if (me != other && (mother == me || father == me)) { - //if (!mother?.relations?.DirectRelationExists(PawnRelationDefOf.Spouse, father) ?? true) return true; - //if (!mother?.relations?.DirectRelationExists(PawnRelationDefOf.ExSpouse, father) ?? true) return true; - return (!mother?.relations?.DirectRelationExists(PawnRelationDefOf.Spouse, father) ?? true) || (!mother?.relations?.DirectRelationExists(PawnRelationDefOf.ExSpouse, father) ?? true); + if (mother == null || father == null) return true; + else if (mother.relations != null) return !(mother.relations.DirectRelationExists(PawnRelationDefOf.Spouse, father) || mother.relations.DirectRelationExists(PawnRelationDefOf.ExSpouse, father)); } - + return false; } - - } + + + } diff --git a/RJWSexperience/RJWSexperience/RJWSexperience.csproj b/RJWSexperience/RJWSexperience/RJWSexperience.csproj index c108fca..d44bb23 100644 --- a/RJWSexperience/RJWSexperience/RJWSexperience.csproj +++ b/RJWSexperience/RJWSexperience/RJWSexperience.csproj @@ -77,11 +77,14 @@ + + + diff --git a/RJWSexperience/RJWSexperience/RJW_Patch.cs b/RJWSexperience/RJWSexperience/RJW_Patch.cs index 8a377db..c775705 100644 --- a/RJWSexperience/RJWSexperience/RJW_Patch.cs +++ b/RJWSexperience/RJWSexperience/RJW_Patch.cs @@ -49,8 +49,8 @@ namespace RJWSexperience } } Pawn mother = baby.GetMother(); - ideo = mother.Ideo; - return mother.Faction; + ideo = mother?.Ideo; + return mother?.Faction ?? baby.Faction; } @@ -96,28 +96,32 @@ namespace RJWSexperience } [HarmonyPatch(typeof(SexUtility), "SatisfyPersonal")] - public static class RJW_Patch_SatisfyPersonal_Pre + public static class RJW_Patch_SatisfyPersonal { + private const float base_sat_per_fuck = 0.4f; + public static void Prefix(Pawn pawn, Pawn partner, xxx.rjwSextype sextype, bool violent, bool pawn_is_raping, ref float satisfaction) { satisfaction *= partner.GetSexStat(); } - } - - [HarmonyPatch(typeof(SexUtility), "SatisfyPersonal")] - public static class RJW_Patch_SatisfyPersonal_Post - { - private const float base_sat_per_fuck = 0.4f; public static void Postfix(Pawn pawn, Pawn partner, xxx.rjwSextype sextype, bool violent, bool pawn_is_raping, float satisfaction) { float? lust = pawn.records?.GetValue(VariousDefOf.Lust); if (lust != null) { - if (sextype != xxx.rjwSextype.Masturbation) pawn.records.AddTo(VariousDefOf.Lust, Mathf.Clamp((satisfaction - base_sat_per_fuck) * LustIncrementFactor(lust ?? 0),-0.5f,0.5f)); // If the sex is satisfactory, lust grows up. Declines at the opposite. - else pawn.records.AddTo(VariousDefOf.Lust, Mathf.Clamp(satisfaction * satisfaction * LustIncrementFactor(lust ?? 0), 0,0.5f)); // Masturbation always increases lust. + if (sextype != xxx.rjwSextype.Masturbation || partner != null) pawn.records.AddTo(VariousDefOf.Lust, Mathf.Clamp((satisfaction - base_sat_per_fuck) * LustIncrementFactor(lust ?? 0), -0.5f, 0.5f)); // If the sex is satisfactory, lust grows up. Declines at the opposite. + else pawn.records.AddTo(VariousDefOf.Lust, Mathf.Clamp(satisfaction * satisfaction * LustIncrementFactor(lust ?? 0), 0, 0.5f)); // Masturbation always increases lust. } + if (sextype == xxx.rjwSextype.Masturbation || partner == null) + { + Building_CumBucket cumbucket = (Building_CumBucket)pawn.GetAdjacentBuilding(); + if (cumbucket != null) + { + cumbucket.AddCum(pawn.GetCumVolume()); + } + } } public static float LustIncrementFactor(float lust) @@ -125,43 +129,8 @@ namespace RJWSexperience return Mathf.Exp(-Mathf.Pow(lust / Configurations.LustLimit, 2)); } - } - [HarmonyPatch(typeof(ThinkNode_ChancePerHour_Bestiality), "MtbHours")] - public static class RJW_Patch_ChancePerHour_Bestiality - { - public static void Postfix(Pawn pawn, ref float __result) - { - Ideo ideo = pawn.Ideo; - if (ideo != null) __result *= BestialityByPrecept(ideo); // ideo is null if don't have dlc - } - public static float BestialityByPrecept(Ideo ideo) - { - if (ideo.HasPrecept(VariousDefOf.Bestiality_Honorable)) return 0.3f; - else if (ideo.HasPrecept(VariousDefOf.Bestiality_OnlyVenerated)) return 0.6f; - else if (ideo.HasPrecept(VariousDefOf.Bestiality_Acceptable)) return 0.75f; - else if (ideo.HasPrecept(VariousDefOf.Bestiality_Disapproved)) return 1.0f; - else return 5f; - } - } - - [HarmonyPatch(typeof(ThinkNode_ChancePerHour_RapeCP), "MtbHours")] - public static class RJW_Patch_ChancePerHour_RapeCP - { - public static void Postfix(Pawn pawn, ref float __result) - { - Ideo ideo = pawn.Ideo; - if (ideo != null) __result *= RapeByPrecept(ideo); // ideo is null if don't have dlc - } - - public static float RapeByPrecept(Ideo ideo) - { - if (ideo.HasPrecept(VariousDefOf.Rape_Honorable)) return 0.25f; - else if (ideo.HasPrecept(VariousDefOf.Rape_Acceptable)) return 0.5f; - else if (ideo.HasPrecept(VariousDefOf.Rape_Disapproved)) return 1.0f; - else return 3f; - } } [HarmonyPatch(typeof(xxx), "TransferNutrition")] @@ -178,212 +147,7 @@ namespace RJWSexperience sextype == xxx.rjwSextype.Fellatio || sextype == xxx.rjwSextype.Sixtynine)) { - receiver.needs?.mood?.thoughts?.memories?.TryGainMemoryFast(VariousDefOf.AteCum); - - } - } - } - - [HarmonyPatch(typeof(xxx), "is_rapist")] - public static class RJW_Patch_is_rapist - { - public static void Postfix(Pawn pawn, ref bool __result) - { - Ideo ideo = pawn.Ideo; - if (ideo != null) - { - __result = __result || ideo.HasMeme(VariousDefOf.Rapist); - } - } - - } - - [HarmonyPatch(typeof(xxx), "is_zoophile")] - public static class RJW_Patch_is_zoophile - { - public static void Postfix(Pawn pawn, ref bool __result) - { - Ideo ideo = pawn.Ideo; - if (ideo != null) - { - __result = __result || ideo.HasMeme(VariousDefOf.Zoophile); - } - } - - } - - - [HarmonyPatch(typeof(SexUtility), "Aftersex", new Type[] {typeof(Pawn), typeof(Pawn), typeof(bool), typeof(bool), typeof(bool), typeof(xxx.rjwSextype) })] - public static class RJW_Patch_Aftersex - { - - - public static void Postfix(Pawn pawn, Pawn partner, bool usedCondom, bool rape, bool isCoreLovin, xxx.rjwSextype sextype) - { - //Log.Message("Aftersex " + pawn.Label + ": " + sextype); - if (xxx.is_human(pawn)) AfterSexHuman(pawn, partner, usedCondom, rape, isCoreLovin, sextype); - else if (xxx.is_human(partner)) AfterSexHuman(partner, pawn, usedCondom, false, isCoreLovin, sextype, true); - - } - - - public static void AfterSexHuman(Pawn human, Pawn partner, bool usedCondom, bool rape, bool isCoreLovin, xxx.rjwSextype sextype, bool isHumanReceiving = false) - { - string tag = ""; - if (human.IsIncest(partner)) - { - tag += HETag.Incestous; - } - - if (partner.IsAnimal()) - { - if (isHumanReceiving && rape) - { - if (human.IsSlave) RapeEffectSlave(human); - if (human.Ideo?.IsVeneratedAnimal(partner) ?? false) Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithVeneratedAnimal.TaggedEvent(human, tag + HETag.BeenRaped + HETag.Gender(human), partner)); - else Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithAnimal.TaggedEvent(human, tag + HETag.BeenRaped + HETag.Gender(human), partner)); - } - else - { - if (human.Ideo?.IsVeneratedAnimal(partner) ?? false) Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithVeneratedAnimal.TaggedEvent(human, tag + HETag.Gender(human), partner)); - else Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithAnimal.TaggedEvent(human, tag + HETag.Gender(human), partner)); - } - } - else if (xxx.is_human(partner)) - { - if (rape) - { - if (partner.IsSlave) - { - Find.HistoryEventsManager.RecordEvent(VariousDefOf.RapedSlave.TaggedEvent(human ,tag + HETag.Rape + HETag.Gender(human), partner)); - Find.HistoryEventsManager.RecordEvent(VariousDefOf.WasRapedSlave.TaggedEvent(partner, tag + HETag.BeenRaped + HETag.Gender(partner), human)); - RapeEffectSlave(partner); - } - else if (partner.IsPrisoner) - { - Find.HistoryEventsManager.RecordEvent(VariousDefOf.RapedPrisoner.TaggedEvent(human, tag + HETag.Rape + HETag.Gender(human), partner)); - Find.HistoryEventsManager.RecordEvent(VariousDefOf.WasRapedPrisoner.TaggedEvent(partner, tag + HETag.BeenRaped + HETag.Gender(partner), human)); - partner.guest.will = Math.Max(0, partner.guest.will - 0.2f); - } - else - { - Find.HistoryEventsManager.RecordEvent(VariousDefOf.Raped.TaggedEvent(human, tag + HETag.Rape + HETag.Gender(human), partner)); - Find.HistoryEventsManager.RecordEvent(VariousDefOf.WasRaped.TaggedEvent(partner, tag + HETag.BeenRaped + HETag.Gender(partner), human)); - } - } - else - { - HistoryEventDef sexevent = GetSexHistoryDef(sextype); - if (sexevent != null) - { - Find.HistoryEventsManager.RecordEvent(sexevent.TaggedEvent(human, tag + HETag.Gender(human), partner)); - Find.HistoryEventsManager.RecordEvent(sexevent.TaggedEvent(partner, tag + HETag.Gender(partner), human)); - if (sexevent == VariousDefOf.PromiscuousSex) - { - human.records.AddTo(VariousDefOf.Lust, 1.0f); - partner.records.AddTo(VariousDefOf.Lust, 1.0f); - } - - } - } - } - } - - public static void RapeEffectSlave(Pawn victim) - { - Need_Suppression suppression = victim.needs.TryGetNeed(); - if (suppression != null) - { - Hediff broken = victim.health.hediffSet.GetFirstHediffOfDef(xxx.feelingBroken); - if (broken != null) suppression.CurLevel += 0.3f * broken.Severity + 0.05f; - else suppression.CurLevel += 0.05f; - } - } - - - /// - /// only for non-violate human sex - /// - /// - /// - /// - /// - public static HistoryEventDef GetSexHistoryDef(xxx.rjwSextype sextype) - { - switch (sextype) - { - case xxx.rjwSextype.None: - case xxx.rjwSextype.MechImplant: - default: - return null; - case xxx.rjwSextype.Vaginal: - return VariousDefOf.VaginalSex; - case xxx.rjwSextype.Anal: - case xxx.rjwSextype.Rimming: - return VariousDefOf.AnalSex; - case xxx.rjwSextype.Oral: - case xxx.rjwSextype.Fellatio: - case xxx.rjwSextype.Cunnilingus: - return VariousDefOf.OralSex; - - case xxx.rjwSextype.Masturbation: - case xxx.rjwSextype.Boobjob: - case xxx.rjwSextype.Handjob: - case xxx.rjwSextype.Footjob: - case xxx.rjwSextype.Fingering: - case xxx.rjwSextype.MutualMasturbation: - return VariousDefOf.MiscSex; - case xxx.rjwSextype.DoublePenetration : - case xxx.rjwSextype.Scissoring : - case xxx.rjwSextype.Fisting : - case xxx.rjwSextype.Sixtynine : - return VariousDefOf.PromiscuousSex; - } - - } - - } - - - /// - /// Set prefer sextype using precepts - /// - [HarmonyPatch(typeof(SexUtility), "DetermineSexScores")] - public static class RJW_Patch_DetermineSexScores - { - public static void Postfix(Pawn pawn, Pawn partner, bool rape, bool whoring, Pawn receiving, List __result) - { - Ideo ideo = pawn.Ideo; - if (ideo != null) PreceptSextype(ideo, pawn.GetStatValue(xxx.sex_drive_stat), __result, 0); - - ideo = partner.Ideo; - if (!rape && ideo != null) PreceptSextype(ideo, pawn.GetStatValue(xxx.sex_drive_stat), __result, 1); - - } - - public static void PreceptSextype(Ideo ideo, float sexdrive, List result, int offset) - { - float mult = 8.0f * Math.Max(0.3f, 1 / Math.Max(0.01f, sexdrive)); - if (ideo.HasPrecept(VariousDefOf.Sex_VaginalOnly)) - { - result[0 + offset] *= mult; - } - else if (ideo.HasPrecept(VariousDefOf.Sex_AnalOnly)) - { - result[2 + offset] *= mult; - result[6 + offset] *= mult; - } - else if (ideo.HasPrecept(VariousDefOf.Sex_OralOnly)) - { - result[4 + offset] *= mult; - result[8 + offset] *= mult; - } - else if (ideo.HasPrecept(VariousDefOf.Sex_Promiscuous)) - { - result[10 + offset] *= mult; - result[20 + offset] *= mult; - result[24 + offset] *= mult; - result[26 + offset] *= mult; + receiver.CumDrugEffect(); } } } @@ -403,74 +167,6 @@ namespace RJWSexperience } } - [HarmonyPatch(typeof(SexAppraiser), "would_fuck", new Type[] {typeof(Pawn), typeof(Pawn), typeof(bool), typeof(bool), typeof(bool) })] - public static class RJW_Patch_would_fuck - { - public static void Postfix(Pawn fucker, Pawn fucked, bool invert_opinion, bool ignore_bleeding, bool ignore_gender, ref float __result) - { - if (xxx.is_human(fucker)) - { - Ideo ideo = fucker.Ideo; - if (ideo != null) - { - if (fucker.IsIncest(fucked)) - { - if (ideo.HasPrecept(VariousDefOf.Incestuos_IncestOnly)) __result *= 2.0f; - else if (!fucker.relations?.DirectRelationExists(PawnRelationDefOf.Spouse, fucked) ?? false) - { - if (ideo.HasPrecept(VariousDefOf.Incestuos_Disapproved)) __result *= 0.5f; - else if (ideo.HasPrecept(VariousDefOf.Incestuos_Forbidden)) __result *= 0.1f; - } - } - if (fucked.IsAnimal()) - { - if (ideo.HasPrecept(VariousDefOf.Bestiality_Honorable)) __result *= 2.0f; - else if (ideo.HasPrecept(VariousDefOf.Bestiality_OnlyVenerated)) - { - if (ideo.IsVeneratedAnimal(fucked)) __result *= 2.0f; - else __result *= 0.05f; - } - else if (ideo.HasPrecept(VariousDefOf.Bestiality_Acceptable)) __result *= 1.0f; - else __result *= 0.5f; - } - - } - } - - } - - } - - [HarmonyPatch(typeof(PawnDesignations_Breedee), "UpdateCanDesignateBreeding")] - public static class RJW_Patch_UpdateCanDesignateBreeding - { - public static void Postfix(Pawn pawn, ref bool __result) - { - Ideo ideo = pawn.Ideo; - if (ideo != null && ideo.HasMeme(VariousDefOf.Zoophile)) - { - SaveStorage.DataStore.GetPawnData(pawn).CanDesignateBreeding = true; - __result = true; - } - } - } - - [HarmonyPatch(typeof(Hediff_BasePregnancy), "PostBirth")] - public static class RJW_Patch_PostBirth - { - public static void Postfix(Pawn mother, Pawn father, Pawn baby) - { - if (!mother.IsAnimal()) - { - //baby.SetFactionDirect(baby.GetFactionUsingPrecept()); - baby.SetFaction(baby.GetFactionUsingPrecept(out Ideo ideo)); - baby.ideo.SetIdeo(ideo); - if (baby.Faction == Find.FactionManager.OfPlayer && !baby.IsSlave) baby.guest.SetGuestStatus(null, GuestStatus.Guest); - } - } - } - - } diff --git a/RJWSexperience/RJWSexperience/Rimworld_Patch.cs b/RJWSexperience/RJWSexperience/Rimworld_Patch.cs index 11b63cb..de2263a 100644 --- a/RJWSexperience/RJWSexperience/Rimworld_Patch.cs +++ b/RJWSexperience/RJWSexperience/Rimworld_Patch.cs @@ -24,6 +24,8 @@ namespace RJWSexperience Find.HistoryEventsManager.RecordEvent(new HistoryEvent(VariousDefOf.Incestuos_Marriage, secondPawn.Named(HistoryEventArgsNames.Doer))); } } + + } [HarmonyPatch(typeof(Pawn_RelationsTracker), "SecondaryRomanceChanceFactor")] diff --git a/RJWSexperience/RJWSexperience/Rituals/JobGiver_DrugOrgy.cs b/RJWSexperience/RJWSexperience/Rituals/JobGiver_DrugOrgy.cs new file mode 100644 index 0000000..d83dd75 --- /dev/null +++ b/RJWSexperience/RJWSexperience/Rituals/JobGiver_DrugOrgy.cs @@ -0,0 +1,279 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using rjw; +using Verse; +using Verse.AI; +using RimWorld; + + +namespace RJWSexperience +{ + public class JobGiver_DrugOrgy : ThinkNode_JobGiver + { + protected override Job TryGiveJob(Pawn pawn) + { + if (pawn.Drafted) return null; + DutyDef dutyDef = null; + PawnDuty duty = null; + if (pawn.mindState != null) + { + duty = pawn.mindState.duty; + dutyDef = duty.def; + } + else return null; + + if (dutyDef == DutyDefOf.TravelOrLeave || !xxx.can_do_loving(pawn)) + { + return null; + } + + Pawn target = FindPartner(pawn, duty); + + if (target == null || !pawn.CanReserveAndReach(target, PathEndMode.ClosestTouch, Danger.None,1)) return JobMaker.MakeJob(VariousDefOf.DrugMasturbate); + + return JobMaker.MakeJob(VariousDefOf.DrugSex, target); + } + + protected Pawn FindPartner(Pawn pawn, PawnDuty duty) + { + if (duty != null) + { + List pawns = pawn.Map.mapPawns.AllPawnsSpawned.FindAll(x => x.mindState?.duty?.def == duty.def); + return pawns.RandomElementByWeightWithDefault(x => SexAppraiser.would_fuck(pawn,x), 0.1f); + } + + + + return null; + } + + } + + /// + /// copied from rjw + /// + public class JobDriver_SexDrugOrgy : JobDriver_SexBaseInitiator + { + public override bool TryMakePreToilReservations(bool errorOnFailed) + { + return true; + } + + protected override IEnumerable MakeNewToils() + { + //ModLog.Message("" + this.GetType().ToString() + "::MakeNewToils() called"); + setup_ticks(); + var PartnerJob = VariousDefOf.GettinDrugSex; + + this.FailOnDespawnedNullOrForbidden(iTarget); + this.FailOn(() => !Partner.health.capacities.CanBeAwake); + this.FailOn(() => pawn.Drafted); + this.FailOn(() => Partner == null); + yield return Toils_Goto.GotoThing(iTarget, PathEndMode.OnCell); + + + //Toil findQuickieSpot = new Toil(); + //findQuickieSpot.defaultCompleteMode = ToilCompleteMode.PatherArrival; + //findQuickieSpot.initAction = delegate + //{ + // var spot = Partner.Position.RandomAdjacentCell8Way(); + // pawn.pather.StartPath(spot, PathEndMode.OnCell); + // Partner.jobs.StopAll(); //sometimes errors with stuff like vomiting + // Job job = JobMaker.MakeJob(JobDefOf.GotoMindControlled, spot); + // Partner.jobs.StartJob(job, JobCondition.InterruptForced); + //}; + //yield return findQuickieSpot; + + Toil WaitForPartner = new Toil(); + WaitForPartner.defaultCompleteMode = ToilCompleteMode.Delay; + WaitForPartner.initAction = delegate + { + ticksLeftThisToil = 5000; + }; + WaitForPartner.tickAction = delegate + { + pawn.GainComfortFromCellIfPossible(); + if (pawn.Position.DistanceTo(Partner.Position) <= 1f) + { + ReadyForNextToil(); + } + }; + yield return WaitForPartner; + + Toil StartPartnerJob = new Toil(); + StartPartnerJob.defaultCompleteMode = ToilCompleteMode.Instant; + StartPartnerJob.socialMode = RandomSocialMode.Off; + StartPartnerJob.initAction = delegate + { + var dri = Partner.jobs.curDriver as JobDriver_DrugSexReceiver; + if (dri == null) + { + Job gettingQuickie = JobMaker.MakeJob(PartnerJob, pawn, Partner); + Partner.jobs.StartJob(gettingQuickie, JobCondition.InterruptForced); + } + }; + yield return StartPartnerJob; + + Toil SexToil = new Toil(); + SexToil.defaultCompleteMode = ToilCompleteMode.Never; + SexToil.socialMode = RandomSocialMode.Off; + SexToil.defaultDuration = duration; + SexToil.handlingFacing = true; + SexToil.FailOn(() => Partner.CurJob.def != PartnerJob); + SexToil.initAction = delegate + { + Partner.pather.StopDead(); + Partner.jobs.curDriver.asleep = false; + usedCondom = CondomUtility.TryUseCondom(pawn) || CondomUtility.TryUseCondom(Partner); + Start(); + }; + SexToil.AddPreTickAction(delegate + { + SexTick(pawn, Partner); + SexUtility.reduce_rest(Partner, 1); + SexUtility.reduce_rest(pawn, 1); + if (ticks_left <= 0) + ReadyForNextToil(); + }); + SexToil.AddFinishAction(delegate + { + End(); + }); + yield return SexToil; + + yield return new Toil + { + initAction = delegate + { + //// Trying to add some interactions and social logs + SexUtility.ProcessSex(pawn, Partner, usedCondom: usedCondom, rape: isRape, sextype: sexType); + }, + defaultCompleteMode = ToilCompleteMode.Instant + }; + } + } + + /// + /// copied from rjw + /// + public class JobDriver_DrugSexReceiver : JobDriver_SexBaseRecieverLoved + { + + protected override IEnumerable MakeNewToils() + { + setup_ticks(); + parteners.Add(Partner);// add job starter, so this wont fail, before Initiator starts his job + //--ModLog.Message("JobDriver_GettinLoved::MakeNewToils is called"); + //ModLog.Message("" + Partner.CurJob.def); + + // More/less hearts based on opinion. + if (pawn.relations.OpinionOf(Partner) < 0) + ticks_between_hearts += 50; + else if (pawn.relations.OpinionOf(Partner) > 60) + ticks_between_hearts -= 25; + + this.FailOnDespawnedOrNull(iTarget); + this.FailOn(() => !Partner.health.capacities.CanBeAwake); + this.FailOn(() => pawn.Drafted); + this.FailOn(() => Partner.Drafted); + this.FailOn(() => Partner == null); + + yield return Toils_Reserve.Reserve(iTarget, 1, 0); + + var get_loved = MakeSexToil(); + get_loved.handlingFacing = false; + yield return get_loved; + } + + protected Toil MakeSexToil() + { + Toil get_loved = new Toil(); + get_loved.defaultCompleteMode = ToilCompleteMode.Never; + get_loved.socialMode = RandomSocialMode.Off; + get_loved.handlingFacing = true; + //get_loved.initAction = delegate + //{ + //}; + get_loved.tickAction = delegate + { + }; + get_loved.AddEndCondition(new Func(() => + { + if (parteners.Count <= 0) + { + return JobCondition.Succeeded; + } + return JobCondition.Ongoing; + })); + get_loved.AddFinishAction(delegate + { + if (xxx.is_human(pawn)) + pawn.Drawer.renderer.graphics.ResolveApparelGraphics(); + }); + get_loved.socialMode = RandomSocialMode.Off; + return get_loved; + } + } + + /// + /// copied from rjw + /// + public class JobDriver_DrugMasturabate : JobDriver_Masturbate + { + + protected override IEnumerable MakeNewToils() + { + setup_ticks(); + + //this.FailOn(() => PawnUtility.PlayerForcedJobNowOrSoon(pawn)); + this.FailOn(() => pawn.health.Downed); + this.FailOn(() => pawn.IsBurning()); + this.FailOn(() => pawn.IsFighting()); + this.FailOn(() => pawn.Drafted); + + + //ModLog.Message(" Making new toil for QuickFap."); + + Toil SexToil = Toils_General.Wait(duration); + SexToil.handlingFacing = true; + SexToil.initAction = delegate + { + Start(); + }; + SexToil.tickAction = delegate + { + SexTick(pawn, null, true); + SexUtility.reduce_rest(pawn, 1); + if (ticks_left <= 0) + ReadyForNextToil(); + }; + SexToil.AddFinishAction(delegate + { + End(); + }); + yield return SexToil; + + yield return new Toil + { + initAction = delegate + { + SexUtility.Aftersex(pawn, xxx.rjwSextype.Masturbation); + if (!SexUtility.ConsiderCleaning(pawn)) return; + + LocalTargetInfo own_cum = pawn.PositionHeld.GetFirstThing(pawn.Map); + + Job clean = JobMaker.MakeJob(JobDefOf.Clean); + clean.AddQueuedTarget(TargetIndex.A, own_cum); + + pawn.jobs.jobQueue.EnqueueFirst(clean); + }, + defaultCompleteMode = ToilCompleteMode.Instant + }; + } + } + + +} diff --git a/RJWSexperience/RJWSexperience/Rituals/RitualRoles.cs b/RJWSexperience/RJWSexperience/Rituals/RitualRoles.cs index aee7347..977e4dc 100644 --- a/RJWSexperience/RJWSexperience/Rituals/RitualRoles.cs +++ b/RJWSexperience/RJWSexperience/Rituals/RitualRoles.cs @@ -33,7 +33,7 @@ namespace RJWSexperience if (pawn.IsPrisonerOfColony || pawn.IsSlaveOfColony) return true; if (pawn.Ideo?.HasMeme(MemeDefOf.FemaleSupremacy) ?? false && pawn.gender != Gender.Female) return true; else if (pawn.Ideo?.HasMeme(MemeDefOf.MaleSupremacy) ?? false && pawn.gender != Gender.Male) return true; - else if (pawn.IsDesignatedComfort() || (pawn.guilt != null && pawn.guilt.IsGuilty) || (pawn.apparel != null && pawn.apparel.PsychologicallyNude)) return true; + if (pawn.IsDesignatedComfort() || (pawn.guilt != null && pawn.guilt.IsGuilty) || (pawn.apparel != null && pawn.apparel.PsychologicallyNude)) return true; return false; } } @@ -97,10 +97,10 @@ namespace RJWSexperience public static bool CanBeBreeder(Pawn animal, Precept_Ritual precept) { - //if (precept != null) - //{ - // if (precept.ideo.HasPrecept(VariousDefOf.Bestiality_OnlyVenerated) && !precept.ideo.IsVeneratedAnimal(animal)) return false; - //} + if (precept != null) + { + if (precept.ideo.HasPrecept(VariousDefOf.Bestiality_OnlyVenerated) && !precept.ideo.IsVeneratedAnimal(animal)) return false; + } if (!xxx.can_rape(animal)) return false; return true; } diff --git a/RJWSexperience/RJWSexperience/Thought_Recordbased.cs b/RJWSexperience/RJWSexperience/Thought_Recordbased.cs index 2a8f7ce..ccbcf14 100644 --- a/RJWSexperience/RJWSexperience/Thought_Recordbased.cs +++ b/RJWSexperience/RJWSexperience/Thought_Recordbased.cs @@ -48,6 +48,15 @@ namespace RJWSexperience protected int recordIncrement = 1; + public override int CurStageIndex + { + get + { + if (pawn.health.hediffSet.HasHediff(VariousDefOf.CumAddiction)) return minimumValueforStage.Count; + return base.CurStageIndex; + } + } + public override void ExposeData() { base.ExposeData(); diff --git a/RJWSexperience/RJWSexperience/Utility.cs b/RJWSexperience/RJWSexperience/Utility.cs index 1f9b95c..a195390 100644 --- a/RJWSexperience/RJWSexperience/Utility.cs +++ b/RJWSexperience/RJWSexperience/Utility.cs @@ -84,5 +84,83 @@ namespace RJWSexperience return 1 + lust / 100f; } + public static bool IsSubmissive(this Pawn pawn) + { + Ideo ideo = pawn.Ideo; + if (ideo != null) + { + if (ideo.HasPrecept(VariousDefOf.Submissive_Female) && pawn.gender == Gender.Female) return true; + else if (ideo.HasPrecept(VariousDefOf.Submissive_Male) && pawn.gender == Gender.Male) return true; + } + + return false; + } + + public static Building GetAdjacentBuilding(this Pawn pawn) where T : Building + { + + if (pawn.Spawned) + { + EdificeGrid edifice = pawn.Map.edificeGrid; + if (edifice[pawn.Position] is T) return edifice[pawn.Position]; + IEnumerable adjcells = GenAdjFast.AdjacentCells8Way(pawn.Position); + foreach(IntVec3 pos in adjcells) + { + if (edifice[pos] is T) return edifice[pos]; + } + } + return null; + } + + + public static float GetCumVolume(this Pawn pawn) + { + List hediffs = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_genitalsBPR(pawn)); + if (hediffs.NullOrEmpty()) return 0; + else return pawn.GetCumVolume(hediffs); + } + + public static float GetCumVolume(this Pawn pawn, List hediffs) + { + CompHediffBodyPart part = hediffs?.FindAll((Hediff hed) => hed.def.defName.ToLower().Contains("penis")).InRandomOrder().FirstOrDefault()?.TryGetComp(); + if (part == null) part = hediffs?.FindAll((Hediff hed) => hed.def.defName.ToLower().Contains("ovipositorf")).InRandomOrder().FirstOrDefault()?.TryGetComp(); + if (part == null) part = hediffs?.FindAll((Hediff hed) => hed.def.defName.ToLower().Contains("ovipositorm")).InRandomOrder().FirstOrDefault()?.TryGetComp(); + if (part == null) part = hediffs?.FindAll((Hediff hed) => hed.def.defName.ToLower().Contains("tentacle")).InRandomOrder().FirstOrDefault()?.TryGetComp(); + + + return pawn.GetCumVolume(part); + } + + + public static float GetCumVolume(this Pawn pawn, CompHediffBodyPart part) + { + float res; + + try + { + res = part.FluidAmmount * part.FluidModifier * pawn.BodySize / pawn.RaceProps.baseBodySize * Rand.Range(0.8f, 1.2f) * RJWSettings.cum_on_body_amount_adjust * 0.3f; + } + catch (NullReferenceException) + { + res = 0.0f; + } + if (pawn.Has(Quirk.Messy)) res *= Rand.Range(4.0f, 8.0f); + + return res; + } + + public static void CumDrugEffect(this Pawn pawn) + { + Need need = pawn.needs?.TryGetNeed(VariousDefOf.Chemical_Cum); + if (need != null) need.CurLevel += VariousDefOf.CumneedLevelOffset; + Hediff addictive = HediffMaker.MakeHediff(VariousDefOf.CumTolerance, pawn); + addictive.Severity = 0.032f; + pawn.health.AddHediff(addictive); + Hediff addiction = pawn.health.hediffSet.GetFirstHediffOfDef(VariousDefOf.CumAddiction); + if (addiction != null) addiction.Severity += VariousDefOf.CumexistingAddictionSeverityOffset; + + pawn.needs?.mood?.thoughts?.memories?.TryGainMemoryFast(VariousDefOf.AteCum); + } + } } diff --git a/RJWSexperience/RJWSexperience/VariousDefOf.cs b/RJWSexperience/RJWSexperience/VariousDefOf.cs index ae17038..50d3887 100644 --- a/RJWSexperience/RJWSexperience/VariousDefOf.cs +++ b/RJWSexperience/RJWSexperience/VariousDefOf.cs @@ -15,9 +15,54 @@ namespace RJWSexperience public static readonly SkillDef SexSkill = DefDatabase.GetNamed("Sex"); public static readonly ThoughtDef_Recordbased AteCum = DefDatabase.GetNamed("AteCum"); public static readonly JobDef RapeVictim = DefDatabase.GetNamed("RapeVictim"); + public static readonly JobDef DrugSex = DefDatabase.GetNamed("DrugSex"); + public static readonly JobDef GettinDrugSex = DefDatabase.GetNamed("GettinDrugSex"); + public static readonly JobDef DrugMasturbate = DefDatabase.GetNamed("DrugMasturbate"); + public static readonly PawnRelationDef Bastard = DefDatabase.GetNamed("Bastard"); + public static readonly ThingDef GatheredCum = DefDatabase.GetNamed("GatheredCum"); + public static readonly HediffDef CumAddiction = DefDatabase.GetNamed("CumAddiction"); + public static readonly HediffDef CumTolerance = DefDatabase.GetNamed("CumTolerance"); + public static readonly ChemicalDef Cum = DefDatabase.GetNamed("Cum"); + public static readonly NeedDef Chemical_Cum = DefDatabase.GetNamed("Chemical_Cum"); + + public static float CumneedLevelOffset + { + get + { + if (cumneedLevelOffsetcache == null) + { + CreateCumCompCache(); + } + return cumneedLevelOffsetcache ?? 1.0f; + } + } + public static float CumexistingAddictionSeverityOffset + { + get + { + if (cumexistingAddictionSeverityOffsetcache == null) + { + CreateCumCompCache(); + } + return cumexistingAddictionSeverityOffsetcache ?? 1.0f; + } + } + + private static void CreateCumCompCache() + { + CompProperties_Drug comp = (CompProperties_Drug)GatheredCum.comps.FirstOrDefault(x => x is CompProperties_Drug); + cumneedLevelOffsetcache = comp.needLevelOffset; + cumexistingAddictionSeverityOffsetcache = comp.existingAddictionSeverityOffset; + } + + + protected static float? cumneedLevelOffsetcache = null; + protected static float? cumexistingAddictionSeverityOffsetcache = null; [MayRequireIdeology] public static readonly MemeDef Zoophile = DefDatabase.GetNamed("Zoophile"); [MayRequireIdeology] public static readonly MemeDef Rapist = DefDatabase.GetNamed("Rapist"); + [MayRequireIdeology] public static readonly MemeDef Lewd = DefDatabase.GetNamed("Lewd"); + [MayRequireIdeology] public static readonly MemeDef Necrophile = DefDatabase.GetNamed("Necrophile"); [MayRequireIdeology] public static readonly HistoryEventDef SexWithAnimal = DefDatabase.GetNamed("SexWithAnimal"); [MayRequireIdeology] public static readonly HistoryEventDef SexWithVeneratedAnimal = DefDatabase.GetNamed("SexWithVeneratedAnimal"); [MayRequireIdeology] public static readonly HistoryEventDef Raped = DefDatabase.GetNamed("Raped"); @@ -32,6 +77,7 @@ namespace RJWSexperience [MayRequireIdeology] public static readonly HistoryEventDef MiscSex = DefDatabase.GetNamed("MiscSex"); [MayRequireIdeology] public static readonly HistoryEventDef PromiscuousSex = DefDatabase.GetNamed("PromiscuousSex"); [MayRequireIdeology] public static readonly HistoryEventDef Incestuos_Marriage = DefDatabase.GetNamed("Incestuos_Marriage"); + [MayRequireIdeology] public static readonly HistoryEventDef SexWithCorpse = DefDatabase.GetNamed("SexWithCorpse"); [MayRequireIdeology] public static readonly PreceptDef Bestiality_Abhorrent = DefDatabase.GetNamed("Bestiality_Abhorrent"); [MayRequireIdeology] public static readonly PreceptDef Bestiality_Horrible = DefDatabase.GetNamed("Bestiality_Horrible"); [MayRequireIdeology] public static readonly PreceptDef Bestiality_Disapproved = DefDatabase.GetNamed("Bestiality_Disapproved"); @@ -56,5 +102,13 @@ namespace RJWSexperience [MayRequireIdeology] public static readonly PreceptDef BabyFaction_AlwaysMother = DefDatabase.GetNamed("BabyFaction_AlwaysMother"); [MayRequireIdeology] public static readonly PreceptDef BabyFaction_AlwaysFather = DefDatabase.GetNamed("BabyFaction_AlwaysFather"); [MayRequireIdeology] public static readonly PreceptDef BabyFaction_AlwaysColony = DefDatabase.GetNamed("BabyFaction_AlwaysColony"); + [MayRequireIdeology] public static readonly PreceptDef Submissive_None = DefDatabase.GetNamed("Submissive_None"); + [MayRequireIdeology] public static readonly PreceptDef Submissive_Male = DefDatabase.GetNamed("Submissive_Male"); + [MayRequireIdeology] public static readonly PreceptDef Submissive_Female = DefDatabase.GetNamed("Submissive_Female"); + [MayRequireIdeology] public static readonly PreceptDef Necrophilia_Abhorrent = DefDatabase.GetNamed("Necrophilia_Abhorrent"); + [MayRequireIdeology] public static readonly PreceptDef Necrophilia_Horrible = DefDatabase.GetNamed("Necrophilia_Horrible"); + [MayRequireIdeology] public static readonly PreceptDef Necrophilia_Disapproved = DefDatabase.GetNamed("Necrophilia_Disapproved"); + [MayRequireIdeology] public static readonly PreceptDef Necrophilia_Acceptable = DefDatabase.GetNamed("Necrophilia_Acceptable"); + [MayRequireIdeology] public static readonly PreceptDef Necrophilia_Approved = DefDatabase.GetNamed("Necrophilia_Approved"); } } diff --git a/Defs/DutyDefs/Duties_Rituals_sex.xml b/RJWSexperience_Ideology/Defs/DutyDefs/Duties_Rituals_sex.xml similarity index 59% rename from Defs/DutyDefs/Duties_Rituals_sex.xml rename to RJWSexperience_Ideology/Defs/DutyDefs/Duties_Rituals_sex.xml index 3811d42..e9e2347 100644 --- a/Defs/DutyDefs/Duties_Rituals_sex.xml +++ b/RJWSexperience_Ideology/Defs/DutyDefs/Duties_Rituals_sex.xml @@ -36,6 +36,29 @@ - + + DrugOrgy + HighPriority + Off + + +
  • + +
  • + 0.15 + +
  • + +
  • +
    + + +
  • + Jog + 50~250 +
  • + +
    +
    \ No newline at end of file diff --git a/Defs/Goodwill/MemeCompatibility_Sex.xml b/RJWSexperience_Ideology/Defs/Goodwill/MemeCompatibility_Sex.xml similarity index 61% rename from Defs/Goodwill/MemeCompatibility_Sex.xml rename to RJWSexperience_Ideology/Defs/Goodwill/MemeCompatibility_Sex.xml index 4024d31..7c71e61 100644 --- a/Defs/Goodwill/MemeCompatibility_Sex.xml +++ b/RJWSexperience_Ideology/Defs/Goodwill/MemeCompatibility_Sex.xml @@ -11,6 +11,14 @@ 30 + + Necrophile_Necrophile + + GoodwillSituationWorker_MemeCompatibility + Necrophile + Necrophile + 30 + @@ -30,4 +38,13 @@ true -20 + + + Necrophile_All + + RJWSexperience.GoodwillSituationWorker_OneWayReceive + Necrophile + true + -50 + diff --git a/Defs/InteractionDefs/Interactions_Speech_sex.xml b/RJWSexperience_Ideology/Defs/InteractionDefs/Interactions_Speech_sex.xml similarity index 100% rename from Defs/InteractionDefs/Interactions_Speech_sex.xml rename to RJWSexperience_Ideology/Defs/InteractionDefs/Interactions_Speech_sex.xml diff --git a/RJWSexperience_Ideology/Defs/JobDefs/Jobs_Ritual_Sex.xml b/RJWSexperience_Ideology/Defs/JobDefs/Jobs_Ritual_Sex.xml new file mode 100644 index 0000000..2c702ad --- /dev/null +++ b/RJWSexperience_Ideology/Defs/JobDefs/Jobs_Ritual_Sex.xml @@ -0,0 +1,31 @@ + + + + + RapeVictim + RJWSexperience.JobDriver_RapeVictim + rapin' victim + false + + + + DrugSex + RJWSexperience.JobDriver_SexDrugOrgy + lovin'. + false + + + + GettinDrugSex + RJWSexperience.JobDriver_DrugSexReceiver + lovin'. + false + + + + DrugMasturbate + RJWSexperience.JobDriver_DrugMasturabate + masturbatin'. + false + + \ No newline at end of file diff --git a/Defs/MemeDefs/Memes_Sexual.xml b/RJWSexperience_Ideology/Defs/MemeDefs/Memes_Sexual.xml similarity index 72% rename from Defs/MemeDefs/Memes_Sexual.xml rename to RJWSexperience_Ideology/Defs/MemeDefs/Memes_Sexual.xml index 90748fa..b7a808d 100644 --- a/Defs/MemeDefs/Memes_Sexual.xml +++ b/RJWSexperience_Ideology/Defs/MemeDefs/Memes_Sexual.xml @@ -151,4 +151,93 @@
    + + Lewd + + Perverts. + UI/Memes/SexualDissolutely + 3 + +
  • Burnbong_Aphrodisiac
  • +
    + +
  • +
  • Lovin_FreeApproved
  • + +
  • +
  • Incestuos_Free
  • + +
  • +
  • Sex_Free
  • +
  • Sex_Promiscuous
  • + +
    + +
  • + DateRitualConsumable + DrugOrgy + Burnbong_Aphrodisiac +
  • +
    + + +
  • memeAdjective->horny
  • +
  • memeAdjective->lewd
  • +
  • memeAdjective->arousing
  • +
  • memeAdjective->sexy
  • +
  • memeAdjective->estrous
  • +
  • memeAdjective->decadent
  • +
  • memeHyphenPrefix->estro
  • +
  • memeHyphenPrefix->lust
  • +
  • memeConcept->lust
  • +
  • memeConcept->libido
  • +
  • memeConcept->estrus
  • +
  • memeConcept->arousal
  • +
  • memeConcept->desire
  • +
  • memeConcept->sex
  • +
  • memeConcept->perversion
  • +
  • memeGod->slaanesh
  • +
    +
    + +
  • + Cult of Slaanesh + pleasure + decadent + heretic +
  • +
    + +
  • Autobong_Aphrodisiac
  • +
    + +
  • Nymphomaniac
  • +
    +
    + + + Necrophile + + Corpse fuckers. + UI/Memes/Necrophile + 2 + +
  • +
  • Necrophilia_Acceptable
  • +
  • Necrophilia_Approved
  • + +
  • +
  • Corpses_DontCare
  • + +
    + + +
  • memeGod->sonic
  • +
  • memeGod->mega man
  • +
    +
    + +
  • Necrophiliac
  • +
    +
    \ No newline at end of file diff --git a/Defs/PreceptDefs/Precepts_BabyFaction.xml b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_BabyFaction.xml similarity index 100% rename from Defs/PreceptDefs/Precepts_BabyFaction.xml rename to RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_BabyFaction.xml diff --git a/Defs/PreceptDefs/Precepts_Bestiality.xml b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Bestiality.xml similarity index 100% rename from Defs/PreceptDefs/Precepts_Bestiality.xml rename to RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Bestiality.xml diff --git a/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Buildings_sex.xml b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Buildings_sex.xml new file mode 100644 index 0000000..9371a48 --- /dev/null +++ b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Buildings_sex.xml @@ -0,0 +1,85 @@ + + + + + + + IdeoBuilding + + true + + + + + + IdeoBuilding + + A building of ideoligious significance. Only those who follow this ideoligion can build it. It may be used as a focus for rituals. + IdeoBuilding + Precept_Building + PreceptWorker_Building + NamerIdeoBuilding + Medium + + 1 + 1 + 1 + 1 + 4 + 1 + 1 + 1 + 0 + + true + true + false + 5 + +
  • Moderate
  • +
  • High
  • +
    + + +
  • (0.5, 1)
  • +
  • (1.0, 2)
  • +
    +
    + + +
  • (0.5, 1)
  • +
  • (1.0, 2)
  • +
    +
    + +
  • + 25 +
  • +
  • + RoomRequirementAllFloored + +
  • Floor
  • +
  • FineFloor
  • + + +
  • + 60 +
  • +
  • + Column + 4 +
  • +
    + +
  • + RoomRequirementNoBeds +
  • Bed
  • + +
  • + RoomRequirementNoProductionFacilities +
  • Production
  • + +
    +
    + +
    \ No newline at end of file diff --git a/Defs/PreceptDefs/Precepts_Incest.xml b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Incest.xml similarity index 100% rename from Defs/PreceptDefs/Precepts_Incest.xml rename to RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Incest.xml diff --git a/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Necrophilia.xml b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Necrophilia.xml new file mode 100644 index 0000000..43042a8 --- /dev/null +++ b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Necrophilia.xml @@ -0,0 +1,291 @@ + + + + + + Necrophilia + + UI/Issues/Necrophilia + + + + SexWithCorpse + + + + + + + Necrophilia_Abhorrent + Necrophilia + + Necrophilia beings is deeply evil. + Low + 40 + 100 + 30 + +
  • Necrophile
  • +
    + +
  • + SexWithCorpse + Necrophilia_Abhorrent +
  • +
  • + SexWithCorpse + Necrophilia_Know_Abhorrent +
  • +
    +
    + + + Necrophilia_Horrible + Necrophilia + + Necrophilia is a horrible thing. + Low + 30 + 200 + 30 + +
  • Necrophile
  • +
    + +
  • + SexWithCorpse + Necrophilia_Horrible +
  • +
  • + SexWithCorpse + Necrophilia_Know_Horrible +
  • +
    +
    + + + Necrophilia_Disapproved + Necrophilia + + Necrophilia is extremely distasteful. + Low + 20 + 300 + 20 + +
  • Necrophile
  • +
    + +
  • + SexWithCorpse + Necrophilia_Disapproved +
  • +
  • + SexWithCorpse + Necrophilia_Know_Disapproved +
  • +
    +
    + + + Necrophilia_Acceptable + Necrophilia + + Necrophilia is a normal, unremarkable part of life. + Medium + 10 + 10 + true + +
  • Necrophile
  • +
    +
    + + + Necrophilia_Approved + Necrophilia + + Fucking corpse is approval. + High + 0 + 1000 + +
  • Necrophile
  • +
  • Lewd
  • +
    + +
  • + SexWithCorpse + Necrophilia_Approved +
  • +
  • + SexWithCorpse + Necrophilia_Know_Approved +
  • +
    +
    + + + + + + Necrophilia_Abhorrent + 6 + 1 + +
  • Necrophiliac
  • +
    + +
  • Necrophilia_Approved
  • +
  • Necrophilia_Acceptable
  • +
    + +
  • + + I had fucked corpse. + -15 +
  • +
    +
    + + + Necrophilia_Know_Abhorrent + Thought_MemorySocial + 15 + 100 + 3 + +
  • Necrophiliac
  • +
    + +
  • Necrophilia_Approved
  • +
  • Necrophilia_Acceptable
  • +
    + +
  • + + -30 +
  • +
    +
    + + + Necrophilia_Horrible + 6 + 1 + +
  • Necrophiliac
  • +
    + +
  • Necrophilia_Approved
  • +
  • Necrophilia_Acceptable
  • +
    + +
  • + + I had fucked corpse. + -10 +
  • +
    +
    + + + Necrophilia_Know_Horrible + Thought_MemorySocial + 15 + 100 + 3 + +
  • Necrophiliac
  • +
    + +
  • Necrophilia_Approved
  • +
  • Necrophilia_Acceptable
  • +
    + +
  • + + -20 +
  • +
    +
    + + + Necrophilia_Disapproved + 6 + 1 + +
  • Necrophiliac
  • +
    + +
  • Necrophilia_Approved
  • +
  • Necrophilia_Acceptable
  • +
    + +
  • + + I had fucked corpse. + -5 +
  • +
    +
    + + + Necrophilia_Know_Disapproved + Thought_MemorySocial + 15 + 100 + 3 + +
  • Necrophiliac
  • +
    + +
  • Necrophilia_Approved
  • +
  • Necrophilia_Acceptable
  • +
    + +
  • + + -10 +
  • +
    +
    + + + Necrophilia_Approved + 6 + 1 + +
  • Necrophilia_Abhorrent
  • +
  • Necrophilia_Horrible
  • +
  • Necrophilia_Disapproved
  • +
    + +
  • + + I had fucked corpse. + 4 +
  • +
    +
    + + + Necrophilia_Know_Approved + Thought_MemorySocial + 25 + 100 + 3 + +
  • Necrophilia_Abhorrent
  • +
  • Necrophilia_Horrible
  • +
  • Necrophilia_Disapproved
  • +
    + +
  • + + 5 +
  • +
    +
    + +
    \ No newline at end of file diff --git a/Defs/PreceptDefs/Precepts_Rape.xml b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Rape.xml similarity index 100% rename from Defs/PreceptDefs/Precepts_Rape.xml rename to RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Rape.xml diff --git a/Defs/PreceptDefs/Precepts_Ritual_sex.xml b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Ritual_sex.xml similarity index 69% rename from Defs/PreceptDefs/Precepts_Ritual_sex.xml rename to RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Ritual_sex.xml index 87d0c7b..f7280cb 100644 --- a/Defs/PreceptDefs/Precepts_Ritual_sex.xml +++ b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Ritual_sex.xml @@ -48,4 +48,26 @@ + + + DrugOrgyCeremony + + An orgy using massive aphrodisiac. + Ritual + Medium + UI/Issues/Gangbang + Precept_Ritual + DrugOrgy + true + false + 1.0 + 100 + false + true + false + true + +
  • Lewd
  • +
    +
    \ No newline at end of file diff --git a/Defs/PreceptDefs/Precepts_Sex.xml b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Sex.xml similarity index 100% rename from Defs/PreceptDefs/Precepts_Sex.xml rename to RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Sex.xml diff --git a/Defs/PreceptDefs/Precepts_SocialAffection.xml b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_SocialAffection.xml similarity index 100% rename from Defs/PreceptDefs/Precepts_SocialAffection.xml rename to RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_SocialAffection.xml diff --git a/Defs/PreceptDefs/Precepts_Submissive.xml b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Submissive.xml similarity index 100% rename from Defs/PreceptDefs/Precepts_Submissive.xml rename to RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Submissive.xml diff --git a/Defs/PreceptDefs/RitualPatternDefs/RitualPatterns_sex.xml b/RJWSexperience_Ideology/Defs/PreceptDefs/RitualPatternDefs/RitualPatterns_sex.xml similarity index 71% rename from Defs/PreceptDefs/RitualPatternDefs/RitualPatterns_sex.xml rename to RJWSexperience_Ideology/Defs/PreceptDefs/RitualPatternDefs/RitualPatterns_sex.xml index 1fcfe7b..011ebd1 100644 --- a/Defs/PreceptDefs/RitualPatternDefs/RitualPatterns_sex.xml +++ b/RJWSexperience_Ideology/Defs/PreceptDefs/RitualPatternDefs/RitualPatterns_sex.xml @@ -17,8 +17,8 @@ A ritualistic gangbang. The organizer will give a speech to excite the crowd, then fuck the victim. If the organizer cannot fuck victim, the ritual will be canceled. UI/Issues/Gangbang false - Gangbang + @@ -28,8 +28,19 @@ A ritualistic animal gangbang. The organizer will give a speech to excite the crowd, then animals begin fuck victim. UI/Commands/Breeding_Pawn_off false - BestialGangbang + + + + + DrugOrgy + drug orgy + An orgy with large amounts of aphrodisiac. Participants will gather around a burnbong or incense shrine, light it on fire, and fuck each other while inhaling the fumes. + UI/Icons/Rituals/SmokeCircle + false + DrugOrgy + DrugOrgy + DrugOrgy \ No newline at end of file diff --git a/Defs/PreconfiguredIdeos/IdeoPresetDefs_sex.xml b/RJWSexperience_Ideology/Defs/PreconfiguredIdeos/IdeoPresetDefs_sex.xml similarity index 100% rename from Defs/PreconfiguredIdeos/IdeoPresetDefs_sex.xml rename to RJWSexperience_Ideology/Defs/PreconfiguredIdeos/IdeoPresetDefs_sex.xml diff --git a/Defs/Rituals/Ritual_Behaviors_sex.xml b/RJWSexperience_Ideology/Defs/Rituals/Ritual_Behaviors_sex.xml similarity index 92% rename from Defs/Rituals/Ritual_Behaviors_sex.xml rename to RJWSexperience_Ideology/Defs/Rituals/Ritual_Behaviors_sex.xml index 78cf13d..90a9320 100644 --- a/Defs/Rituals/Ritual_Behaviors_sex.xml +++ b/RJWSexperience_Ideology/Defs/Rituals/Ritual_Behaviors_sex.xml @@ -33,7 +33,7 @@ -
  • +
  • Spectate
  • @@ -81,7 +81,7 @@
  • -
  • +
  • Gangbang True @@ -103,7 +103,7 @@
  • -
  • +
  • Gangbang
  • @@ -222,7 +222,7 @@
  • -
  • +
  • Spectate True @@ -269,4 +269,23 @@ + + DrugOrgy + 7500 + + Participants + participate + +
  • + DrugOrgy + +
  • + 1.0 +
  • + + +
    + + + \ No newline at end of file diff --git a/Defs/Rituals/Ritual_Outcomes_sex.xml b/RJWSexperience_Ideology/Defs/Rituals/Ritual_Outcomes_sex.xml similarity index 73% rename from Defs/Rituals/Ritual_Outcomes_sex.xml rename to RJWSexperience_Ideology/Defs/Rituals/Ritual_Outcomes_sex.xml index 0899557..d8159cf 100644 --- a/Defs/Rituals/Ritual_Outcomes_sex.xml +++ b/RJWSexperience_Ideology/Defs/Rituals/Ritual_Outcomes_sex.xml @@ -9,7 +9,7 @@
  • - moralist + initiator 0.10
  • @@ -102,7 +102,7 @@
  • - moralist + initiator 0.10
  • @@ -180,4 +180,75 @@ + + DrugOrgy + Depending on ritual quality, participants will get between {MINMOOD} and {MAXMOOD} mood for {MOODDAYS} days. + RitualOutcomeEffectWorker_RemoveConsumableBuilding + +
  • If the {0} is satisfying, one of the participants might gain an inspiration.
  • +
    + +
  • +
  • + + + +
  • (1, -0.50)
  • +
  • (3, 0.0)
  • +
  • (5, 0.10)
  • +
  • (10, 0.30)
  • + + + +
  • + + Impressiveness + + +
  • 0, 0
  • +
  • 50, 0.1
  • +
  • 120, 0.2
  • + + + +
  • + + 0.7 + Sex + 0.7 +
  • +
    + +
  • + + 0.05 + TerribleOrgy + The {0} was terrible! + -2 +
  • +
  • + + 0.10 + BoringOrgy + The {0} was boring. + -1 +
  • +
  • + + 0.6 + FunOrgy + The {0} was satisfying. + There's a 5% chance that a random participant gets an inspiration. + 1 +
  • +
  • + + 0.25 + UnforgettableOrgy + The {0} was spectacular! + There's a 10% chance that a random participant gets an inspiration. + 2 +
  • +
    +
    \ No newline at end of file diff --git a/Defs/Rituals/Ritual_Targets_sex.xml b/RJWSexperience_Ideology/Defs/Rituals/Ritual_Targets_sex.xml similarity index 50% rename from Defs/Rituals/Ritual_Targets_sex.xml rename to RJWSexperience_Ideology/Defs/Rituals/Ritual_Targets_sex.xml index 67e9ca5..5805f34 100644 --- a/Defs/Rituals/Ritual_Targets_sex.xml +++ b/RJWSexperience_Ideology/Defs/Rituals/Ritual_Targets_sex.xml @@ -4,4 +4,12 @@ RitualSpotOrAltar_Gangbang RitualObligationTargetWorker_AnyRitualSpotOrAltar_Scarification + + + DrugOrgy + RitualObligationTargetWorker_ConsumableBuilding + +
  • Burnbong_Aphrodisiac
  • +
    +
    \ No newline at end of file diff --git a/RJWSexperience_Ideology/Defs/ThingDefs/Buildings_Ideo_sex.xml b/RJWSexperience_Ideology/Defs/ThingDefs/Buildings_Ideo_sex.xml new file mode 100644 index 0000000..eaaba10 --- /dev/null +++ b/RJWSexperience_Ideology/Defs/ThingDefs/Buildings_Ideo_sex.xml @@ -0,0 +1,134 @@ + + + + Burnbong_Aphrodisiac + + A wood structure packed with humpshroom. It can be ignited during a ritual and produce a huge amount of humpshroom smoke for a few hours, after which it is destroyed. + RealtimeOnly + + Graphic_Single + Things/Building/Misc/Burnbong/Burnbong + (1.2,1.2) + + (0.92, 1 ,0.92) + + + (1,1) + + 30 + 30 + + + 30 + + false + + 50 + 10000 + 25 + + +
  • + BurnbongSmoke +
  • +
  • + 0.5 + (0, 0, 0.42) +
  • +
  • + HumpShroomEffect + true + 10 + 0.01 +
  • +
    +
    + + + + Autobong_Aphrodisiac + + An automatic humpshroom-burning device which generates an estro-smoke cloud around itself. Anyone in the cloud will become horny over time. + Building + + Things/Building/Misc/Autobong/Autobong + Graphic_Single + (2,2) + CutoutComplex + + Things/Building/Misc/Autobong/Autobong + Building + PassThroughOnly + 42 + Normal + RealtimeOnly + 0.20 + false + (2,2) + + 80 + 800 + + true + + 10 + 3 + + +
  • Metallic
  • +
  • Woody
  • +
    + 100 + true + +
  • MicroelectronicsBasics
  • +
    + +
  • + 0.35 + 10.0 + + +
  • HumpShroom
  • + + + 1 + true + true + +
  • + 10 + (252,187,113,0) +
  • +
  • + CompGatherSpot +
  • +
  • + CompPowerTrader + 150 + true +
  • +
  • +
  • + HumpShroomEffect + 4.9 + 0.005 + true +
  • +
  • + BurnbongSmoke + 4.9 + 4 + AutobongSmoke + 25 +
  • +
    + Misc + true + +
  • PlaceWorker_SmokeCloudMaker
  • +
    +
    + + +
    \ No newline at end of file diff --git a/Defs/ThoughtDefs/Thoughts_Ritual_sex_Quality.xml b/RJWSexperience_Ideology/Defs/ThoughtDefs/Thoughts_Ritual_sex_Quality.xml similarity index 51% rename from Defs/ThoughtDefs/Thoughts_Ritual_sex_Quality.xml rename to RJWSexperience_Ideology/Defs/ThoughtDefs/Thoughts_Ritual_sex_Quality.xml index be1c2ed..9488047 100644 --- a/Defs/ThoughtDefs/Thoughts_Ritual_sex_Quality.xml +++ b/RJWSexperience_Ideology/Defs/ThoughtDefs/Thoughts_Ritual_sex_Quality.xml @@ -57,4 +57,59 @@ + + TerribleOrgy + Thought_AttendedRitual + 6 + 3 + +
  • + + That orgy was terrible. ugh. + -3 +
  • +
    +
    + + + BoringOrgy + Thought_AttendedRitual + 6 + 3 + +
  • + + That orgy was not good. Wish I never went. + -1 +
  • +
    +
    + + + FunOrgy + Thought_AttendedRitual + 6 + 3 + +
  • + + That was a fun orgy. It really satisfied me. + 8 +
  • +
    +
    + + + UnforgettableOrgy + Thought_AttendedRitual + 6 + 3 + +
  • + + That orgy was awesome! Everything was perfect. + 16 +
  • +
    +
    \ No newline at end of file diff --git a/RJWSexperience_Ideology/Patches/RJW_Drugs.xml b/RJWSexperience_Ideology/Patches/RJW_Drugs.xml new file mode 100644 index 0000000..e0a93bb --- /dev/null +++ b/RJWSexperience_Ideology/Patches/RJW_Drugs.xml @@ -0,0 +1,47 @@ + + + + + Defs/HediffDef[defName="HumpShroomEffect"]/stages + + +
  • + + + 1.25 + 0.25 + +
  • +
  • + 0.3 + + 1.1 + + 2 + 0.5 + +
  • +
  • + 0.6 + + 1.33 + + 3 + 0.75 + +
  • +
  • + 0.9 + + 1.33 + + 5 + 1.5 + +
  • +
    +
    +
    + + +
    \ No newline at end of file diff --git a/RJWSexperience_Ideology/Patches/RJW_Precepts.xml b/RJWSexperience_Ideology/Patches/RJW_Precepts.xml new file mode 100644 index 0000000..a36d408 --- /dev/null +++ b/RJWSexperience_Ideology/Patches/RJW_Precepts.xml @@ -0,0 +1,29 @@ + + + + + Defs/PreceptDef[defName="Corpses_DontCare"]/requiredMemes + +
  • Necrophile
  • +
    +
    + + + Defs/PreceptDef[defName="Corpses_DontCare"]/associatedMemes + +
  • Necrophile
  • +
    +
    + + + Defs/PreceptDef[defName="Lovin_FreeApproved"] + + + 0.5 + 0.25 + + + + + +
    \ No newline at end of file diff --git a/RJWSexperience_Ideology/Patches/RJW_StatDefs_Ideo.xml b/RJWSexperience_Ideology/Patches/RJW_StatDefs_Ideo.xml new file mode 100644 index 0000000..e7b2e8d --- /dev/null +++ b/RJWSexperience_Ideology/Patches/RJW_StatDefs_Ideo.xml @@ -0,0 +1,14 @@ + + + + + Defs/StatDef[defName="Vulnerability"]/parts + +
  • + 0.5 +
  • +
    +
    + + +
    \ No newline at end of file diff --git a/Patches/RJW_ThoughtDefs.xml b/RJWSexperience_Ideology/Patches/RJW_ThoughtDefs.xml similarity index 100% rename from Patches/RJW_ThoughtDefs.xml rename to RJWSexperience_Ideology/Patches/RJW_ThoughtDefs.xml diff --git a/Patches/RJW_ThoughtDefsDeath.xml b/RJWSexperience_Ideology/Patches/RJW_ThoughtDefsDeath.xml similarity index 100% rename from Patches/RJW_ThoughtDefsDeath.xml rename to RJWSexperience_Ideology/Patches/RJW_ThoughtDefsDeath.xml diff --git a/Patches/RJW_ThoughtDefsLost.xml b/RJWSexperience_Ideology/Patches/RJW_ThoughtDefsLost.xml similarity index 100% rename from Patches/RJW_ThoughtDefsLost.xml rename to RJWSexperience_Ideology/Patches/RJW_ThoughtDefsLost.xml diff --git a/Textures/Things/Item/CumBucket.png b/Textures/Things/Item/CumBucket.png new file mode 100644 index 0000000000000000000000000000000000000000..5e0e4a6821debd1790836f530260f5e4914124d3 GIT binary patch literal 5253 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 LNkvXXu0mjf!0_pe literal 0 HcmV?d00001 diff --git a/Textures/UI/Issues/Necrophilia.png b/Textures/UI/Issues/Necrophilia.png new file mode 100644 index 0000000000000000000000000000000000000000..4e43a593989a159f2ba0a85dad611140f89bc752 GIT binary patch literal 8642 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 MvZ^w5Ql=sQ2Xh$l6#xJL literal 0 HcmV?d00001 diff --git a/Textures/UI/Memes/Necrophile.png b/Textures/UI/Memes/Necrophile.png new file mode 100644 index 0000000000000000000000000000000000000000..5b2bf617004d4672320b41988e0a36965d6df7bd GIT binary patch literal 9010 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