diff --git a/IKSimulatedRootAngleFix/Main.cs b/IKSimulatedRootAngleFix/Main.cs index 4c6a759..bbc8b67 100644 --- a/IKSimulatedRootAngleFix/Main.cs +++ b/IKSimulatedRootAngleFix/Main.cs @@ -21,6 +21,13 @@ public class IKSimulatedRootAngleFixMod : MelonMod BindingFlags.NonPublic | BindingFlags.Static)) ); + HarmonyInstance.Patch( // fix offsetting of _ikSimulatedRootAngle when player rotates on wall or ceiling + typeof(IKHandler).GetMethod(nameof(IKHandler.Reset), + BindingFlags.Public | BindingFlags.Instance), + postfix: new HarmonyMethod(typeof(IKSimulatedRootAngleFixMod).GetMethod(nameof(OnHandlerReset), + BindingFlags.NonPublic | BindingFlags.Static)) + ); + HarmonyInstance.Patch( // why did i dupe logic weirdly between Desktop & VR IKHandler ... typeof(IKHandlerDesktop).GetMethod(nameof(IKHandlerDesktop.HandleBodyHeading), BindingFlags.NonPublic | BindingFlags.Instance), @@ -68,6 +75,11 @@ public class IKSimulatedRootAngleFixMod : MelonMod return false; } + private static void OnHandlerReset(ref IKHandler __instance) + { + __instance._ikSimulatedRootAngle = GetRemappedPlayerHeading(); + } + private static bool OnHandleBodyHeading(ref IKHandlerDesktop __instance) { if (IKSystem.Instance.BodyHeadingLimit <= 0f)