From 2ad8a2c0f79959af2a5fb539ff21531a8f605ed9 Mon Sep 17 00:00:00 2001 From: NotAKidoS <37721153+NotAKidOnSteam@users.noreply.github.com> Date: Thu, 27 Jun 2024 21:08:01 -0500 Subject: [PATCH] [IKSimulatedRootAngleFix] Fixed reset method so torso faces forward properly --- IKSimulatedRootAngleFix/Main.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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)