Skip to content

Releases: MagmaVRC/S2ModManager

0.3.0

Choose a tag to compare

@MagmaVRC MagmaVRC released this 08 Jun 07:19
9bc5e5e

S2ModManager 0.3.0

DPI, responsive layout, and UX polish pass.

Changed

  • UI scale slider range widened from 0.8-1.5x to 0.5-2.5x, so 4K users can push the UI larger.
  • Ctrl+=/Ctrl+- zoom in/out in 0.1x steps; Ctrl+0 resets to 1.0x.
  • Window position, size, and maximized state are saved on exit and restored on launch.
  • Responsive layout: details panel, table columns, and top bar buttons adapt smoothly as the window shrinks, with animated transitions instead of hard snaps. Minimum window size scales with DPI.
  • Settings panel uses a two-column layout when wide, with staggered slide-in animation, glass panel on the subnautica theme, accent-bar section headers, and responsive padding/margins.
  • Share profile modal uses the same Back + title header as settings, responsive card width, glass panel, and smoother slide-in.
  • Background drift only requests redraws when visible motion exceeds half a pixel, saving power when the drift is slow or the app is idle.
  • Render mode setting: "Reduced" (default) idles when nothing moves; "Always" renders continuously for the smoothest drift and animations.
  • Update notification dot on the Settings button when an update is available.
  • Window keeps rendering while the resize handle is held still (timer-driven frames during the Win32 modal resize loop).

Fixed

  • Semver parser rejected all standard 3-part versions, breaking the update check.
  • Window geometry was written as zeros because the HWND was already destroyed by the time the exit save ran; placement is now cached on every WM_SIZE/WM_MOVE.
  • Layout animations (details panel, column fade) could stall mid-transition if the mouse stopped moving, because the redraw chain broke on zero-dt frames during the modal resize loop.

0.2.0

Choose a tag to compare

@MagmaVRC MagmaVRC released this 04 Jun 17:35
67ce271

S2ModManager 0.2.0

Security

  • Reject unsafe PAK stem values in imported and P2P-received profiles, closing a path traversal (zip slip) that could write arbitrary files outside the mods folder.
  • Contain every materialized mod write to its target directory with a lexical containment guard, so no mod field can escape the Paks or UE4SS Mods folder.
  • Bound P2P handshake and manifest frame sizes before authentication, preventing unauthenticated peers from triggering huge allocations.
  • Cap received file sizes on the P2P transfer path.
  • All downloads are now HTTPS-only, including across redirects, preventing on-path downgrade attacks.
  • Verify the downloaded UE4SS archive against the SHA-256 digest GitHub reports before installing.
  • Cap the multithreaded LZMA decoder's memory at 1 GiB so a crafted stream cannot exhaust memory.
  • Only open http and https URLs in the browser; never hand other schemes to the shell.
  • Reject NTFS alternate-data-stream paths in shared profile file names.

Changed

  • HTTP and download requests now abort after 30 seconds of stalled transfer instead of hanging.
  • Duplicating a profile now copies compressed blobs directly instead of decompressing and recompressing, making large profile duplication much faster.
  • VFS commit reuses a single file handle for all on-disk reads instead of reopening per entry.
  • Toggling multiple mods at once now batches all toggles in a single frame.
  • SN2ModSettings dependency scan skips non-Lua mods and searches bytes in place, reducing startup time.
  • VFS entry lookup uses a hash map instead of a sorted tree.
  • Per-frame search, conflict detection, and row-key formatting are cached or allocation-free.
  • Deduplicated trim, lowerExt, and isPakSibling utilities into core/Paths.
  • Unified BundleModKind and ModType into a single ModKind enum.
  • Extracted shared PAK renumbering logic into ProfileStore::shiftPaksDown.
  • Config values are clamped and normalized on load.
  • Read-only string parameters across core and platform layers now take std::string_view instead of const std::string&, eliminating unnecessary heap allocations for callers passing literals or substrings.

Fixed

  • Fix an integer-overflow in the Data.dat index bounds check that a crafted store could slip past.
  • Make the Data.dat commit key its rewritten offsets by entry path instead of iteration position, removing a latent index-corruption hazard.
  • The Delete-key "Confirm Uninstall" dialog now actually opens (it was created in the wrong UI scope).
  • Generating a connection key no longer freezes the window while the firewall rule is created.
  • Warn when a PAK mod's companion files could not be copied during install.
  • Install PAK and UE4SS mods in a stable, sorted order so load-order numbering no longer varies by machine.
  • Warn when enabled PAK mods share the same pak name or enabled UE4SS mods target the same Mods folder.
  • Reject out-of-range octets when validating a typed or detected IPv4 address.
  • Serialize all profile-store access with a recursive mutex so a P2P receive or import worker can no longer race the UI thread and corrupt the in-memory library.

0.1.0

Choose a tag to compare

@MagmaVRC MagmaVRC released this 02 Jun 17:00
fae8d3a

S2ModManager 0.1.0

First release. mod manager for Subnautica 2 for installing, organizing, and launching PAK and UE4SS mods.

Features

  • Drag-and-drop install from files or .zip / .rar / .7z archives, auto-classified.
  • One-click enable / disable and drag-to-reorder load order.
  • Profiles - isolated, named sets of mods you can switch between.
  • PAK conflict detection.
  • One-click UE4SS install from GitHub.
  • Profile sharing: peer-to-peer (Ed25519-authenticated) or offline .s2profile files.
  • Launch through Steam with your active profile in place.

Requirements

Windows 10/11 x64, Subnautica 2 (Steam app 1962700).