diff --git a/RJWSexperience/IdeologyAddon/Ideology/RJW_Patch_Ideo.cs b/RJWSexperience/IdeologyAddon/Ideology/RJW_Patch_Ideo.cs
index 7cbf34d..21d665e 100644
--- a/RJWSexperience/IdeologyAddon/Ideology/RJW_Patch_Ideo.cs
+++ b/RJWSexperience/IdeologyAddon/Ideology/RJW_Patch_Ideo.cs
@@ -9,6 +9,10 @@ using RimWorld;
using Verse;
using UnityEngine;
using SexperienceDefOf = RJWSexperience.VariousDefOf;
+using rjw.Modules.Interactions.Internals.Implementation;
+using rjw.Modules.Interactions.Contexts;
+using rjw.Modules.Interactions.Objects;
+using rjw.Modules.Interactions.Rules.InteractionRules;
namespace RJWSexperience.Ideology
{
@@ -295,42 +299,50 @@ namespace RJWSexperience.Ideology
///
/// Set prefer sextype using precepts
///
- [HarmonyPatch(typeof(SexUtility), "DetermineSexScores")]
+ [HarmonyPatch(typeof(InteractionSelectorService), "Score")]
public static class RJW_Patch_DetermineSexScores
{
- public static void Postfix(Pawn pawn, Pawn partner, bool rape, bool whoring, Pawn receiving, List __result)
+ public static void Postfix(InteractionContext context, InteractionWithExtension interaction, IInteractionRule rule, ref float __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);
+ Ideo ideo = context.Inputs.Initiator.Ideo;
+ if (ideo != null) PreceptSextype(ideo, context.Inputs.Initiator.GetStatValue(xxx.sex_drive_stat), __result, 0, interaction);
+
+ ideo = context.Inputs.Partner.Ideo;
+ if (!context.Inputs.IsRape && ideo != null) PreceptSextype(ideo, context.Inputs.Partner.GetStatValue(xxx.sex_drive_stat), __result, 1, interaction);
}
- public static void PreceptSextype(Ideo ideo, float sexdrive, List result, int offset)
+ public static List promiscuousSexTypes = new List {
+ "DoublePenetration",
+ "Scissoring",
+ "Sixtynine",
+ "Fisting",
+ };
+
+ public static void PreceptSextype(Ideo ideo, float sexdrive, float result, int offset, InteractionWithExtension interaction)
{
float mult = 8.0f * Math.Max(0.3f, 1 / Math.Max(0.01f, sexdrive));
- if (ideo.HasPrecept(VariousDefOf.Sex_VaginalOnly))
+ if ((interaction.Extension.rjwSextype == "Vaginal")
+ && ideo.HasPrecept(VariousDefOf.Sex_VaginalOnly))
{
- result[0 + offset] *= mult;
+ result *= mult;
}
- else if (ideo.HasPrecept(VariousDefOf.Sex_AnalOnly))
+ else if ((interaction.Extension.rjwSextype == "Anal")
+ && ideo.HasPrecept(VariousDefOf.Sex_AnalOnly))
{
- result[2 + offset] *= mult;
- result[6 + offset] *= mult;
+ result *= mult;
}
- else if (ideo.HasPrecept(VariousDefOf.Sex_OralOnly))
+ else if ((interaction.Extension.rjwSextype == "Cunnilingus" || interaction.Extension.rjwSextype == "Fellatio" || interaction.Extension.rjwSextype == "Beakjob")
+ && ideo.HasPrecept(VariousDefOf.Sex_OralOnly))
{
- result[4 + offset] *= mult;
- result[8 + offset] *= mult;
+ result *= mult;
}
- else if (ideo.HasPrecept(VariousDefOf.Sex_Promiscuous))
+ else if (promiscuousSexTypes.Contains(interaction.Extension.rjwSextype)
+ && ideo.HasPrecept(VariousDefOf.Sex_Promiscuous))
{
- result[10 + offset] *= mult;
- result[20 + offset] *= mult;
- result[24 + offset] *= mult;
- result[26 + offset] *= mult;
+ result *= mult;
}
}
}
diff --git a/RJWSexperience_Ideology/Assemblies/RJWSexperience.Ideology.dll b/RJWSexperience_Ideology/Assemblies/RJWSexperience.Ideology.dll
index d9fd54b..e1b31e8 100644
Binary files a/RJWSexperience_Ideology/Assemblies/RJWSexperience.Ideology.dll and b/RJWSexperience_Ideology/Assemblies/RJWSexperience.Ideology.dll differ