From aba0c570ee604a73880b522852c8117b86c08465 Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Mon, 26 Jan 2026 21:15:43 -0500 Subject: Test special input handling for in-game menus Signed-off-by: Andrew Opalach --- Config.cs | 8 +- Plugin.cs | 474 +++++++++++++++++++++++--------------------------- Research/research.txt | 49 ------ changelog.txt | 70 ++++++++ 4 files changed, 293 insertions(+), 308 deletions(-) delete mode 100644 Research/research.txt create mode 100644 changelog.txt diff --git a/Config.cs b/Config.cs index db17a07..cea23cb 100755 --- a/Config.cs +++ b/Config.cs @@ -76,14 +76,11 @@ namespace MHWNewCamera public GraphicalTweaks() { TripleShadowResolution = false; - SlightlyHigherShadowValues = true; - ShadowRangeOffset = 0.7f; + ShadowRangeOffset = 0.6f; ApplyShadowRange = false; ShadowRadiusOffset = -0.0001f; ApplyShadowRadius = false; HigherShadowDetailInHoarfrost = false; - SSAOAdjustments = false; - SSRAdjustments = false; EnableHQMode = false; DisableLODLimits = false; FoliageLODBias = 3.0f; @@ -98,14 +95,11 @@ namespace MHWNewCamera } public bool TripleShadowResolution { get; set; } - public bool SlightlyHigherShadowValues { get; set; } public float ShadowRangeOffset { get; set; } public bool ApplyShadowRange { get; set; } public float ShadowRadiusOffset { get; set; } public bool ApplyShadowRadius { get; set; } public bool HigherShadowDetailInHoarfrost { get; set; } - public bool SSAOAdjustments { get; set; } - public bool SSRAdjustments { get; set; } public bool EnableHQMode { get; set; } public bool DisableLODLimits { get; set; } public float FoliageLODBias { get; set; } diff --git a/Plugin.cs b/Plugin.cs index b0e0c65..57867e5 100755 --- a/Plugin.cs +++ b/Plugin.cs @@ -43,25 +43,35 @@ using SharpPluginLoader.Core.Configuration; // - Exit Free Camera // @TODO: +// - Document some not self-explanatory code locations from notes. +// - General "A/B Graphical Settings" function. +// - Save toggle state to config file. +// - Include Hide Weapon. +// - Hunter effects: +// - Sweating +// - Steamy +// - On Fire +// - Dung Pod? +// - Other Monster Inflicted Debuffs // - Camera "Gear Shift". -// - Option to ignore camera change (update position, test open book and close). +// - Option to not adjust camera position on camera change. // - Better calculation for positioning camera behind the player. // - Underwater camera crashes in The Rotten Vale. // - Adjust SSAO in cutscenes. -// - Test for crash on Windows relating to shadow res changes. // - Read LOD bias setting from in-game setting (Low, Medium or High). // - Make left stick input a curve like Wilds. // - Ability to lock camera to a the player/a joint. // - Simplify and document input handling/blocking logic. // - Find a way to block other inputs while button1 is down (and blocked). -// - More multiple controller testing (3 controllers, steam input, windows). +// - More multiple controller testing (3 controllers, Steam Input, Windows). // - Thoroughly test "Disable Mod". // - Improve AOB scans. // - Better name for unknownPtr. // - Some objects still fade. // - Glass objects in research base and on the botanical research center table. // - Decals on floor near Astera lift. -// - Manully set freecam viewport index. +// - Hanging objects in the Seliana Gathering Hub (some events). +// - Manully set free camera viewport index. // - Option to override in-game viewmode. // - +right and +forward to move character. @@ -235,6 +245,8 @@ namespace MHWNewCamera private uint lastPadDown = 0; private uint? prevPadDown = null; private bool unlockInputToggled = false; + private bool unlockInputForMenu = false; + private bool unlockInputHideMenu = false; //private bool inputBlockedForToggle = false; private bool buttonWasDown(Button button) { @@ -270,6 +282,8 @@ namespace MHWNewCamera private Patch viewMode4; private nint psuedoViewModeObject; */ + private NativeAction setupGestureMenu; + private NativeAction showGestureMenu; private delegate void SetCameraTentDelegate(nint unknownPtr); private Hook? setCameraTentHook; @@ -305,7 +319,7 @@ namespace MHWNewCamera private delegate void CameraEffectDelegate(nint unknownPtr, nint unknownPtr2, nint unknownPtr3); private Hook? cameraEffectHook; - private nint fxaaPointer = 0x0; + private nint fxaaAddr = 0x0; private delegate void FXAADelegate(nint unknownPtr, nint unknownPtr2); private Hook? fxaaHook; @@ -321,17 +335,13 @@ namespace MHWNewCamera private Patch noopCharacterFade; private bool tripleShadowRes = false; - private bool slightlyHigherShadowValues = false; private bool lowShadowDetailOverride = false; private Patch shadowRes1_3x; private Patch shadowRes1_1; private Patch shadowRes1_2; private Patch shadowRes1_3; private Patch shadowRes2; - //private Patch shadowRes2_Upper; private Patch shadowRes3; - //private Patch shadowRes3_Upper; - private Patch shadowRes4_3x; private Patch shadowRes4_Limit; /* @@ -342,6 +352,9 @@ namespace MHWNewCamera private Patch ssrRes3; private Patch ssrRes3_1; private Patch ssrRes4; + private Patch ssrRes10; + private Patch ssrRes11; + private Patch ssrRes12; */ private float shadowBiasOffset = 0.0f; @@ -360,16 +373,7 @@ namespace MHWNewCamera shadowRes1_3.Enable(); shadowRes2.Enable(); shadowRes3.Enable(); - if (slightlyHigherShadowValues) - { - //shadowRes2_Upper.Enable(); - //shadowRes3_Upper.Enable(); - shadowRes4_Limit.Enable(); - } - else - { - shadowRes4_3x.Enable(); - } + shadowRes4_Limit.Enable(); } private void tripleShadowResDisable() @@ -380,16 +384,7 @@ namespace MHWNewCamera shadowRes1_3.Disable(); shadowRes2.Disable(); shadowRes3.Disable(); - if (slightlyHigherShadowValues) - { - //shadowRes2_Upper.Disable(); - //shadowRes3_Upper.Disable(); - shadowRes4_Limit.Disable(); - } - else - { - shadowRes4_3x.Disable(); - } + shadowRes4_Limit.Disable(); } private int internalShadowSampleNumHQ; // +0xE5CC @@ -631,15 +626,14 @@ namespace MHWNewCamera Config.GraphicalTweaks graphics = config.Graphics; tripleShadowRes = graphics.TripleShadowResolution; - slightlyHigherShadowValues = graphics.SlightlyHigherShadowValues; shadowBiasOffset = graphics.ShadowRangeOffset; shadowRadiusOffset = graphics.ShadowRadiusOffset; applyShadowBias = graphics.ApplyShadowRange; applyShadowRadius = graphics.ApplyShadowRadius; lowShadowDetailOverride = graphics.HigherShadowDetailInHoarfrost; - ssaoAdjustments = graphics.SSAOAdjustments; - ssrAdjustments = graphics.SSRAdjustments; enableHQMode = graphics.EnableHQMode; + ssaoAdjustments = enableHQMode; + ssrAdjustments = enableHQMode; disableLODLimits = graphics.DisableLODLimits; largerFoliageSwayRange = graphics.LargerFoliageSwayRange; disableReducedRateAnimations = graphics.DisableReducedRateAnimations; @@ -685,6 +679,8 @@ namespace MHWNewCamera checkCameraHook = Hook.Create(0x141FA2130, CheckCameraHook); startViewModeHook = Hook.Create(0x1405842E0, StartViewModeHook); + setupGestureMenu = new NativeAction(0x141E12AF0); + showGestureMenu = new NativeAction(0x141FB79B0); /* unchecked { @@ -820,19 +816,10 @@ namespace MHWNewCamera shadowRes2 = new Patch(addr + 0x3F, [ 0xC7, 0x81, 0x20, 0x55, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0xC3, 0xC7, 0x81, 0x20, 0x55, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0xC3, - 0xC7, 0x81, 0x20, 0x55, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0xC3, // Value the game picks. - 0xC7, 0x81, 0x20, 0x55, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0xC3, - 0xC7, 0x81, 0x20, 0x55, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0xC3 + 0xC7, 0x81, 0x20, 0x55, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0xC3, // High + 0xC7, 0x81, 0x20, 0x55, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0xC3, // Mid + 0xC7, 0x81, 0x20, 0x55, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0xC3 // Low ]); - /* - shadowRes2_Upper = new Patch(addr + 0x3F, [ - 0xC7, 0x81, 0x20, 0x55, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0xC3, - 0xC7, 0x81, 0x20, 0x55, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0xC3, - 0xC7, 0x81, 0x20, 0x55, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0xC3, - 0xC7, 0x81, 0x20, 0x55, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0xC3, - 0xC7, 0x81, 0x20, 0x55, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0xC3 - ]); - */ addr = PatternScanner.FindFirst(Pattern.FromString("89 91 30 55 00 00 83 FA FF 7F 06 8B 91 1C 55 00 00 85 D2 74 4B 83 EA 01 74 3B 83 EA 01 74 2B 83 EA 01 74 1B 83 FA 01 74 0B C7 81 20 55 00 00 01 00 00 00 C3 C7 81 20 55 00 00 00 10 00 00")); #if ADDR_ASSERTS @@ -845,15 +832,6 @@ namespace MHWNewCamera 0xC7, 0x81, 0x20, 0x55, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0xC3, 0xC7, 0x81, 0x20, 0x55, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0xC3 ]); - /* - shadowRes3_Upper = new Patch(addr + 0x34, [ - 0xC7, 0x81, 0x20, 0x55, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0xC3, - 0xC7, 0x81, 0x20, 0x55, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0xC3, - 0xC7, 0x81, 0x20, 0x55, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0xC3, - 0xC7, 0x81, 0x20, 0x55, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0xC3, - 0xC7, 0x81, 0x20, 0x55, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0xC3 - ]); - */ addr = PatternScanner.FindFirst(Pattern.FromString("89 91 00 55 00 00 83 FA 05 77 41 48 63 C2 4C 8D 05 ?? ?? ?? ?? 41 8B 94 80 84 8B 28 02 49 03 D0 FF E2 B8 00 08 00 00")); #if ADDR_ASSERTS @@ -863,20 +841,24 @@ namespace MHWNewCamera // but I may be reading the code wrong. Nevertheless, shadows in the Seliana smithy break if this value // isn't increased. The value is already multiplied by the shadow resolution so directly increasing // it here will result in an even bigger multiplier. Original value is 2816, with this offset and - // Shadow Quality: High the result will be 15360. Going past some number around 16384 will crash - // the game. I think it's related to N/64 >= 256. - shadowRes4_3x = new Patch(addr + 0x29, [ - 0xB8, 0x00, 0x14, 0x00, 0x00, 0xEB, 0x21 // This case is used for Low, Medium and High in-game. - ]); + // Shadow Quality: High the result will be 16320. Going past some number around N/64 >= 256 will crash. shadowRes4_Limit = new Patch(addr + 0x29, [ // N/64 = 255, fractional values closer to 256 not tested. - 0xB8, 0x40, 0x15, 0x00, 0x00, 0xEB, 0x21 + 0xB8, 0x40, 0x15, 0x00, 0x00, 0xEB, 0x21 // This case is used for Low, Medium and High in-game. ]); if (tripleShadowRes && !disableMod) { tripleShadowResEnable(); } + // The game will crash when trying to switch to the FULL_RES path for SSR. It's likley because + // it tries to access resources (shader, buffer, texture, etc.) that are not loaded. + // Ex: MonsterHunterWorld.exe+228C4A7 - 48 8B BF 20010000 - mov rdi,[rdi+00000120] # Attempted read. + // MonsterHunterWorld.exe+259329B - 48 8D 8F 20010000 - lea rcx,[rdi+00000120] # Zero. + // The code that zero's these addresses looks like a shell of where they would be loaded. So my assumption + // is that it's compiled out and that this method of increasing the SSR resolution will not work. + // Though, it may still be possible by finagling the parameters of the half res case. /* + // Attempt to forcefully enable FULL_RES path for SSR. ssrRes1 = new Patch((nint)0x14228894D, [0x0F, 0x85, 0xB9, 0xAA, 0x30, 0x00]); ssrRes1_1 = new Patch((nint)0x14259340C, [0xC6, 0x81, 0x28, 0x02, 0x00, 0x00, 0x00, 0x90, 0x90, 0x90]); ssrRes2 = new Patch((nint)0x14228897D, [0x0F, 0x85, 0x99, 0xAA, 0x30, 0x00]); @@ -884,14 +866,15 @@ namespace MHWNewCamera ssrRes3 = new Patch((nint)0x1422889AD, [0x0F, 0x85, 0x79, 0xAA, 0x30, 0x00]); ssrRes3_1 = new Patch((nint)0x14259342C, [0xC6, 0x81, 0x2C, 0x02, 0x00, 0x00, 0x00, 0x90, 0x90, 0x90]); ssrRes4 = new Patch((nint)0x14259268C, [0x41, 0xC7, 0x86, 0x28, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xC7, 0x86, 0x2C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xC7, 0x86, 0x30, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xC7, 0x86, 0x34, 0x02, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x41, 0xC7, 0x86, 0x38, 0x02, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x41, 0xC6, 0x86, 0x3C, 0x02, 0x00, 0x00, 0x01]); + */ + // Neither of these work either. + /* + // Don't scale resolution by SSR Factor. + ssrRes10 = new Patch((nint)0x142592DEF, [0x90, 0x90, 0x90, 0x90]); + ssrRes11 = new Patch((nint)0x142592E00, [0x90, 0x90, 0x90, 0x90]); - ssrRes1.Enable(); - ssrRes1_1.Enable(); - ssrRes2.Enable(); - ssrRes2_1.Enable(); - ssrRes3.Enable(); - ssrRes3_1.Enable(); - ssrRes4.Enable(); + // Make SSR Factor 1.0. + ssrRes12 = new Patch((nint)0x1425926B8 + 0x7, [0x00, 0x00, 0x80, 0x3F]); */ // Gameplay. @@ -961,6 +944,12 @@ namespace MHWNewCamera zeroVolumetricDownsample.Enable(); } + jmpOverHotSpringsEval = new Patch((nint)0x1417C1B03, [0xEB]); + + jmpOverHotSpringsSteam = new Patch((nint)0x14203A494, [0xE9, 0x8D, 0x00, 0x00, 0x00, 0x90]); + + noopCharacterWetnessUpdate = new Patch((nint)0x14203E893, [0x90, 0x90, 0x90, 0x90, 0x90]); + // Noop collision checks. addr = PatternScanner.FindFirst(Pattern.FromString("F3 0F 11 06 F3 0F 10 48 04 F3 0F 58 4E 04 F3 0F 11 4E 04 F3 0F 10 40 08 F3 0F 58 46 08 F3 0F 11 46 08 44 8B AF E0 0B 00 00")); #if ADDR_ASSERTS @@ -1006,12 +995,6 @@ namespace MHWNewCamera Trace.Assert(addr + 0x40 == 0x141BFFF75); #endif disableGravityEval = new Patch(addr + 0x40, [0x90, 0x90, 0x90, 0x90, 0x90]); // call MonsterHunterWorld.exe+1325810 - - jmpOverHotSpringsEval = new Patch((nint)0x1417C1B03, [0xEB]); - - jmpOverHotSpringsSteam = new Patch((nint)0x14203A494, [0xE9, 0x8D, 0x00, 0x00, 0x00, 0x90]); - - noopCharacterWetnessUpdate = new Patch((nint)0x14203E893, [0x90, 0x90, 0x90, 0x90, 0x90]); } } @@ -1207,6 +1190,8 @@ namespace MHWNewCamera } } } + + fxaaAddr = 0x0; } private static Quaternion getForward(Vector3 pos, Vector3 target) @@ -1219,11 +1204,6 @@ namespace MHWNewCamera return q * Quaternion.CreateFromYawPitchRoll((float)Math.PI, 0.0f, 0.0f); } - private static Quaternion getHalfLeft(Quaternion q) - { - return q * Quaternion.CreateFromYawPitchRoll((float)(Math.PI+(Math.PI*0.75f)), 0.0f, 0.0f); - } - private static Quaternion getReverse(Quaternion q) { return q * Quaternion.CreateFromYawPitchRoll((float)Math.PI, 0.0f, 0.0f); @@ -1330,8 +1310,8 @@ namespace MHWNewCamera restoreNearClip = camera.NearClip; // The value of cameraFov is effectively a new default and scales accordingly // based on the in-game FOV. Take the calculated FOV here because that's what is - // actually shown, which avoids a jump when toggling freecam. This is also why - // we don't enable freecam until after applying a offset on this update. + // actually shown, which avoids a jump when toggling free camera. This is also + // why we don't enable free camera until after applying a offset on this update. cameraFov = camera.FieldOfView; setDisableFadingObjects(viewportIndex, true); setDisableCharacterFade(true); @@ -1352,6 +1332,8 @@ namespace MHWNewCamera freeCamera = false; freeCameraFromViewMode = false; unlockInputToggled = false; + unlockInputForMenu = false; + unlockInputHideMenu = false; if (restoreFov != null) { cameraFov = (double)restoreFov; @@ -1478,7 +1460,7 @@ namespace MHWNewCamera cameraFov = (restoreFov != null) ? (double)restoreFov : DEFAULT_FOV; } } - else + else if (!unlockInputForMenu || unlockInputHideMenu) { if (buttonWasDown(Button.Up)) { @@ -2051,8 +2033,7 @@ namespace MHWNewCamera if (enable) { MemoryUtil.WriteBytes(baseAddr + 0xB4BC, BitConverter.GetBytes(1.75f)); - MemoryUtil.WriteBytes(baseAddr + 0xB4C8, BitConverter.GetBytes(18)); - MemoryUtil.WriteBytes(baseAddr + 0xB4D0, BitConverter.GetBytes(18)); + MemoryUtil.WriteBytes(baseAddr + 0xB4D0, BitConverter.GetBytes(16)); if (b) { MemoryUtil.WriteBytes(baseAddr + 0xB430, BitConverter.GetBytes(0.0f)); @@ -2071,7 +2052,6 @@ namespace MHWNewCamera MemoryUtil.WriteBytes(baseAddr + 0xB4BC, BitConverter.GetBytes(internalSSAOParams.dispersion)); MemoryUtil.WriteBytes(baseAddr + 0xB430, BitConverter.GetBytes(internalSSAOParams.effect)); MemoryUtil.WriteBytes(baseAddr + 0xB434, BitConverter.GetBytes(internalSSAOParams.effectGI)); - MemoryUtil.WriteBytes(baseAddr + 0xB4C8, BitConverter.GetBytes(internalSSAOParams.maxSampleNum)); MemoryUtil.WriteBytes(baseAddr + 0xB4D0, BitConverter.GetBytes(internalSSAOParams.maxSampleNumHQ)); MemoryUtil.WriteBytes(baseAddr + 0xB4E0, BitConverter.GetBytes(internalSSAOParams.intensity)); } @@ -2082,13 +2062,11 @@ namespace MHWNewCamera nint baseAddr = MemoryUtil.Read(0x1451C4368); if (enable) { - MemoryUtil.WriteBytes(baseAddr + 0xE628, BitConverter.GetBytes(72)); MemoryUtil.WriteBytes(baseAddr + 0xE644, BitConverter.GetBytes(0.2f)); MemoryUtil.WriteBytes(baseAddr + 0xE64C, BitConverter.GetBytes(0.2f)); } else { - MemoryUtil.WriteBytes(baseAddr + 0xE628, BitConverter.GetBytes(internalSSRParams.loopCount)); MemoryUtil.WriteBytes(baseAddr + 0xE644, BitConverter.GetBytes(internalSSRParams.accurateThreshold)); MemoryUtil.WriteBytes(baseAddr + 0xE64C, BitConverter.GetBytes(internalSSRParams.accurateThresholdHQ)); } @@ -2202,7 +2180,7 @@ namespace MHWNewCamera #endif Button b1 = 0u, b2 = 0u; - uint PadDown = 0u, PadTrg = 0u, PadRel = 0u, PadChg = 0u; // PadOld = 0x19C + uint PadDown = 0u, PadTrg = 0u, PadRel = 0u, PadChg = 0u; if (enableCombo && freeCameraCombo != null) { b1 = freeCameraCombo[0]; @@ -2227,6 +2205,7 @@ namespace MHWNewCamera if (!readInputsPostHook) { PadDown = MemoryUtil.Read(controllerAddr() + 0x198); + //PadOld = MemoryUtil.Read(controllerAddr() + 0x19C); PadTrg = MemoryUtil.Read(controllerAddr() + 0x1A0); PadRel = MemoryUtil.Read(controllerAddr() + 0x1A4); PadChg = MemoryUtil.Read(controllerAddr() + 0x1A8); @@ -2289,19 +2268,23 @@ namespace MHWNewCamera { enableFreeCamera = !enableFreeCamera; } - if (buttonWasPressed(Button.L1)) + if (buttonWasPressed(Button.Share)) { + uiToggled = !uiToggled; if (uiToggled) { - jmpOverUi.Disable(); + jmpOverUi.Enable(); } else { - jmpOverUi.Enable(); + jmpOverUi.Disable(); + } + if (unlockInputForMenu) + { + unlockInputHideMenu = uiToggled; } - uiToggled = !uiToggled; } - if (buttonWasPressed(Button.R1)) + if (buttonWasPressed(Button.L1)) { unlockInputToggled = !unlockInputToggled; } @@ -2384,29 +2367,57 @@ namespace MHWNewCamera { if (!readInputsPostHook) { + //PadOld = MemoryUtil.Read(controllerAddr() + 0x19C); PadTrg = MemoryUtil.Read(controllerAddr() + 0x1A0); PadRel = MemoryUtil.Read(controllerAddr() + 0x1A4); PadChg = MemoryUtil.Read(controllerAddr() + 0x1A8); readInputsPostHook = true; } - uint FaceButtonMask = (uint)Button.Cross | (uint)Button.Circle | (uint)Button.Square | (uint)Button.Triangle; - uint DPadMask = (uint)Button.Up | (uint)Button.Down | (uint)Button.Left | (uint)Button.Right; - uint StartSelectMask = (uint)Button.Options | (uint)Button.Share; - uint BumperMask = (uint)Button.L1 | (uint)Button.R1; - uint StickMask = (uint)Button.LsUp | (uint)Button.LsDown | (uint)Button.LsLeft | (uint)Button.LsRight | - (uint)Button.RsUp | (uint)Button.RsDown | (uint)Button.RsLeft | (uint)Button.RsRight; - uint Mask = FaceButtonMask | DPadMask | StartSelectMask | BumperMask | StickMask; + uint Mask = 0; + if (unlockInputForMenu) + { + uint FaceButtonMask = (uint)Button.Square | (uint)Button.Triangle; + uint StartSelectMask = (uint)Button.Options | (uint)Button.Share; + Mask = FaceButtonMask | StartSelectMask; + if (unlockInputHideMenu) + { + // Still allow A/Cross. + Mask |= (uint)Button.Circle; + uint DPadMask = (uint)Button.Up | (uint)Button.Down | (uint)Button.Left | (uint)Button.Right; + uint BumperMask = (uint)Button.L1 | (uint)Button.R1; + uint StickMask = (uint)Button.LsUp | (uint)Button.LsDown | (uint)Button.LsLeft | (uint)Button.LsRight | + (uint)Button.RsUp | (uint)Button.RsDown | (uint)Button.RsLeft | (uint)Button.RsRight; + Mask |= DPadMask | BumperMask | StickMask; + } + else if (buttonWasReleased(Button.Circle)) + { + unlockInputForMenu = false; + unlockInputHideMenu = false; + } + } + else + { + uint FaceButtonMask = (uint)Button.Cross | (uint)Button.Circle | (uint)Button.Square | (uint)Button.Triangle; + uint DPadMask = (uint)Button.Up | (uint)Button.Down | (uint)Button.Left | (uint)Button.Right; + uint StartSelectMask = (uint)Button.Options | (uint)Button.Share; + uint BumperMask = (uint)Button.L1 | (uint)Button.R1; + uint StickMask = (uint)Button.LsUp | (uint)Button.LsDown | (uint)Button.LsLeft | (uint)Button.LsRight | + (uint)Button.RsUp | (uint)Button.RsDown | (uint)Button.RsLeft | (uint)Button.RsRight; + Mask = FaceButtonMask | DPadMask | StartSelectMask | BumperMask | StickMask; + } if (enableCombo && freeCameraCombo != null) { Mask &= ~((uint)b1 | (uint)b2); } PadDown &= ~Mask; + //PadOld &= ~Mask; PadTrg &= ~Mask; PadRel &= ~Mask; PadChg &= ~Mask; MemoryUtil.WriteBytes(controllerAddr() + 0x198, BitConverter.GetBytes(PadDown)); + //MemoryUtil.WriteBytes(controllerAddr() + 0x19C, BitConverter.GetBytes(PadOld)); MemoryUtil.WriteBytes(controllerAddr() + 0x1A0, BitConverter.GetBytes(PadTrg)); - MemoryUtil.WriteBytes(controllerAddr() + 0x1A0, BitConverter.GetBytes(PadRel)); + MemoryUtil.WriteBytes(controllerAddr() + 0x1A4, BitConverter.GetBytes(PadRel)); MemoryUtil.WriteBytes(controllerAddr() + 0x1A8, BitConverter.GetBytes(PadChg)); // Left and right trigger. MemoryUtil.WriteBytes(controllerAddr() + 0x1C0, BitConverter.GetBytes(0)); @@ -2490,6 +2501,23 @@ namespace MHWNewCamera { enableFreeCamera = false; } + + if (buttonWasPressed(Button.Square)) + { + nint baseAddr = MemoryUtil.Read(0x1451C4640); + // MonsterHunterWorld.exe+1ADA26A - 48 8B 83 18400100 - mov rax,[rbx+00014018] + nint gesturesAddr = MemoryUtil.Read(baseAddr + 0x14018); + if (buttonWasDown(Button.Share)) // MonsterHunterWorld.exe+1EC8000 + { + setupGestureMenu.Invoke(gesturesAddr, 0x0, 0x1); // Poses. + } + else // MonsterHunterWorld.exe+1EC7D10 + { + setupGestureMenu.Invoke(gesturesAddr, 0x0, 0x0); // Gestures. + } + showGestureMenu.Invoke(gesturesAddr); + unlockInputForMenu = true; + } } } } @@ -2539,6 +2567,7 @@ namespace MHWNewCamera } else { + // @TODO: Test this. enableCrawl = false; } } @@ -2677,7 +2706,7 @@ namespace MHWNewCamera debugLog($"FXAAHook({unknownPtr:x}, {unknownPtr2:x}) @ {frameTick}"); #endif - fxaaPointer = unknownPtr; + fxaaAddr = unknownPtr; fxaaHook!.Original(unknownPtr, unknownPtr2); } @@ -2781,7 +2810,7 @@ namespace MHWNewCamera Viewport vp = CameraSystem.GetViewport(i); if (debug) { - ImGui.Text($"Pointer: {vp.Instance:x}"); + ImGui.Text($"Address: {vp.Instance:x}"); ImGui.Text($"Visible: {vp.Visible}"); ImGui.Text($"Region: {vp.Region.X} {vp.Region.Y} {vp.Region.Width} {vp.Region.Height}"); } @@ -3251,7 +3280,7 @@ namespace MHWNewCamera ConfigManager.SaveConfig(this); } ImGui.SameLine(); - ImGui.PushItemWidth(width * 0.15f); + ImGui.PushItemWidth(width * 0.2f); ImGui.InputText("##Preset Name", ref typedPresetName, 99); ImGui.SameLine(); if (ImGui.Button("Save")) @@ -3438,6 +3467,11 @@ namespace MHWNewCamera ImGui.SameLine(); float alignCursorX = ImGui.GetCursorPosX(); ImGui.Checkbox("Disable Motion Blur", ref motionBlurDisabled); + if (ImGui.BeginItemTooltip()) + { + ImGui.Text("Motion blur completely breaks when freezing the game."); + ImGui.EndTooltip(); + } if (!ssaoAdjustments) { ImGui.PushStyleVar(ImGuiStyleVar.Alpha, ImGui.GetStyle().Alpha * 0.5f); @@ -3477,7 +3511,7 @@ namespace MHWNewCamera } if (ImGui.BeginItemTooltip()) { - ImGui.Text("Allows you to get the camera closer to things without clipping but breaks some rendering farther from the camera."); + ImGui.Text("Changing the near clip will subtly break rendering of various effects.\nTemporarily lowering the near clip can allow you to get the camera closer to things without clipping."); ImGui.EndTooltip(); } ImGui.SameLine(); @@ -3601,7 +3635,7 @@ namespace MHWNewCamera { ImGui.TableNextRow(); ImGui.TableSetColumnIndex(0); - ImGui.Text("Hold Button1 + Press LB"); + ImGui.Text("Hold Button1 + Press Select"); ImGui.TableSetColumnIndex(1); ImGui.Text("Toggle UI"); @@ -3624,7 +3658,7 @@ namespace MHWNewCamera { ImGui.TableNextRow(); ImGui.TableSetColumnIndex(0); - ImGui.Text("Hold Button1 + Press RB"); + ImGui.Text("Hold Button1 + Press LB"); ImGui.TableSetColumnIndex(1); ImGui.Text("Toggle Unlock Input"); if (ImGui.BeginItemTooltip()) @@ -3944,13 +3978,13 @@ namespace MHWNewCamera } if (combatControls) { + ImGui.PopItemFlag(); + ImGui.PopStyleVar(); if (ImGui.BeginItemTooltip()) { ImGui.Text("You have to be in a hub area to use this."); ImGui.EndTooltip(); } - ImGui.PopItemFlag(); - ImGui.PopStyleVar(); } if (ImGui.Checkbox("Allow Hot Springs Anywhere", ref allowHotSpringsAnywhere)) @@ -3964,6 +3998,11 @@ namespace MHWNewCamera jmpOverHotSpringsEval.Disable(); } } + if (ImGui.BeginItemTooltip()) + { + ImGui.Text("Disable check for being about halfway submerged in water to stay sitting"); + ImGui.EndTooltip(); + } if (ImGui.Checkbox("Disable Hot Springs Steam", ref disableHotSpringsSteam)) { @@ -3986,16 +4025,6 @@ namespace MHWNewCamera { nint wetnessAddr = player.Instance + 0x13BD0; ImGui.PushItemWidth(width * 0.3f); - if (ImGui.DragFloat("Whole Body", ref wholeBodyWetness, 0.005f)) - { - if (applyCharacterWetness) - { - MemoryUtil.WriteBytes(wetnessAddr, BitConverter.GetBytes(wholeBodyWetness)); - MemoryUtil.WriteBytes(wetnessAddr + 0x28, BitConverter.GetBytes(wholeBodyWetness)); - MemoryUtil.WriteBytes(wetnessAddr + 0x50, BitConverter.GetBytes(wholeBodyWetness)); - MemoryUtil.WriteBytes(wetnessAddr + 0x78, BitConverter.GetBytes(wholeBodyWetness)); - } - } float headWetness = MemoryUtil.Read(wetnessAddr); if (ImGui.DragFloat("Head", ref headWetness, 0.005f)) { @@ -4016,6 +4045,16 @@ namespace MHWNewCamera { MemoryUtil.WriteBytes(wetnessAddr + 0x78, BitConverter.GetBytes(legsWetness)); } + if (ImGui.DragFloat("Whole Body", ref wholeBodyWetness, 0.005f)) + { + if (applyCharacterWetness) + { + MemoryUtil.WriteBytes(wetnessAddr, BitConverter.GetBytes(wholeBodyWetness)); + MemoryUtil.WriteBytes(wetnessAddr + 0x28, BitConverter.GetBytes(wholeBodyWetness)); + MemoryUtil.WriteBytes(wetnessAddr + 0x50, BitConverter.GetBytes(wholeBodyWetness)); + MemoryUtil.WriteBytes(wetnessAddr + 0x78, BitConverter.GetBytes(wholeBodyWetness)); + } + } ImGui.PopItemWidth(); if (ImGui.Checkbox("Override Player Wetness", ref applyCharacterWetness)) { @@ -4185,10 +4224,13 @@ namespace MHWNewCamera if (ImGui.CollapsingHeader("World")) { nint timeAddr = MemoryUtil.Read(sMain.Instance + 0xAF878); - float gameTime = MemoryUtil.Read(timeAddr + 0x38); - if (ImGui.SliderFloat("Time of Day", ref gameTime, 0.0f, 24.0f)) + if (timeAddr != 0x0) { - MemoryUtil.WriteBytes(timeAddr + 0x38, BitConverter.GetBytes(gameTime)); + float gameTime = MemoryUtil.Read(timeAddr + 0x38); + if (ImGui.SliderFloat("Time of Day", ref gameTime, 0.0f, 24.0f)) + { + MemoryUtil.WriteBytes(timeAddr + 0x38, BitConverter.GetBytes(gameTime)); + } } ImGui.PushItemWidth(width * 0.125f); @@ -4228,7 +4270,7 @@ namespace MHWNewCamera } if (ImGui.BeginItemTooltip()) { - ImGui.Text("Trigger the diving screen filter when the camera goes underwater.\nWARNING: This is experimental, unfinished and known to crash in at least The Rotten Vale.\nIf you want to see the effect you can try it in the Seliana Gathering Hub, the Ancient Forest or your Private Suite."); + ImGui.Text("Enable the screen filter from diving but whenever your camera goes underwater.\nWARNING: This is experimental, unfinished and known to crash in at least The Rotten Vale.\nIf you want to see the effect you can try it in the Seliana Gathering Hub, the Ancient Forest or your Private Suite."); ImGui.EndTooltip(); } @@ -4259,53 +4301,8 @@ namespace MHWNewCamera ImGui.Text("In-Game Settings:\n - High: 1.0 -> 3.0\n - Mid: 0.7 -> 2.1\n - Low: 0.5 -> 1.5\nReload shadows by toggling Shadow Quality in Options -> Display -> Advanced Graphics Settings."); ImGui.EndTooltip(); } - ImGui.SameLine(); - if (!tripleShadowRes) - { - ImGui.PushItemFlag(ImGuiItemFlags.Disabled, true); - ImGui.PushStyleVar(ImGuiStyleVar.Alpha, ImGui.GetStyle().Alpha * 0.5f); - } - if (ImGui.Checkbox("Slightly Higher Value", ref slightlyHigherShadowValues)) - { - if (tripleShadowRes) - { - if (slightlyHigherShadowValues) - { - //shadowRes2.Disable(); - //shadowRes2_Upper.Enable(); - //shadowRes3.Disable(); - //shadowRes3_Upper.Enable(); - shadowRes4_3x.Disable(); - shadowRes4_Limit.Enable(); - } - else - { - //shadowRes2_Upper.Disable(); - //shadowRes2.Enable(); - //shadowRes3_Upper.Disable(); - //shadowRes3.Enable(); - shadowRes4_Limit.Disable(); - shadowRes4_3x.Enable(); - } - } - Config.GraphicalTweaks graphics = config.Graphics; - graphics.SlightlyHigherShadowValues = slightlyHigherShadowValues; - config.Graphics = graphics; - ConfigManager.SaveConfig(this); - } - if (ImGui.BeginItemTooltip()) - { - ImGui.Text("Set a value that used to be right below it's limit to it's limit.\nIf this doesn't cause crashes, it will become the default."); - ImGui.EndTooltip(); - } - if (!tripleShadowRes) - { - ImGui.PopItemFlag(); - ImGui.PopStyleVar(); - } - - ImGui.PushItemWidth(width * 0.125f); + ImGui.PushItemWidth(width * 0.145f); if (ImGui.Checkbox("##Apply Larger Shadow Range", ref applyShadowBias)) { Config.GraphicalTweaks graphics = config.Graphics; @@ -4323,10 +4320,10 @@ namespace MHWNewCamera } if (ImGui.BeginItemTooltip()) { - ImGui.Text("This will inversely reduce the detail of shadows closer to the camera (like the player shadow), so it's a trade-off.\nValue is an offset. Recommended: 0.7."); + ImGui.Text("This will inversely reduce the detail of shadows closer to the camera (like the player shadow), so it's a trade-off.\nValue is an offset. Recommended: 0.6."); ImGui.EndTooltip(); } - + ImGui.SameLine(); if (ImGui.Checkbox("##Apply Radius", ref applyShadowRadius)) { Config.GraphicalTweaks graphics = config.Graphics; @@ -4344,10 +4341,9 @@ namespace MHWNewCamera } if (ImGui.BeginItemTooltip()) { - ImGui.Text("Size of a shadows border (to be softened if HQ Mode is enabled).\nValue is an offset. Recommended: -0.0001 (if Shadow Range = 0.7)."); + ImGui.Text("Size of a shadows border (to be softened if HQ Mode is enabled).\nValue is an offset. Recommended: -0.0001 (if Shadow Range = 0.6)."); ImGui.EndTooltip(); } - ImGui.PopItemWidth(); if (ImGui.Checkbox("Higher Shadow Detail in Hoarfrost Reach/Seliana Gathering Hub", ref lowShadowDetailOverride)) @@ -4363,36 +4359,12 @@ namespace MHWNewCamera ImGui.EndTooltip(); } - if (ImGui.Checkbox("SSAO Adjustments", ref ssaoAdjustments)) + if (ImGui.Checkbox("Enable \"HQ Mode\"", ref enableHQMode)) { + ssaoAdjustments = enableHQMode; setSSAOAdjustements(ssaoAdjustments, ssaoB); - Config.GraphicalTweaks graphics = config.Graphics; - graphics.SSAOAdjustments = ssaoAdjustments; - config.Graphics = graphics; - ConfigManager.SaveConfig(this); - } - if (ImGui.BeginItemTooltip()) - { - ImGui.Text("Reduce Max Sample Num HQ because it tanks performance and set Dispersion to 1.75 to mitigate grid artifact."); - ImGui.EndTooltip(); - } - - if (ImGui.Checkbox("SSR Adjustments", ref ssrAdjustments)) - { + ssrAdjustments = enableHQMode; setSSRAdjustements(ssrAdjustments); - Config.GraphicalTweaks graphics = config.Graphics; - graphics.SSRAdjustments = ssrAdjustments; - config.Graphics = graphics; - ConfigManager.SaveConfig(this); - } - if (ImGui.BeginItemTooltip()) - { - ImGui.Text("Revert HQ value for Accurate Threshold because it looks off in many places and slightly increase Loop Count."); - ImGui.EndTooltip(); - } - - if (ImGui.Checkbox("HQ Mode", ref enableHQMode)) - { setHQMode(enableHQMode); Config.GraphicalTweaks graphics = config.Graphics; graphics.EnableHQMode = enableHQMode; @@ -4401,7 +4373,7 @@ namespace MHWNewCamera } if (ImGui.BeginItemTooltip()) { - ImGui.Text("Enable built-in HQ Mode which increases a few parameters and enables HQ Shadows, referring to softened shadow edges.\nIt is not recommended to enable this without also enabling SSAO/SSR Adjustments above."); + ImGui.Text("Enable the game's built-in \"HQ Mode\" and associated tweaks to not tank performance.\nBy default HQ Mode jacks up various rendering parameters and enables HQ Shadows.\nSome of the values are put too high to work for general gameplay.\nThis option adjusts the following parameters:\n SSAO Max Sample Num HQ: 64 -> 16\n SSLR Accurate Threshold HQ: 0.5 -> 0.2\nAs well as SSAO Dispersion: 10.0 -> 1.75 to fix a grid artifact in the SSAO rendering."); ImGui.EndTooltip(); } @@ -4426,24 +4398,7 @@ namespace MHWNewCamera ImGui.EndTooltip(); } - /* I haven't verified how correct this is, it doesn't look quite right and breaks lots of NPCs faces. - ImGui.Checkbox("Character Creator Rendering Params", ref characterCreatorRendering); - ImGui.Checkbox("Save Select Rendering Params", ref saveSelectRendering); - if (ImGui.Checkbox("Character Creator Face Rendering", ref characterCreatorFace)) - { - if (characterCreatorFace) - { - defaultCharacterCreatorParam.Enable(); - } - else - { - defaultCharacterCreatorParam.Disable(); - } - } - */ - ImGui.PushItemWidth(width * 0.1f); - ImGui.InputFloat("##Foliage LOD Bias", ref foliageLODBias, 0.0f, 0.0f, "%.2f"); if (ImGui.BeginItemTooltip()) { @@ -4476,8 +4431,7 @@ namespace MHWNewCamera ImGui.SameLine(); ImGui.Text("Terrain/Object LOD Bias"); - ImGui.InputFloat("Snow LOD Param", ref snowField4GlobalLODParam, 0.0f, 0.0f, "%.2f", ImGuiInputTextFlags.EnterReturnsTrue); - + ImGui.InputFloat("Snow LOD Bias", ref snowField4GlobalLODParam, 0.0f, 0.0f, "%.2f", ImGuiInputTextFlags.EnterReturnsTrue); ImGui.PopItemWidth(); bool lodsSet = areLODFactorsSet(); @@ -4549,28 +4503,7 @@ namespace MHWNewCamera } if (ImGui.BeginItemTooltip()) { - ImGui.Text("Don't reduce an animals animation rate when they're far from the camera."); - ImGui.EndTooltip(); - } - - if (ImGui.Checkbox("Disable Volumetric Downsample and Blur", ref disableVolumeDownsample)) - { - if (disableVolumeDownsample) - { - zeroVolumetricDownsample.Enable(); - } - else - { - zeroVolumetricDownsample.Disable(); - } - Config.GraphicalTweaks graphics = config.Graphics; - graphics.DisableVolumetricDownsample = disableVolumeDownsample; - config.Graphics = graphics; - ConfigManager.SaveConfig(this); - } - if (ImGui.BeginItemTooltip()) - { - ImGui.Text("Disabling blur is an undesirable compromise but skipping the downsample without skipping blur is a more involved change.\nThis will look broken with Volume Rendering Quality set to anything but Highest."); + ImGui.Text("Don't reduce an animal's animation rate when they're far from the camera."); ImGui.EndTooltip(); } @@ -4621,7 +4554,7 @@ namespace MHWNewCamera { ImGui.PushID("Player"); ImGui.Text("Player:"); - ImGui.Text($"Pointer: {player.Instance:x}"); + ImGui.Text($"Address: {player.Instance:x}"); ImGui.Text($"ActionController: {player.ActionController.Instance:x}"); ActionInfo currentActionInfo = player.ActionController.CurrentAction; @@ -4667,7 +4600,7 @@ namespace MHWNewCamera ImGui.PushID("Palico"); ImGui.Text("Palico/Otomo"); - ImGui.Text($"Pointer: {sOtomo.Instance:x}"); + ImGui.Text($"Address: {sOtomo.Instance:x}"); ImGui.PopID(); ImGui.Separator(); @@ -4729,14 +4662,51 @@ namespace MHWNewCamera ImGui.Text($"shadowBias: {lastShadowBias}"); ImGui.Text($"shadowRadius: {lastShadowRadius}"); + if (ImGui.Checkbox("Disable Volumetric Downsample and Blur", ref disableVolumeDownsample)) + { + if (disableVolumeDownsample) + { + zeroVolumetricDownsample.Enable(); + } + else + { + zeroVolumetricDownsample.Disable(); + } + Config.GraphicalTweaks graphics = config.Graphics; + graphics.DisableVolumetricDownsample = disableVolumeDownsample; + config.Graphics = graphics; + ConfigManager.SaveConfig(this); + } + if (ImGui.BeginItemTooltip()) + { + ImGui.Text("Disabling blur is an undesirable compromise but skipping the downsample without skipping blur is a more involved change.\nThis will look broken with Volume Rendering Quality set to anything but Highest."); + ImGui.EndTooltip(); + } + + /* I haven't verified how correct this is, it doesn't look quite right and breaks lots of NPCs faces. + ImGui.Checkbox("Character Creator Rendering Params", ref characterCreatorRendering); + ImGui.Checkbox("Save Select Rendering Params", ref saveSelectRendering); + if (ImGui.Checkbox("Character Creator Face Rendering", ref characterCreatorFace)) + { + if (characterCreatorFace) + { + defaultCharacterCreatorParam.Enable(); + } + else + { + defaultCharacterCreatorParam.Disable(); + } + } + */ + if (ImGui.CollapsingHeader("Renderer Parameters")) { - ImGui.Text($"FXAA Address: {fxaaPointer:x}"); - if (fxaaPointer != 0x0) + ImGui.Text($"FXAA Address: {fxaaAddr:x}"); + if (fxaaAddr != 0x0) { - drawRenderParameter("FXAA Subpix", fxaaPointer, 0x178, true); - drawRenderParameter("FXAA Edge Threshold", fxaaPointer, 0x17C, true); - drawRenderParameter("FXAA Edge Threshold Min", fxaaPointer, 0x180, true); + drawRenderParameter("FXAA Subpix", fxaaAddr, 0x178, true); + drawRenderParameter("FXAA Edge Threshold", fxaaAddr, 0x17C, true); + drawRenderParameter("FXAA Edge Threshold Min", fxaaAddr, 0x180, true); } ImGui.Separator(); nint baseAddr = MemoryUtil.Read(0x1451C4368); @@ -4799,7 +4769,7 @@ namespace MHWNewCamera ImGui.PushID("Pad"); ImGui.Text("Pad:"); - ImGui.Text($"Pointer: {controllerAddr():x}"); + ImGui.Text($"Address: {controllerAddr():x}"); int PadRx = MemoryUtil.Read(controllerAddr() + 0x1B0); int PadRy = MemoryUtil.Read(controllerAddr() + 0x1B4); int PadLx = MemoryUtil.Read(controllerAddr() + 0x1B8); @@ -4825,10 +4795,10 @@ namespace MHWNewCamera ImGui.PushID("Credits"); if (ImGui.CollapsingHeader("Credits")) { - ImGui.Text("Fexty/SharpPluginLoader Authors: Framework for this mod and reference for various memory locations."); - ImGui.Text("Otis_Inf: Initial LOD and object fading adjustment locations. Time of day and game speed."); - ImGui.Text("Andoryuuta: MHW-ClassPropDump/MHW-DTI-Dumps."); - ImGui.Text("MonsterHunterWorldModding/wiki Authors."); + ImGui.TextWrapped("Fexty/SharpPluginLoader Authors: Framework for this mod and reference for various memory locations."); + ImGui.TextWrapped("Otis_Inf: Initial LOD and object fading adjustment locations. Time of day and game speed."); + ImGui.TextWrapped("Andoryuuta: MHW-ClassPropDump/MHW-DTI-Dumps."); + ImGui.TextWrapped("MonsterHunterWorldModding/wiki Authors."); } ImGui.PopID(); } diff --git a/Research/research.txt b/Research/research.txt deleted file mode 100644 index 23fa433..0000000 --- a/Research/research.txt +++ /dev/null @@ -1,49 +0,0 @@ -## Disable UI -MonsterHunterWorld.exe+235307B - 0F84 81000000 - je MonsterHunterWorld.exe+2353102 -MonsterHunterWorld.exe+234DE5C - F6 C2 01 - test dl,01 -MonsterHunterWorld.exe+235318C - FF 90 30010000 - call qword ptr [rax+00000130] - -## Toggle Minimap Camera -MonsterHunterWorld.exe+1E55DA0 - 0F84 6D020000 - je MonsterHunterWorld.exe+1E56013 - -## Higher LODs (Credit: Otis_Inf) -3F -> 42 -5CF8FC24 - 5CF425b0 -5E59FC24 = 0.0 -5E59FC28 = 0.0 -5E59FC34 = 64.0 -5E59FC4C = 64.0 - -## Set Time (Credit: Otis_Inf) -MonsterHunterWorld.exe+1B83487 - F3 0F11 41 38 - movss [rcx+38],xmm0 - -## Game Speed (Credit: Otis_Inf) -0AB6C094(speed) - 0AB6C084 -MonsterHunterWorld.exe+225FE48 - F3 0F11 8B 94000000 - movss [rbx+00000094],xmm1 -MonsterHunterWorld.exe+226000C - F3 0F11 B3 94000000 - movss [rbx+00000094],xmm6 - -## Shadow Map -LOW = 512x512, 1024x512 -MEDIUM = 640x640, 1280x640 -HIGH = 1024x1024, 2048x1024 -1408 -> 1792 -> 2816 -1024 -> 1536 -> 2048 -MonsterHunterWorld.exe+2317800 - 8B 81 38010000 - mov eax,[rcx+00000138] -MonsterHunterWorld.exe+2287AD0 - 89 91 30550000 - mov [rcx+00005530],edx - -MonsterHunterWorld.exe+2288A70 - F3 0F59 0D 1821D000 - mulss xmm1,[MonsterHunterWorld.exe+2F8AB90](8.0) -> 14028389C(16.0) - or -MonsterHunterWorld.exe+43FF84 - F3 0F10 0D CCFEA002 - movss xmm1,[MonsterHunterWorld.exe+2E4FE58](1.0) -> 1400001B0(2.0) -MonsterHunterWorld.exe+43F2D8 - F3 0F10 35 7800AD02 - movss xmm6,[MonsterHunterWorld.exe+2F0F358] - - -MonsterHunterWorld.exe+2288B5E - 74 20 - je MonsterHunterWorld.exe+2288B80 -> nop - or -## Check address of left side for shadow map values. -## Doubling values here allows double res without nop patch. -MonsterHunterWorld.exe+2288B00 - 89 91 00550000 - mov [rcx+00005500],edx -## Needs replace or figure out something. -MonsterHunterWorld.exe+2287B1A - C7 81 20550000 00100000 - mov [rcx+00005520],00000800 - -## Disable Dithered Fade Close to Camera. (Credit: Otis_Inf) -000000005D2ACD10+71 diff --git a/changelog.txt b/changelog.txt new file mode 100644 index 0000000..ff50b70 --- /dev/null +++ b/changelog.txt @@ -0,0 +1,70 @@ += 4.0 + MHWNewCamera_4.0_beta1.zip: 1/22/26, sha256-d3f16b30260b6aef1a981f1f6dc19f7067e13330c931c164ca4c3d254bb3eb92 +== Changelog +* Add basic keyboard binds. +* Add option to override in-game View Mode (enable free camera from this mod instead). +* Add controller bind to switch perspective camera presets. +* Add bind to disable SSAO. +* Add the ability to control the game speed and time of day. +* Add option to adjust snow lod. +* Adjust how Increased Shadow Detail in Hoarfrost affects Shadow Range. It now doubles only the offset instead of the whole value. +* Add option to disable reduced rate animations of animals that are far from the camera. +* Add option to enable HQ Mode and accompanying SSAO/SSR adjustments. +* Add experimental underwater camera feature that mimics the screen filter of diving whenever the camera goes underwater. +* Add the ability to hide your weapon. +* Allow changing between passive and combat mode. +* Added function to control view and control player wetness. +* Add button to trigger the action of sitting in hot springs. As well as options to allow hot springs anywhere and disable the steam effect on your hunter. +* Add function to simulate crawling under a passageway anywhere combat controls are active. + += 3.0 + MHWNewCamera_3.0.zip: 11/18/25, sha256-2fb408248bbed3363c2deaa55bc6f7d76b6c261cd62e32001e346dc2219bfa19 +== Changelog +* Changed 2x Shadow Resolution to 3x. +* Added the ability to actually increase the range of realtime shadows (trade-off with shadow detail). +* Added an option to revert the reduced shadow detail mode in Hoarfrost Reach. +* Added an option to disable the LOD limit on players, palicos and NPCs during gameplay (like in View Mode or in your room). +* Fixed free camera flickering in cutscenes. +* Inverted controls when rolled upside down for movement consistency. +* Added binds for toggling depth of field and locked vertical movement, reducing near clip, resetting roll and zoom, and teleporting player to the camera position. +* Added a table to see binds in-game and cleaned up various parts of the UI. +* Fixed input handling with 2 or more controllers connected. +* Fixed a crash when leaving the gallery with free camera enabled and the UI open. + += 2.1 + MHWNewCamera_2.1.zip: 10/21/25, sha256-2de35848938ff92002c25e5189e110349a55bff28a5e0cfb53176bb766f0b5ae +== Changelog +* Fix crash on game open when using 2x Shadow Resolution on Windows. +* Disable character/palico fade automatically when entering free camera. +* Save LOD factors in the config. +* Fix using face buttons or d-pad for the free camera toggle bind. +* Halve speed of camera roll with d-pad left and right. +* Clamp adjusted FOV to be between 1.0 and 179.0. +* Re-organize the UI. + += 2.0 + MHWNewCamera_2.0.zip: 10/11/25, sha256-20f1782874350781363f9ad69f6c3557d6a92f69a786477f182767e00a2b6a78 +== Changelog +* Added experimental graphical enhancements. +* Added function to disable object, character and palico fade effect when the camera gets close. +* Fixed some visual jumps. +* Made checks for when to disable perspective camera much less scuffed. +* Made camera roll more proper and improved various math. +* Added toggle UI function. +* After entering free camera the minimap follows your camera instead of your player and shows the little blue camera like in "View Mode". +* Many small fixes. + += 1.1 + MHWNewCamera_1.1.zip: 08/30/25, sha256-7416ec31b27d85b5169f985a8413e68c1cea94473498107b5f64e3c31743b8ee +== Changelog +* Add UI button to disable the mod entirely and one to disable just the toggle free camera bind. +* Add more hooks for disabling player collision and gravity. +* Improve checks for special cases where camera offsets should or shouldn't be applied (still scuffed). +* Increase precision of camera look (right stick) in free camera. + += 1.0 + MHWNewCamera_1.0.zip: 07/29/25, sha256-95992f5e9f975ad90a23b838942db7925318e899a703a75c6898511cb31b85a5 +== Changelog +* Release + +// vim: set ft=asciidoc: -- cgit v1.2.3-101-g0448