From bee38b0746db2af97492a452972c6ece8cd66366 Mon Sep 17 00:00:00 2001 From: Erik Date: Fri, 14 Aug 2026 11:06:55 +0200 Subject: [PATCH] docs: file #393 - retail texture-detail options (highres toggle + mip-skip levels) From the 2026-08-14 highres verification: acdream always runs at retail MAX texture detail (Textures[0] + unconditional client_highres.dat). Retail's two knobs (ID_Option_HighResChange gating LoadHighResDat @0x004FA250; Landscape/Environment TextureDetail as a mip-chain start index @0x0044C3C8) are recorded with their decomp anchors and the acdream-side seams. Post-M4. Co-Authored-By: Claude Fable 5 --- docs/ISSUES.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/docs/ISSUES.md b/docs/ISSUES.md index 83151052..d60bfa77 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -24,6 +24,40 @@ What does NOT go here: - Every session: scan OPEN issues at start; promote/close anything we touched during the session before ending. - Promoting to a Phase: mark as `DONE (promoted to Phase X)` + commit SHA where the Phase entry landed. +## #393 — Texture detail options: retail's "High Resolution Textures" toggle + Landscape/Environment TextureDetail mip-skip + +**Status:** OPEN — filed 2026-08-14 from the highres-texture verification +(post-M4 nice-to-have; perf/nostalgia option, no gameplay impact). +acdream today loads `client_highres.dat` unconditionally and always picks +`Textures[0]` — retail's MAXIMUM texture detail, verified end-to-end (live +path AND the baked `acdream.pak`; the 2026-08-14 investigation's evidence +chain). Retail additionally offers two knobs acdream has no equivalent for: + +1. **"High Resolution Textures" toggle** (change-notice string + `ID_Option_HighResChange`; `CLCache::LoadHighResDat @0x004FA250` only + runs when armed). Off = `client_highres.dat` never loads; lookups use + the portal-resident versions. acdream shape: a Config-tab option that + skips the highres fallback in `DatCollectionAdapter.TryGet` (portal + class: `_portal || _highRes`, `DatCollectionAdapter.cs:90`) and + `MeshExtractor`'s explicit highres fallbacks (`MeshExtractor.cs:399,767` + — which currently THROW on a miss; the off-path must degrade the way + retail does, NOT throw). **Research prerequisite:** what retail falls + back to for surfaces whose ONLY copy lives in highres. +2. **Texture detail levels** (`Render_LandscapeTextureDetail` / + `Render_EnvironmentTextureDetail` UIPreferences; the pick + `@0x0044C3C8`): the enum is an INDEX into the texture's source-level + (mip) chain — detail 0 keeps every level, detail N drops the N largest + (`i_1 = m_num - esi_1` keeps levels from index N; + `RenderTexture::ShouldDropHighDetail` can force it under memory + pressure). acdream shape: skip/downsample the top N levels at Vulkan + texture upload — works for live uploads and pak payloads alike (the + downsample is at upload, not bake; NO re-bake needed). + +Also carried from the same investigation: a one-off enumeration proving +portal/highres id sets are disjoint (the "portal wins on overlap" +`TryResolvePreferred` corner — no overlap evidence exists, a ~20-line +tool run closes it). + ## #392 — A refused/failed fullscreen enter leaves `fullscreen: true` persisted against a windowed client **Status:** OPEN — filed 2026-08-13 from the #376/#388 blast review (M4).