From ac86ba0cf18b8d319d2e660d2a71e362d3d6acad Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Thu, 4 Sep 2025 15:23:17 -0400 Subject: Fix collision toggling, better gravity patch Signed-off-by: Andrew Opalach --- Plugin.cs | 200 ++++++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 136 insertions(+), 64 deletions(-) diff --git a/Plugin.cs b/Plugin.cs index e2b1c40..15c4524 100755 --- a/Plugin.cs +++ b/Plugin.cs @@ -1,4 +1,4 @@ -//#define ADDR_ASSERTS +#define ADDR_ASSERTS using ImGuiNET; using System.Numerics; @@ -15,6 +15,10 @@ using System.Diagnostics; #endif // @TODO: +// - targetCamera -> targetPlayerCamera +// - UI button to disable fragile workarounds. +// - Manully set freecam viewport index. +// - Save direct camera offsets as preset. // - Ability to disable more inputs in freecam. /* PadDown = 0x198, PadOld = 0x19C, PadTrg = 0x1A0, PadRel = 0x1A4, PadChg = 0x1A8 @@ -99,11 +103,76 @@ namespace MHWNewCamera private Patch disableExtraYCollision; private Patch disableGravityYUpdate; private Patch disableGravityXZUpdate; + /* private Patch disableRotationGravity; private Patch disableRotationGravity2; private Patch disableRotationGravity3; private Patch disableRotationGravity4; private Patch disableRotationGravity5; + */ + private Patch disableGravityEval; + + private void disableCollisionEnable() + { + disableXCollision.Enable(); + disableYCollision.Enable(); + disableSecondaryYCollision.Enable(); + disableZCollision.Enable(); + } + + private void disableCollisionDisable() + { + disableXCollision.Disable(); + disableYCollision.Disable(); + disableSecondaryYCollision.Disable(); + disableZCollision.Disable(); + } + + private void disableExtraCollisionEnable() + { + disableExtraYCollision.Enable(); + } + + private void disableExtraCollisionDisable() + { + disableExtraYCollision.Disable(); + } + + private void disableGravityEnable() + { + disableGravityYUpdate.Enable(); + } + + private void disableGravityDisable() + { + disableGravityYUpdate.Disable(); + } + + private void disableExtraGravityEnable() + { + disableGravityEval.Enable(); + /* + disableRotationGravity.Enable(); + disableRotationGravity2.Enable(); + disableRotationGravity3.Enable(); + disableRotationGravity4.Enable(); + disableRotationGravity5.Enable(); + disableGravityXZUpdate.Enable(); + */ + } + + private void disableExtraGravityDisable() + { + disableGravityEval.Disable(); + /* + disableRotationGravity.Disable(); + disableRotationGravity2.Disable(); + disableRotationGravity3.Disable(); + disableRotationGravity4.Disable(); + disableRotationGravity5.Disable(); + disableGravityXZUpdate.Disable(); + */ + } private string typedPresetName = ""; @@ -199,6 +268,7 @@ namespace MHWNewCamera 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 ]); + /* // +0xac0 // 141325C19 - F3 0F11 83 80000000 - movss [rbx+00000080],xmm0 @@ -220,6 +290,20 @@ namespace MHWNewCamera #endif disableRotationGravity4 = new Patch(addr, [0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90]); disableRotationGravity5 = new Patch(addr + 0x10, [0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90]); + */ + + // Stop falling from moving player. + // 141BFFEFC - F3 0F11 7E 04 - movss [rsi+04],xmm7 + // + // Instance (of many?) of Y position evaluation for falling? + // 141325E2A - 44 0F2F 9B 80010000 - comiss xmm11,[rbx+00000180] + + // 141BFFF75 - E8 965872FF - call MonsterHunterWorld.exe+1325810 + addr = PatternScanner.FindFirst(Pattern.FromString("F3 0F 11 97 54 15 00 00 F3 0F 11 8F 58 15 00 00 F3 0F 10 47 68 F3 0F 5E D8 44 89 B7 6C 15 00 00 F3 0F 5E D0 F3 0F 5E C8 F3 0F 11 9F 60 15 00 00 F3 0F 11 97 64 15 00 00 F3 0F 11 8F 68 15 00 00")); +#if ADDR_ASSERTS + Trace.Assert(addr + 0x40 == 0x141BFFF75); +#endif + disableGravityEval = new Patch(addr + 0x40, [0x90, 0x90, 0x90, 0x90, 0x90]); } } @@ -269,7 +353,6 @@ namespace MHWNewCamera private bool assumeInCanteen(float fov, float previousFov) { - // Same idea as assumeInOpenMap(). if (fov == 50.0f) { if (!changeAfterGetUp) @@ -460,33 +543,25 @@ namespace MHWNewCamera private void disableAllHooks() { - if (disableCollision) - { - disableCollision = false; - disableXCollision.Disable(); - disableYCollision.Disable(); - disableSecondaryYCollision.Disable(); - disableZCollision.Disable(); - } - if (disableExtraCollision) + if (disableExtraGravity) { - disableExtraCollision = false; - disableExtraYCollision.Disable(); + disableExtraGravity = false; + disableExtraGravityDisable(); } if (disableGravity) { disableGravity = false; - disableGravityYUpdate.Disable(); + disableGravityDisable(); } - if (disableExtraGravity) + if (disableExtraCollision) { - disableExtraGravity = false; - disableRotationGravity.Disable(); - disableRotationGravity2.Disable(); - disableRotationGravity3.Disable(); - disableRotationGravity4.Disable(); - disableRotationGravity5.Disable(); - disableGravityXZUpdate.Disable(); + disableExtraCollision = false; + disableExtraCollisionDisable(); + } + if (disableCollision) + { + disableCollision = false; + disableCollisionDisable(); } } @@ -812,14 +887,26 @@ namespace MHWNewCamera { if (disableCollision) { - disableXCollision.Enable(); - disableYCollision.Enable(); - disableSecondaryYCollision.Enable(); - disableZCollision.Enable(); + disableCollisionEnable(); } else { - disableAllHooks(); + if (disableExtraGravity) + { + disableExtraGravity = false; + disableExtraGravityDisable(); + } + if (disableGravity) + { + disableGravity = false; + disableGravityDisable(); + } + if (disableExtraCollision) + { + disableExtraCollision = false; + disableExtraCollisionDisable(); + } + disableCollisionDisable(); } } if (!disableCollision) @@ -827,30 +914,25 @@ namespace MHWNewCamera ImGui.PushItemFlag(ImGuiItemFlags.Disabled, true); ImGui.PushStyleVar(ImGuiStyleVar.Alpha, ImGui.GetStyle().Alpha * 0.5f); } - if (ImGui.Checkbox("Disable Extra Y Collision", ref disableExtraCollision)) + if (ImGui.Checkbox("Disable Another Y Collision", ref disableExtraCollision)) { if (disableExtraCollision) { - disableExtraYCollision.Enable(); + disableExtraCollisionEnable(); } else { - disableExtraYCollision.Disable(); - if (disableGravity) - { - disableGravity = false; - disableGravityYUpdate.Disable(); - } if (disableExtraGravity) { disableExtraGravity = false; - disableRotationGravity.Disable(); - disableRotationGravity2.Disable(); - disableRotationGravity3.Disable(); - disableRotationGravity4.Disable(); - disableRotationGravity5.Disable(); - disableGravityXZUpdate.Disable(); + disableExtraGravityDisable(); } + if (disableGravity) + { + disableGravity = false; + disableGravityDisable(); + } + disableExtraCollisionDisable(); } } if (ImGui.BeginItemTooltip()) @@ -868,27 +950,27 @@ namespace MHWNewCamera ImGui.PushItemFlag(ImGuiItemFlags.Disabled, true); ImGui.PushStyleVar(ImGuiStyleVar.Alpha, ImGui.GetStyle().Alpha * 0.5f); } - if (ImGui.Checkbox("Disable Gravity", ref disableGravity)) + if (ImGui.Checkbox("Disable Y Gravity", ref disableGravity)) { if (disableGravity) { - disableGravityYUpdate.Enable(); + disableGravityEnable(); } else { - disableGravityYUpdate.Disable(); if (disableExtraGravity) { disableExtraGravity = false; - disableRotationGravity.Disable(); - disableRotationGravity2.Disable(); - disableRotationGravity3.Disable(); - disableRotationGravity4.Disable(); - disableRotationGravity5.Disable(); - disableGravityXZUpdate.Disable(); + disableExtraGravityDisable(); } + disableGravityDisable(); } } + if (ImGui.BeginItemTooltip()) + { + ImGui.Text("Avoid falling when going too high (Y axis)."); + ImGui.EndTooltip(); + } if (!disableExtraCollision) { ImGui.PopItemFlag(); @@ -899,30 +981,20 @@ namespace MHWNewCamera ImGui.PushItemFlag(ImGuiItemFlags.Disabled, true); ImGui.PushStyleVar(ImGuiStyleVar.Alpha, ImGui.GetStyle().Alpha * 0.5f); } - if (ImGui.Checkbox("Disable Extra Gravity (Breaks Movement)", ref disableExtraGravity)) + if (ImGui.Checkbox("Disable More Gravity", ref disableExtraGravity)) { if (disableExtraGravity) { - disableRotationGravity.Enable(); - disableRotationGravity2.Enable(); - disableRotationGravity3.Enable(); - disableRotationGravity4.Enable(); - disableRotationGravity5.Enable(); - disableGravityXZUpdate.Enable(); + disableExtraGravityEnable(); } else { - disableRotationGravity.Disable(); - disableRotationGravity2.Disable(); - disableRotationGravity3.Disable(); - disableRotationGravity4.Disable(); - disableRotationGravity5.Disable(); - disableGravityXZUpdate.Disable(); + disableExtraGravityDisable(); } } if (ImGui.BeginItemTooltip()) { - ImGui.Text("This can stop rotations from causing your character to start falling."); + ImGui.Text("This can stop you from starting to fall when going out of bounds and/or rotating."); ImGui.EndTooltip(); } if (!disableGravity) -- cgit v1.2.3-101-g0448