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.datand the matchingchallengerift_XX.datas 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.
- Cache
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
- new
- 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 describemetadata 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.