From 226c09eca5430ddf24354428809c7a429ff2db95 Mon Sep 17 00:00:00 2001 From: amevarashi Date: Sat, 2 Jul 2022 23:05:19 +0500 Subject: [PATCH] Stop redefining incest with precepts --- RJWSexperience/IdeologyAddon/Harmony.cs | 4 ---- .../IdeologyAddon/Ideology/IdeoUtility.cs | 5 ++--- .../Ideology/Patches/RJW_Patch_Ideo.cs | 7 ++++++- .../Ideology/Patches/Rimworld_Patch.cs | 9 +++++++-- .../Ideology/Patches/Sexperience_Patch.cs | 10 ---------- RJWSexperience/IdeologyAddon/VariousDefOf.cs | 2 ++ .../Defs/PreceptDefs/Precepts_Incest.xml | 14 ++++++++++++-- 7 files changed, 29 insertions(+), 22 deletions(-) diff --git a/RJWSexperience/IdeologyAddon/Harmony.cs b/RJWSexperience/IdeologyAddon/Harmony.cs index e9c7824..c6939f2 100644 --- a/RJWSexperience/IdeologyAddon/Harmony.cs +++ b/RJWSexperience/IdeologyAddon/Harmony.cs @@ -15,10 +15,6 @@ namespace RJWSexperience.Ideology if (ModLister.HasActiveModWithName("RJW Sexperience")) { - harmony.Patch(AccessTools.Method("RJWSexperience.PawnExtensions:IsIncest"), - prefix: new HarmonyMethod(typeof(Sexperience_Patch_IsIncest), nameof(Sexperience_Patch_IsIncest.Prefix)), - postfix: null - ); harmony.Patch(AccessTools.Method("RJWSexperience.RJWUtility:ThrowVirginHIstoryEvent"), prefix: null, postfix: new HarmonyMethod(typeof(Sexperience_Patch_ThrowVirginHIstoryEvent), nameof(Sexperience_Patch_ThrowVirginHIstoryEvent.Postfix)) diff --git a/RJWSexperience/IdeologyAddon/Ideology/IdeoUtility.cs b/RJWSexperience/IdeologyAddon/Ideology/IdeoUtility.cs index 72f93ec..9e8fad4 100644 --- a/RJWSexperience/IdeologyAddon/Ideology/IdeoUtility.cs +++ b/RJWSexperience/IdeologyAddon/Ideology/IdeoUtility.cs @@ -37,16 +37,15 @@ namespace RJWSexperience.Ideology return true; } - public static bool IsIncest(Pawn pawn, Pawn partner) + public static bool IsIncest(Pawn pawn, Pawn partner, bool close) { IEnumerable relations = pawn.GetRelations(partner); if (relations.EnumerableNullOrEmpty()) return false; - bool wide = pawn.Ideo?.HasPrecept(VariousDefOf.Incestuos_Disapproved_CloseOnly) == true; foreach (PawnRelationDef relation in relations) { - if (wide) + if (close) { if (relation.incestOpinionOffset < 0) return true; diff --git a/RJWSexperience/IdeologyAddon/Ideology/Patches/RJW_Patch_Ideo.cs b/RJWSexperience/IdeologyAddon/Ideology/Patches/RJW_Patch_Ideo.cs index 8c143e7..cc7b79e 100644 --- a/RJWSexperience/IdeologyAddon/Ideology/Patches/RJW_Patch_Ideo.cs +++ b/RJWSexperience/IdeologyAddon/Ideology/Patches/RJW_Patch_Ideo.cs @@ -114,8 +114,13 @@ namespace RJWSexperience.Ideology.Patches public static void AfterSexHuman(Pawn human, Pawn partner, bool rape, bool isHumanReceiving = false) { - if (IdeoUtility.IsIncest(human, partner)) + if (IdeoUtility.IsIncest(human, partner, false)) { + if (IdeoUtility.IsIncest(human, partner, true)) + { + Find.HistoryEventsManager.RecordEvent(VariousDefOf.RJWSI_CloseRelativeSex.CreateEvent(human)); + Find.HistoryEventsManager.RecordEvent(VariousDefOf.RJWSI_CloseRelativeSex.CreateEvent(partner)); + } Find.HistoryEventsManager.RecordEvent(VariousDefOf.RJWSI_IncestuosSex.CreateEvent(human)); Find.HistoryEventsManager.RecordEvent(VariousDefOf.RJWSI_IncestuosSex.CreateEvent(partner)); } diff --git a/RJWSexperience/IdeologyAddon/Ideology/Patches/Rimworld_Patch.cs b/RJWSexperience/IdeologyAddon/Ideology/Patches/Rimworld_Patch.cs index 1316dda..4169593 100644 --- a/RJWSexperience/IdeologyAddon/Ideology/Patches/Rimworld_Patch.cs +++ b/RJWSexperience/IdeologyAddon/Ideology/Patches/Rimworld_Patch.cs @@ -12,8 +12,13 @@ namespace RJWSexperience.Ideology.Patches { public static void Postfix(Pawn firstPawn, Pawn secondPawn) { - if (IdeoUtility.IsIncest(firstPawn, secondPawn)) + if (IdeoUtility.IsIncest(firstPawn, secondPawn, false)) { + if (IdeoUtility.IsIncest(firstPawn, secondPawn, true)) + { + Find.HistoryEventsManager.RecordEvent(VariousDefOf.RJWSI_CloseRelativeMarriage.CreateEvent(firstPawn)); + Find.HistoryEventsManager.RecordEvent(VariousDefOf.RJWSI_CloseRelativeMarriage.CreateEvent(secondPawn)); + } Find.HistoryEventsManager.RecordEvent(VariousDefOf.Incestuos_Marriage.CreateEvent(firstPawn)); Find.HistoryEventsManager.RecordEvent(VariousDefOf.Incestuos_Marriage.CreateEvent(secondPawn)); } @@ -31,7 +36,7 @@ namespace RJWSexperience.Ideology.Patches public static void Postfix(Pawn otherPawn, Pawn ___pawn, ref float __result) { Ideo ideo = ___pawn.Ideo; - if (ideo?.HasPrecept(VariousDefOf.Incestuos_IncestOnly) == true && IdeoUtility.IsIncest(___pawn, otherPawn)) + if (ideo?.HasPrecept(VariousDefOf.Incestuos_IncestOnly) == true && IdeoUtility.IsIncest(___pawn, otherPawn, false)) { __result *= 8f; } diff --git a/RJWSexperience/IdeologyAddon/Ideology/Patches/Sexperience_Patch.cs b/RJWSexperience/IdeologyAddon/Ideology/Patches/Sexperience_Patch.cs index 7b62a84..d8ccc78 100644 --- a/RJWSexperience/IdeologyAddon/Ideology/Patches/Sexperience_Patch.cs +++ b/RJWSexperience/IdeologyAddon/Ideology/Patches/Sexperience_Patch.cs @@ -31,14 +31,4 @@ namespace RJWSexperience.Ideology.Patches } } } - - public static class Sexperience_Patch_IsIncest - { - public static bool Prefix(Pawn pawn, Pawn otherpawn, ref bool __result) - { - __result = IdeoUtility.IsIncest(pawn, otherpawn); - return false; - } - } - } diff --git a/RJWSexperience/IdeologyAddon/VariousDefOf.cs b/RJWSexperience/IdeologyAddon/VariousDefOf.cs index b9f38dc..078c84a 100644 --- a/RJWSexperience/IdeologyAddon/VariousDefOf.cs +++ b/RJWSexperience/IdeologyAddon/VariousDefOf.cs @@ -31,8 +31,10 @@ namespace RJWSexperience.Ideology [MayRequireIdeology] public static readonly HistoryEventDef OralSex = DefDatabase.GetNamed("OralSex"); [MayRequireIdeology] public static readonly HistoryEventDef MiscSex = DefDatabase.GetNamed("MiscSex"); [MayRequireIdeology] public static readonly HistoryEventDef PromiscuousSex = DefDatabase.GetNamed("PromiscuousSex"); + [MayRequireIdeology] public static readonly HistoryEventDef RJWSI_CloseRelativeMarriage = DefDatabase.GetNamed("RJWSI_CloseRelativeMarriage"); [MayRequireIdeology] public static readonly HistoryEventDef Incestuos_Marriage = DefDatabase.GetNamed("Incestuos_Marriage"); [MayRequireIdeology] public static readonly HistoryEventDef RJWSI_NonIncestuosMarriage = DefDatabase.GetNamed("RJWSI_NonIncestuosMarriage"); + [MayRequireIdeology] public static readonly HistoryEventDef RJWSI_CloseRelativeSex = DefDatabase.GetNamed("RJWSI_CloseRelativeSex"); [MayRequireIdeology] public static readonly HistoryEventDef RJWSI_IncestuosSex = DefDatabase.GetNamed("RJWSI_IncestuosSex"); [MayRequireIdeology] public static readonly HistoryEventDef RJWSI_NonIncestuosSex = DefDatabase.GetNamed("RJWSI_NonIncestuosSex"); [MayRequireIdeology] public static readonly HistoryEventDef SexWithCorpse = DefDatabase.GetNamed("SexWithCorpse"); diff --git a/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Incest.xml b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Incest.xml index 2ea829f..7a95ea6 100644 --- a/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Incest.xml +++ b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Incest.xml @@ -8,6 +8,11 @@ UI/Issues/Incest + + RJWSI_CloseRelativeMarriage + + + Incestuos_Marriage @@ -18,6 +23,11 @@ + + RJWSI_CloseRelativeSex + + + RJWSI_IncestuosSex @@ -52,11 +62,11 @@ 100
  • - Incestuos_Marriage + RJWSI_CloseRelativeMarriage IncestuosMarriage_Disapproved
  • - RJWSI_IncestuosSex + RJWSI_CloseRelativeSex Sex_Know_Incest_Disapproved