Skip to content

Absorb + Add whole bunch of other mods#35

Draft
northaxosky wants to merge 11 commits into
masterfrom
feat/mod-absorption
Draft

Absorb + Add whole bunch of other mods#35
northaxosky wants to merge 11 commits into
masterfrom
feat/mod-absorption

Conversation

@northaxosky

@northaxosky northaxosky commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Standalone fixes/changes

  • Sprint Stutter: raise first-person sprint position-delta snap threshold
  • Moon Rotation: correct lunar disc orientation at init
  • Weapon Debris Crash: skip the NVIDIA Turing+/FleX collision CTD path
  • Save Compression: libdeflate (zlib level 6) for save writes

High FPS Physics Fix

  • Physics core: Untie + iFPSClamp=0 + per-subsystem speed fixes ([HighFPSPhysics])
  • Loadscreen: black / animation / post-load-speed patches into bLoadScreen; drops the external dll
  • Papyrus budget: frame-delta-scaled fUpdateBudgetMS (bDynamicUpdateBudget), orthogonal to bBakaMaxPapyrusOps
  • Frame limiter: QPC hybrid-wait cap + VSync/present-interval override + VRR tearing + loading cap, via a vtable IDXGISwapChain::Present hook (runtime-agnostic, no per-version RE)

Raise the first-person camera position-delta snap threshold 500.0f -> 1100.0f in FirstPersonState::Update so sprint-frame deltas stay on the smooth-interp path instead of snapping. REL::ID{61995,2664490,2664490}; guarded on the 0x43FA0000 (500.0f) pre-write signature. Ported from Sprint Stuttering Fix (AntoniX35, MIT).
Flip the OR-mask imm8 0x04 -> 0x03 in Moon::Init ([node+0x140]) to correct lunar disc orientation. REL::ID{114988,2208804,2208804} + Offset{0x1E2,0x1F7,0x1F7}; guarded on the 04 48 8B 4E 08 window (identical OG/NG/AE). Ported from Moon Rotation Fix (AntoniX35, MIT).
Force the NVFlex collision-geometry conditional jump unconditional (E9 jmp) to skip the FleX collision-shape registration that CTDs on Turing+ / deprecated-FleX drivers. REL::ID{22388,2195766,2195766}; guard verifies the site is a ja rel32 whose target matches the independently computed skip address. Ported from Weapon Debris Crash Fix (AntoniX35, MIT).
Detour BGSSaveLoadUtilities::CompressBuffer to libdeflate zlib (windowBits +15, level 6), the compress complement of the existing bLibDeflate inflate swap. Reproduces the engine contract exactly (srcLen<0x20 -> 0; avail_out=min(dstCap,srcLen-1); 0 = store uncompressed), with a 34-byte prologue guard and an engine-zlib fallback on compressor-alloc failure. REL::ID{104318,2228204,2228204}.
Port the High FPS Physics Fix physics-decoupling core (Untie + iFPSClamp=0 + the per-subsystem speed-fix trampolines) as ModulePhysicsFix across OG 1.10.163 / NG 1.10.984 / AE 1.11.221. Each site is byte-signature guarded so a bad resolve no-ops; OG and NG/AE use separate caves where the engine registers/lengths diverge; per-fix toggles live under [HighFPSPhysics]. Installs at kGameDataReady so iFPSClamp resolves; trampoline reserve raised to 4096. Ported from High FPS Physics Fix (AntoniX35, MIT). FixLoadingModel and the limiter/window/OSD subsystems are out of scope.
Add the toml entries and known-key validation for bSprintStutter, bMoonRotation, bWeaponDebrisCrash, bSaveCompression, bPhysicsFix, and the [HighFPSPhysics] per-fix sub-toggles. They were running on their defaults but were missing from Addictol.toml and AdConfigValidation, so they were not visible or editable.
Cut the explanatory comments down to rare, single-line notes; the WARN logs and code already document the guards.
bLoadScreen now applies DisableBlackLoadingScreens, DisableAnimationOnLoadingScreens and PostloadingMenuSpeed itself (byte-sig guarded, per-runtime), so it no longer requires HighFPSPhysicsFix.dll or sniffs its bytes; the ultra-wide clear keys off the new toggles. Ported from High FPS Physics Fix (AntoniX35, MIT).
@northaxosky
northaxosky marked this pull request as draft June 23, 2026 08:35
bool ModuleSprintStutter::DoInstall([[maybe_unused]] F4SE::MessagingInterface::Message* a_msg) noexcept
{
// Raise the FirstPersonState::Update camera snap threshold 500.0f -> 1100.0f so sprint frames stay on the smooth path instead of hitching.
const auto target = REL::Relocation<std::uintptr_t>{ REL::ID{ 61995, 2664490, 2664490 } }.address();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why duplicate the ID? 61995, 2664490 enough

static constexpr std::int32_t Magic1 = 0x426b4b44; // 58.8235
static constexpr std::int32_t Magic2 = 0xc26b4b44; // -58.8235

[[nodiscard]] static bool VerifyBytes(std::uintptr_t a_addr, std::initializer_list<std::uint8_t> a_sig) noexcept

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

needs add into shared-lib

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

or utils Addictol

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants