Skip to content

v3.1_2026-02-09

Latest

Choose a tag to compare

@god-jester god-jester released this 09 Feb 23:20
1456083

For players

This build is a big internal cleanup with real player-facing wins: offline stability improvements (Challenge Rifts + Seasons), much stronger boot-time validation/reporting, and a more maintainable config + GUI pipeline.

Highlights

  • Mailbox Season cache retrieval works offline again. The mailbox UI no longer blocks access when you are offline while a season override is active, so season-swapped gear can be retrieved from mail as intended.
  • Challenge Rift cache retrieval is more reliable offline (including for seasonal heroes). D3Hack now caches the live Challenge Rift pubfiles to SD and keeps the Challenge Rift config/data pairing stable when using cached config.
  • Fixed an invisible model issue by disabling the Flythrough debug flag by default.
  • Config + GUI overhaul. Config is now schema-driven (TOML + GUI metadata), and the in-game config UI has been reorganized and polished (dense sections, filters, bulk actions, readability, scaling).

More GUI refinements are coming; there are still some visual bugs I am actively iterating on.

Changes since v3.0_2026-01-31: v3.0_2026-01-31...v3.1_2026-02-09

Offline Seasons + Mailbox

  • Fixed offline mailbox access for the season swap flow by bypassing the mailbox lobby-connectivity gate only when seasons are actively overridden by d3hack.
    • This restores the intended workflow: season swap -> gear is unequipped -> items are delivered via save-backed mail -> you can retrieve them offline.

Offline Challenge Rifts + Pubfile Caching

  • Added SD-backed pubfile caching under sd:/config/d3hack-nx/pubfiles/ with fallback behavior when online fetch fails:
    • config.txt
    • seasons config pubfile (respects the game cmdline filename if set, otherwise falls back to seasons_config.txt)
    • blacklist pubfile (respects the game cmdline filename if set, otherwise falls back to blacklist_config.txt)
  • Challenge Rift pubfile caching + offline injection improvements:
    • Cache challengerift_config.dat and the matching challengerift_XX.dat as they are parsed, so offline runs can reuse the exact live data.
    • When using cached Challenge Rift config, D3Hack no longer re-randomizes the challenge number. This keeps the weekly data selection consistent and prevents config/data mismatches.

Boot, Offsets, and Hook Safety

  • Hooks are now installed through a registry with explicit boot stages and offset validation.
  • D3Hack prints a concise boot report after ShellInitialized.
  • Stronger build/version guardrails (abort cleanly on unsupported builds) and safer symbol lookup logging.

GUI / Overlay / Localization

  • Overlay scale curve is now piecewise across 720/1080/1440/2160 targets with safe clamps, plus a touch-target frame-height floor.
  • Config window UX polish:
    • responsive table vs stacked layout helpers
    • clearer section grouping (reshack, events, cheats, loot)
    • filtering + per-section clear-filter actions
    • bulk actions for dense sections
    • restart-required markers surfaced more consistently
  • Translation metadata loading:
    • new strings_meta.toml
    • language list is driven by metadata in the config window
    • notification key event sink
  • Fixed missing localization keys for filter status UI.
  • Overlay internals refactor: split NVN hooks, HID block, alloc, fonts; add overlay window registration; add on-screen keyboard support.
  • Fixed a shared font atlas retry edge case to avoid getting stuck on fallback fonts.

Logging, FS, Build, and Docs

  • Buffer early game logs and flush after ErrorManager logging init (prevents early boot logs being dropped).
  • Centralized FS/log helpers (atomic writes, config dirs, log-once helpers) and reduced log stream header spam.
  • Build embeds git describe metadata and a clearer displayed build id (g<sha> built <timestamp>).
  • README refresh to reflect the new config system + boot report.
  • Misc cleanup: util/patch split, debug hook isolation behind compile-time gates, and lint/tidy passes.