diff --git a/docs/ISSUES.md b/docs/ISSUES.md index 1bfb34ee..9da6482f 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -53,6 +53,77 @@ parameters in the viewport render setup), port the roll drift, express the exit as the view-plane distance animation. Retail-faithfulness fix — no tuning knobs. +**TWO FIX ATTEMPTS DISCARDED BY USER DIRECTION (2026-08-17 evening; +commits removed from the branch, patches preserved in the session +scratchpad `tunnel-419-patches/`). Read this record before the next +attempt.** + +*Attempt 1 (was `9e83a49b`) — scoped winding mirror.* Theory: retail +draws the tunnel's `sides_type 0` polys with `D3DCULL_CW` through an +improper det−1 view basis; our proper basis flips screen winding, so the +inherited cull mapping keeps the mirror-image face set. Changed: +`WbDrawDispatcher.cs` (+`PushMirroredAuthoredWinding` scope + +`MirrorAuthoredCullMode` + one `EffectiveCullMode` chokepoint), +`WbDrawDispatcher.PackedOracle.cs`, `PortalTunnelPresentation.cs` (draw +inside the scope), `TeleportViewPlaneController.cs` (citations), +`PortalTunnelInteriorTests.cs` (new). USER GATE RESULT: exit flash gone +BUT the tunnel showed as a dark tube seen from OUTSIDE — the mirror +culled the interior; the "fixed" exit was a FALSE POSITIVE (nothing +drawn cannot flash). + +*Attempt 2 (was `213345bd`) — revert attempt 1 + Surface.Luminosity +emissive port.* The revert's justification (verified, durable): +`MeshExtractor.BuildPolygonIndices` emits positive-surface fans in +REVERSED index order — WB's baked D3D↔GL compensation — so +(bake reversal) ∘ (proper det+1 look-at) ≡ retail's +(authored order) ∘ (improper det−1 + `D3DCULL_CW`): the DEFAULT cull +mapping already keeps retail's faces and attempt 1 double-mirrored it. +Theory 2: the rim/flash = ambient-only dark facets because the swirl +surface `0x08000C31` authors `Surface.Luminosity = 1.0` (retail's +material emissive — `FUN_0059DA60` writes `Material.Emissive.rgb = +Luminosity`; the sky shader ports this law, the OBJECT path never did). +Changed: luminosity plumbing extractor→`WbMeshAdapter` startup +luminous-surface map→`ObjectRenderBatch`/`InstanceGroup`/`CachedBatch`/ +`PackedClassifiedBatch`→`BatchData.Reserved` float bits→`mesh_modern` +shader term (recompiled SPIR-V, 13 .spv files), plus +`PortalTunnelPresentation.cs`. USER GATE RESULT: **tunnel looked +IDENTICAL to baseline** — the rim and exit flash are back (expected, +attempt 1 reverted) and the luminosity change produced NO VISIBLE +DIFFERENCE, meaning either theory 2 is wrong or the plumbing never +reached the tunnel's draw (UNRESOLVED — never verified live; the +per-batch value could be defaulting to 0 anywhere along the six-hop +chain). + +*Durable byte-decoded facts (PDB-paired binary, keep):* roll drift +`duration = RandDouble(0.6, 1.8)`, `endAngle = RandDouble(0.0, 360.0)`, +interp `start + (end−start)·GetAnimLevel/1024`, applied +`SetCameraDirection_Degrees(0, angle, 0)` @0x004D6FD6–704E; +`TRANSITION_VIEW_PLANE_DISTANCE @0x007BD260 = 0.001` (double), +`TELEPORT_ANIM_FADE_TIME @0x007BD278 = 1.0`, MIN/MAX_CONTINUE +@0x007BD268/70 = 2.0/5.0, `TELEPORT_ANIM_FPS @0x007BD280 = 40.0f`; +fade `dist = (TVPD − gameVDist)·level/1024 + gameVDist`; +`set_vdst @0x0054B240`: `fov = 2·atan(1/d)` clamp (0.001, π), +`znear = d<0.4 ? 0.1 : d·0.25`. CreatureMode ambient (0.3,0.3,0.3) +@0x004543CF (ours matches), distant light 2.0 dir (0.3,−1.9,0.65) +(matches). The original filing's "own fixed projection" premise is +REFUTED: `gmSmartBoxUI::PostInit @0x004D6DB3` calls +`CreatureMode::UseSmartboxFOV` — the tunnel FOLLOWING the Config FOV is +retail. Camera IS at the authored eye (three-way enclosure proof: 0 +escape rays at all 120 frames, live-pak batches identical to fresh +extraction). Tunnel = Setup `0x02000306`, two half-torus parts of GfxObj +`0x0100080B` (360 polys `sides_type 0` + 4 unstippled pos-surface quads +— the purple floaters are authored content). + +**MANDATORY NEXT PROTOCOL (agreed with the user after two failed +rounds): apparatus BEFORE any further fix.** (1) a probe-gated tunnel +FREEZE (`ACDREAM_PROBE_*` family) holding TAS_TUNNEL indefinitely so +the scene is statically inspectable; (2) ONE RenderDoc capture of the +frozen frame — which triangles draw, cull state, material constants +actually bound; (3) the ACViewer oracle on Setup `0x02000306` (clean +interior there ⇒ our pipeline, rings there ⇒ shared dat +interpretation); (4) a retail side-by-side screenshot for ground truth +(brightness included). Fix only against that evidence. + ## #418 — Login world load takes ~27 s: publication advances at a flat 32 blocks/s **Status:** IN-PROGRESS 2026-08-17 — producer half landed (this commit's