docs: file #389 (SmartboxFOV divergence, register AD-89) + #390 (UI stranded off-screen on downscale)

Both from the 2026-08-13 display gate session. #389 carries the full
decomp-verified retail FOV law; #390 requires the retail reposition
mechanism from the decomp before any clamp is implemented.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-08-13 16:53:44 +02:00
parent c991de38dd
commit 4dc079533c
2 changed files with 37 additions and 1 deletions

View file

@ -24,6 +24,41 @@ What does NOT go here:
- Every session: scan OPEN issues at start; promote/close anything we touched during the session before ending. - 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. - Promoting to a Phase: mark as `DONE (promoted to Phase X)` + commit SHA where the Phase entry landed.
## #390 — UI windows stranded off-screen when the resolution shrinks (no retail reposition/clamp on display change)
**Status:** OPEN — filed 2026-08-13 (user gate report: "If I go from a high
resolution to a low, the GUI will be outside of the screen and I have to
resize the window to get it"). Floating retail-UI windows keep absolute
pixel positions across resolution changes; a panel parked at x=2000 on a
2560-wide window is unreachable after a pick down to 1280. Retail keeps
windows reachable across display changes — the exact retail mechanism
(clamp-into-bounds vs proportional reposition vs per-resolution layout
sets) must be pulled from the named decomp (UIElementManager /
UIRegionManager display-change handling) BEFORE implementing; do not
invent a clamp rule. Part of the display work block with #376/#377/#388/
#389.
## #389 — World-camera FOV is an invented aspect-independent constant; retail is SmartboxFOV (vFOV = gameFOV / (aspect 0.1))
**Status:** OPEN — filed 2026-08-13 (user gate report: "meant to run on an
old aspect ratio... modern screens feels weird... some resolutions feels
like it is just squished"). Decomp-verified retail law:
`Render::SetFOVRad(SmartBox::m_fGameFOV / (RenderDevice::m_ViewportAspectRatio 0.1))`
(two sites, `0x00452b2f` and `0x00453b14`; the same expression feeds a
`tan` at `0x00451c0e`), with `m_fGameFOV` defaulting to **π/2 = 90°**
(`0x00454649`) and set in DEGREES by the Field of View option
(`× 0.0174533`, `0x00451e6a`). Net effect: retail holds the HORIZONTAL
view roughly constant (~8590°) across aspect ratios and narrows the
vertical FOV on wide screens (16:9 → vFOV ≈ 53.6°, 4:3 → ≈ 73°). acdream
instead hardcodes `ChaseCamera.FovY = π/3 = 60°` (FlyCamera likewise)
with no aspect coupling and no retail anchor — wider aspects balloon the
horizontal view and every aspect gets a different feel than retail.
Fix: port the smartbox formula into the world cameras' aspect path
(recompute applied vFOV on every SetAspect), drive `gameFOV` from the
Config tab's Field of View value in retail's degree mapping (default 90),
and delete the π/3 constant. Register row AD-89 tracks the divergence
until the port lands.
## #388 — CRASH: unhandled GlfwException "Failed to set video mode: Graphics mode not supported" during a fullscreen-state resolution/settings apply; and fullscreen/maximized windows silently ignore resolution picks ## #388 — CRASH: unhandled GlfwException "Failed to set video mode: Graphics mode not supported" during a fullscreen-state resolution/settings apply; and fullscreen/maximized windows silently ignore resolution picks
**Status:** OPEN — filed 2026-08-13 from the user's live gate session **Status:** OPEN — filed 2026-08-13 from the user's live gate session

File diff suppressed because one or more lines are too long