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).