diff --git a/docs/ISSUES.md b/docs/ISSUES.md index 11400283..c20e0a10 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -3714,6 +3714,60 @@ Unverified. The likely culprits, ranked by suspected probability: --- +## #107 — Indoor spawn wedge: player stuck (in air / in wall) when logging in inside a building + +**Status:** OPEN +**Severity:** HIGH +**Component:** physics / player-mode entry (`PlayerModeAutoEntry`, spawn teleport handling) + +Reproduces 3-for-3 (2026-06-10) when `+Acdream` logs in INSIDE the Holtburg inn (character +logged out indoors): player-mode auto-entry fires (`auto-entered player mode` in the log), +then the player hangs in the air / in a wall and movement input is ignored. One stuck run +showed `live: teleport started (seq=1)` with no completion — ACE pushing a position +correction that never resolves. The #106 gate-2 `isSpawnGroundReady` hold checks +`SampleTerrainZ != null` (outdoor TERRAIN under the spawn) — an INDOOR spawn's ground is +the cell floor, not terrain, so the relationship between the hold, the spawn teleport, and +indoor grounding needs investigation. Outdoor spawns enter fine. Workaround: none from the +client; relaunching re-wedges because the character is parked indoors. +Apparatus when picking this up: `ACDREAM_CAPTURE_RESOLVE` + `ACDREAM_PROBE_RESOLVE` on a +login-indoors run; logs `flood-fix-gate2.log` / `flood-fix-gate3.log` (untracked) hold the +stuck-run output. + +--- + +## #108 — Cellar↔main-floor transition: terrain (grass) sweeps across the upstairs door opening + +**Status:** OPEN +**Severity:** MEDIUM +**Component:** render / indoor PView (OutsideView slice vs interior-root depth handling) + +During the cellar→main-floor ascent (Holtburg), the door opening visible on the main floor +shows the outdoor GRASS texture sweeping over it — "like outdoor ground rising up from the +floor to cover it (as if watching it from below) and lowering back down when crossing up" +(user gate, 2026-06-10, post-`dac8f6a`). Likely the landscape drawn through the OutsideView +slice while the viewer is in the stairwell, with the eye below outdoor terrain height — the +terrain surface crosses the doorway region as the eye rises. Needs its own capture (probe +run on the cellar stairs) to pin whether the OutsideView region, the doorway depth-clear, +or terrain-vs-cell draw order is at fault. + +--- + +## #109 — Exit door across the room oscillates between door texture and background color + +**Status:** OPEN +**Severity:** MEDIUM +**Component:** render / indoor PView (exit-portal region vs door entity draw order) + +In a Holtburg house with a second exterior door: standing inside and looking at the OTHER +exit door across the room, the door surface oscillates between its real texture and the +background color, "almost like a mix of both" (user gate, 2026-06-10, post-`dac8f6a`). +Suspect family: the per-frame interaction between the exit-portal OutsideView slice for +that doorway, the doorway depth-clear (`ClearDepthSlice`), and the door ENTITY's draw — +alternating which wins per frame. Distinct from the (fixed) flood strobe: the flood is +stable now; this is a draw-order/depth oscillation localized to the door surface. + +--- + --- # Recently closed diff --git a/src/AcDream.App/Rendering/ChaseCamera.cs b/src/AcDream.App/Rendering/ChaseCamera.cs index 96712cb2..f58476f2 100644 --- a/src/AcDream.App/Rendering/ChaseCamera.cs +++ b/src/AcDream.App/Rendering/ChaseCamera.cs @@ -59,8 +59,9 @@ public sealed class ChaseCamera : ICamera public Matrix4x4 View => Matrix4x4.CreateLookAt(Position, _lookAt, Vector3.UnitZ); + // Near plane 0.1 m = retail Render::znear (see RetailChaseCamera.Projection). public Matrix4x4 Projection => - Matrix4x4.CreatePerspectiveFieldOfView(FovY, Aspect, 1f, 5000f); + Matrix4x4.CreatePerspectiveFieldOfView(FovY, Aspect, 0.1f, 5000f); /// /// Update the camera position to follow the player. diff --git a/src/AcDream.App/Rendering/FlyCamera.cs b/src/AcDream.App/Rendering/FlyCamera.cs index b0e9d24f..49a5341b 100644 --- a/src/AcDream.App/Rendering/FlyCamera.cs +++ b/src/AcDream.App/Rendering/FlyCamera.cs @@ -32,8 +32,9 @@ public sealed class FlyCamera : ICamera } } + // Near plane 0.1 m = retail Render::znear (see RetailChaseCamera.Projection). public Matrix4x4 Projection - => Matrix4x4.CreatePerspectiveFieldOfView(FovY, Aspect, 1f, 5000f); + => Matrix4x4.CreatePerspectiveFieldOfView(FovY, Aspect, 0.1f, 5000f); /// /// Integrate position for one frame based on WASD + vertical keys. diff --git a/src/AcDream.App/Rendering/OrbitCamera.cs b/src/AcDream.App/Rendering/OrbitCamera.cs index 43f2c960..10d2fff6 100644 --- a/src/AcDream.App/Rendering/OrbitCamera.cs +++ b/src/AcDream.App/Rendering/OrbitCamera.cs @@ -1,4 +1,4 @@ -using System.Numerics; +using System.Numerics; namespace AcDream.App.Rendering; @@ -24,5 +24,5 @@ public sealed class OrbitCamera : ICamera } public Matrix4x4 Projection - => Matrix4x4.CreatePerspectiveFieldOfView(FovY, Aspect, 1f, 5000f); + => Matrix4x4.CreatePerspectiveFieldOfView(FovY, Aspect, 0.1f, 5000f); } diff --git a/src/AcDream.App/Rendering/RetailChaseCamera.cs b/src/AcDream.App/Rendering/RetailChaseCamera.cs index 82abcfcb..2c7ae234 100644 --- a/src/AcDream.App/Rendering/RetailChaseCamera.cs +++ b/src/AcDream.App/Rendering/RetailChaseCamera.cs @@ -38,8 +38,15 @@ public sealed class RetailChaseCamera : ICamera public float Aspect { get; set; } = 16f / 9f; public float FovY { get; set; } = MathF.PI / 3f; public Matrix4x4 View { get; private set; } = Matrix4x4.Identity; + // Near plane = retail Render::znear = 0.1 m (decomp :342130/:342173/:1101867 — + // Render::SetFOVRad sets 0.1 flat; the legacy set_vdst variant is max(0.1, vdst·0.25)). + // MUST be smaller than the 0.3 m camera-collision sphere (PhysicsCameraCollisionProbe. + // ViewerSphereRadius): with the old 1.0 m near, a wall the collided eye sits 0.3 m from + // fell INSIDE the near plane and was clipped away — pressing the camera into a corner + // let you see straight through the wall to the clear color (§4 corner residual, + // user-gated 2026-06-10). public Matrix4x4 Projection => - Matrix4x4.CreatePerspectiveFieldOfView(FovY, Aspect, 1f, 5000f); + Matrix4x4.CreatePerspectiveFieldOfView(FovY, Aspect, 0.1f, 5000f); // ── Public tunables (per-instance) ──────────────────────────────