From 22ad8c56a854665580337b7cf4c5f25527551c19 Mon Sep 17 00:00:00 2001 From: amevarashi Date: Sun, 19 Jun 2022 17:40:38 +0500 Subject: [PATCH] Massive change to SexAppraser Ideology patch --- .../IdeologyAddon/Ideology/IssueDefOf.cs | 10 -- .../PreceptDefExtension_ModifyPreference.cs | 84 +++++++++++++ .../IdeologyAddon/Ideology/RJW_Patch_Ideo.cs | 69 +++-------- .../IdeologyAddon/IdeologyAddon.csproj | 2 +- RJWSexperience/IdeologyAddon/VariousDefOf.cs | 4 - .../Defs/PreceptDefs/Precepts_Bestiality.xml | 66 ++++++++++ .../Defs/PreceptDefs/Precepts_Incest.xml | 117 ++++++++++++++++++ 7 files changed, 288 insertions(+), 64 deletions(-) delete mode 100644 RJWSexperience/IdeologyAddon/Ideology/IssueDefOf.cs create mode 100644 RJWSexperience/IdeologyAddon/Ideology/PreceptDefExtension_ModifyPreference.cs diff --git a/RJWSexperience/IdeologyAddon/Ideology/IssueDefOf.cs b/RJWSexperience/IdeologyAddon/Ideology/IssueDefOf.cs deleted file mode 100644 index 26ec063..0000000 --- a/RJWSexperience/IdeologyAddon/Ideology/IssueDefOf.cs +++ /dev/null @@ -1,10 +0,0 @@ -using RimWorld; - -namespace RJWSexperience.Ideology.Ideology -{ - [DefOf] - public static class IssueDefOf - { - [MayRequireIdeology] public static readonly IssueDef Sextype; - } -} diff --git a/RJWSexperience/IdeologyAddon/Ideology/PreceptDefExtension_ModifyPreference.cs b/RJWSexperience/IdeologyAddon/Ideology/PreceptDefExtension_ModifyPreference.cs new file mode 100644 index 0000000..faf9a16 --- /dev/null +++ b/RJWSexperience/IdeologyAddon/Ideology/PreceptDefExtension_ModifyPreference.cs @@ -0,0 +1,84 @@ +using RimWorld; +using rjw; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using Verse; + +namespace RJWSexperience.Ideology +{ + public class PreceptDefExtension_ModifyPreference : DefModExtension + { + [SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")] + public List rules; + + public void Apply(Pawn pawn, Pawn partner, ref float preference) + { + foreach (Rule rule in rules) + { + if (rule.Applies(pawn, partner)) + preference *= rule.multiplier; + } + } + + public class Rule + { + [SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")] + public float multiplier = 1f; + [SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")] + public Filter filter; + + public bool Applies(Pawn pawn, Pawn partner) + { + if (filter == null) + return true; + + if (filter.isAnimal != null && filter.isAnimal != partner.IsAnimal()) + return false; + + if (filter.isVeneratedAnimal != null && filter.isVeneratedAnimal != pawn.Ideo.IsVeneratedAnimal(partner)) + return false; + + if (!filter.hasOneOfRelations.NullOrEmpty()) + { + if (pawn.relations == null) + return false; + + bool found = false; + foreach (PawnRelationDef relationDef in filter.hasOneOfRelations) + { + if (pawn.relations?.DirectRelationExists(relationDef, partner) == true) + { + found = true; + break; + } + } + if (!found) + return false; + } + + if (!filter.hasNoneOfRelations.NullOrEmpty() && pawn.relations != null) + { + foreach (PawnRelationDef relationDef in filter.hasNoneOfRelations) + { + if (pawn.relations.DirectRelationExists(relationDef, partner)) + return false; + } + } + + return true; + } + } + + public class Filter + { + [SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")] + public bool? isAnimal; + [SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")] + public bool? isVeneratedAnimal; + [SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")] + public List hasOneOfRelations; + [SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")] + public List hasNoneOfRelations; + } + } +} diff --git a/RJWSexperience/IdeologyAddon/Ideology/RJW_Patch_Ideo.cs b/RJWSexperience/IdeologyAddon/Ideology/RJW_Patch_Ideo.cs index a27cef9..6770e0a 100644 --- a/RJWSexperience/IdeologyAddon/Ideology/RJW_Patch_Ideo.cs +++ b/RJWSexperience/IdeologyAddon/Ideology/RJW_Patch_Ideo.cs @@ -278,61 +278,32 @@ namespace RJWSexperience.Ideology public static float PreceptSextype(Ideo ideo, float sexdrive, float score, InteractionWithExtension interaction) { - Precept sextypePrecept = ideo.GetPreceptOfIssue(Ideology.IssueDefOf.Sextype); - bool boostSextype = sextypePrecept.def.GetModExtension().HasSextype(interaction.Extension.rjwSextype); - - if (!boostSextype) - return score; - - float mult = 8.0f * Math.Max(0.3f, 1 / Math.Max(0.01f, sexdrive)); - return score * mult; + for (int i = 0; i < ideo.PreceptsListForReading.Count; i++) + { + if (ideo.PreceptsListForReading[i].def.GetModExtension()?.HasSextype(interaction.Extension.rjwSextype) == true) + { + float mult = 8.0f * Math.Max(0.3f, 1 / Math.Max(0.01f, sexdrive)); + return score * mult; + } + } + return score; } } - [HarmonyPatch(typeof(SexAppraiser), "would_fuck", new Type[] { typeof(Pawn), typeof(Pawn), typeof(bool), typeof(bool), typeof(bool) })] + [HarmonyPatch(typeof(SexAppraiser), nameof(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) + public static void Postfix(Pawn fucker, Pawn fucked, ref float __result) { - if (xxx.is_human(fucker)) - { - Ideo ideo = fucker.Ideo; - if (ideo != null) - { - if (IdeoUtility.IsIncest(fucker, 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; - } - } - } - } + if (!xxx.is_human(fucker)) + return; + + Ideo ideo = fucker.Ideo; + if (ideo == null) + return; + + for(int i = 0; i < ideo.PreceptsListForReading.Count; i++) + ideo.PreceptsListForReading[i].def.GetModExtension()?.Apply(fucker, fucked, ref __result); } } diff --git a/RJWSexperience/IdeologyAddon/IdeologyAddon.csproj b/RJWSexperience/IdeologyAddon/IdeologyAddon.csproj index 203e5b5..58b0fcf 100644 --- a/RJWSexperience/IdeologyAddon/IdeologyAddon.csproj +++ b/RJWSexperience/IdeologyAddon/IdeologyAddon.csproj @@ -45,9 +45,9 @@ - + diff --git a/RJWSexperience/IdeologyAddon/VariousDefOf.cs b/RJWSexperience/IdeologyAddon/VariousDefOf.cs index a708ef1..752a784 100644 --- a/RJWSexperience/IdeologyAddon/VariousDefOf.cs +++ b/RJWSexperience/IdeologyAddon/VariousDefOf.cs @@ -35,8 +35,6 @@ namespace RJWSexperience.Ideology [MayRequireIdeology] public static readonly HistoryEventDef Virgin_TakenM = DefDatabase.GetNamed("Virgin_TakenM"); [MayRequireIdeology] public static readonly HistoryEventDef Virgin_TookF = DefDatabase.GetNamed("Virgin_TookF"); [MayRequireIdeology] public static readonly HistoryEventDef Virgin_TookM = DefDatabase.GetNamed("Virgin_TookM"); - [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"); [MayRequireIdeology] public static readonly PreceptDef Bestiality_Acceptable = DefDatabase.GetNamed("Bestiality_Acceptable"); [MayRequireIdeology] public static readonly PreceptDef Bestiality_OnlyVenerated = DefDatabase.GetNamed("Bestiality_OnlyVenerated"); @@ -46,8 +44,6 @@ namespace RJWSexperience.Ideology [MayRequireIdeology] public static readonly PreceptDef Rape_Disapproved = DefDatabase.GetNamed("Rape_Disapproved"); [MayRequireIdeology] public static readonly PreceptDef Rape_Acceptable = DefDatabase.GetNamed("Rape_Acceptable"); [MayRequireIdeology] public static readonly PreceptDef Rape_Honorable = DefDatabase.GetNamed("Rape_Honorable"); - [MayRequireIdeology] public static readonly PreceptDef Incestuos_Disapproved = DefDatabase.GetNamed("Incestuos_Disapproved"); - [MayRequireIdeology] public static readonly PreceptDef Incestuos_Forbidden = DefDatabase.GetNamed("Incestuos_Forbidden"); [MayRequireIdeology] public static readonly PreceptDef Incestuos_IncestOnly = DefDatabase.GetNamed("Incestuos_IncestOnly"); [MayRequireIdeology] public static readonly PreceptDef Incestuos_Disapproved_CloseOnly = DefDatabase.GetNamed("Incestuos_Disapproved_CloseOnly"); [MayRequireIdeology] public static readonly PreceptDef BabyFaction_AlwaysMother = DefDatabase.GetNamed("BabyFaction_AlwaysMother"); diff --git a/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Bestiality.xml b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Bestiality.xml index 6b2d444..6df89b8 100644 --- a/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Bestiality.xml +++ b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Bestiality.xml @@ -57,6 +57,18 @@ true + +
  • + +
  • + + true + + 0.05 +
  • + + +
    @@ -96,6 +108,18 @@ true + +
  • + +
  • + + true + + 0.1 +
  • + + +
    @@ -135,6 +159,18 @@ true + +
  • + +
  • + + true + + 0.5 +
  • + + +
    @@ -187,6 +223,24 @@ true + +
  • + +
  • + + true + + 2.0 +
  • +
  • + + false + + 0.05 +
  • + + +
    @@ -227,6 +281,18 @@ true + +
  • + +
  • + + true + + 2.0 +
  • + + +
    diff --git a/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Incest.xml b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Incest.xml index 2b1d430..bb578c6 100644 --- a/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Incest.xml +++ b/RJWSexperience_Ideology/Defs/PreceptDefs/Precepts_Incest.xml @@ -67,6 +67,30 @@ Incestuos + +
  • + +
  • + + +
  • Parent
  • +
  • Child
  • +
  • Sibling
  • +
  • HalfSibling
  • +
  • Grandparent
  • +
  • Grandchild
  • +
  • NephewOrNiece
  • +
  • UncleOrAunt
  • + + +
  • Spouse
  • +
    + + 0.5 + + + +
    @@ -113,6 +137,38 @@ Incestuos + +
  • + +
  • + + +
  • Parent
  • +
  • Child
  • +
  • Sibling
  • +
  • HalfSibling
  • +
  • Grandparent
  • +
  • Grandchild
  • +
  • NephewOrNiece
  • +
  • UncleOrAunt
  • +
  • GreatGrandparent
  • +
  • GreatGrandchild
  • +
  • GranduncleOrGrandaunt
  • +
  • GrandnephewOrGrandniece
  • +
  • CousinOnceRemoved
  • +
  • SecondCousin
  • +
  • Cousin
  • +
  • Kin
  • + + +
  • Spouse
  • +
    + + 0.5 + + + +
    @@ -159,6 +215,38 @@ Incestuos + +
  • + +
  • + + +
  • Parent
  • +
  • Child
  • +
  • Sibling
  • +
  • HalfSibling
  • +
  • Grandparent
  • +
  • Grandchild
  • +
  • NephewOrNiece
  • +
  • UncleOrAunt
  • +
  • GreatGrandparent
  • +
  • GreatGrandchild
  • +
  • GranduncleOrGrandaunt
  • +
  • GrandnephewOrGrandniece
  • +
  • CousinOnceRemoved
  • +
  • SecondCousin
  • +
  • Cousin
  • +
  • Kin
  • + + +
  • Spouse
  • +
    + + 0.1 + + + +
    @@ -210,6 +298,35 @@ true + +
  • + +
  • + + +
  • Parent
  • +
  • Child
  • +
  • Sibling
  • +
  • HalfSibling
  • +
  • Grandparent
  • +
  • Grandchild
  • +
  • NephewOrNiece
  • +
  • UncleOrAunt
  • +
  • GreatGrandparent
  • +
  • GreatGrandchild
  • +
  • GranduncleOrGrandaunt
  • +
  • GrandnephewOrGrandniece
  • +
  • CousinOnceRemoved
  • +
  • SecondCousin
  • +
  • Cousin
  • +
  • Kin
  • + + + 2.0 + + + +