diff --git a/Source/IdeologyAddon/HistoryEvents/HistoryEventDefExtensionMethods.cs b/Source/IdeologyAddon/HistoryEvents/HistoryEventDefExtensionMethods.cs
index 8f1a4ab..808170c 100644
--- a/Source/IdeologyAddon/HistoryEvents/HistoryEventDefExtensionMethods.cs
+++ b/Source/IdeologyAddon/HistoryEvents/HistoryEventDefExtensionMethods.cs
@@ -2,6 +2,7 @@
using Verse;
using System.Linq;
using System.Collections.Generic;
+using System.Runtime.CompilerServices;
namespace RJWSexperience.Ideology.HistoryEvents
{
@@ -27,6 +28,7 @@ namespace RJWSexperience.Ideology.HistoryEvents
//Log.Message($"[RSI] Recorded event {historyEvent.def.ToStringWithPartner(pawn, partner)}");
}
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public static HistoryEvent CreateEvent(this HistoryEventDef def, Pawn pawn)
{
return new HistoryEvent(def, pawn.Named(HistoryEventArgsNames.Doer));
diff --git a/Source/IdeologyAddon/Patches/RJW_Patch_Ideo.cs b/Source/IdeologyAddon/Patches/RJW_Patch_Ideo.cs
index 4a06922..9e9a808 100644
--- a/Source/IdeologyAddon/Patches/RJW_Patch_Ideo.cs
+++ b/Source/IdeologyAddon/Patches/RJW_Patch_Ideo.cs
@@ -7,10 +7,55 @@ using RJWSexperience.Ideology.HistoryEvents;
using RJWSexperience.Ideology.Precepts;
using System;
using System.Collections.Generic;
+using System.Reflection.Emit;
using Verse;
namespace RJWSexperience.Ideology.Patches
{
+ [HarmonyPatch(typeof(xxx), nameof(xxx.can_rape))]
+ public static class RJW_Patch_CannotRapeBecauseIdeo
+ {
+ ///
+ /// Injects IdeoCanRape call into is_human block of xxx.can_rape
+ ///
+ /// Original method instructions
+ /// Modified method instructions
+ [HarmonyTranspiler]
+ public static IEnumerable AddIdeoCheck(IEnumerable instructions, ILGenerator generator)
+ {
+ using IEnumerator enumerator = instructions.GetEnumerator();
+
+ System.Reflection.FieldInfo wildMode = AccessTools.Field(typeof(RJWSettings), nameof(RJWSettings.WildMode));
+ Label labelWildMode = generator.DefineLabel();
+ bool done = false;
+
+ while (enumerator.MoveNext())
+ {
+ if (!done && enumerator.Current.LoadsField(wildMode))
+ {
+ // Found RJWSettings.WildMode check, insert before
+ // Need to move labels to our instruction because previous check jumps to one of them, skipping our call
+ var existingLabels = enumerator.Current.labels;
+ enumerator.Current.labels = new List