From 29e01c3829f74703bbf8b6b61c283a6bf7267f6c Mon Sep 17 00:00:00 2001 From: Erik Date: Wed, 8 Jul 2026 07:14:06 +0200 Subject: [PATCH] docs: file #185 - local player jams half-way up outdoor stairs (house on stilts) --- docs/ISSUES.md | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/docs/ISSUES.md b/docs/ISSUES.md index f580514f..a7da1c46 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -46,6 +46,53 @@ Copy this block when adding a new issue: --- +## #185 — LOCAL player jams half-way up outdoor stairs (house on stilts); a jump clears it + +**Status:** OPEN (investigated, root cause characterised — NOT yet fixed; a fix touches the frozen collision internals → brainstorm gate first) +**Severity:** MEDIUM +**Filed:** 2026-07-08 +**Component:** physics / collision (building/stair BSP + step-up vs slide classification) + +**Description:** Running the LOCAL player up the outside stairs of a house-on-stilts, you hit +an invisible block **half-way up** that you cannot walk through — you shuffle sideways but +never advance. **Jumping clears it** and you continue up normally. Pre-existing (observed +before the #184 work); unrelated to the remote de-overlap thread. Building object +`0xf6822103`, landblock `0xf682`, jam at world ≈ (132, 77.8, 61.4), cell `0xF682002C`. + +**Root cause / status (from `ACDREAM_CAPTURE_RESOLVE` at the jam):** The staircase is a +fairly uniform ~0.4 m-rise / **38.7°** flight of tilted tread faces (`n=(0,-0.62,0.78)`), +which is under the ~49° walkable cutoff, so the player *glides* straight up it (long +no-collision stretches; the wireframe shows discrete stacked step faces). At **one junction +(~Z 61.4)** there is an anomalous **~52° face** (`collisionNormal=(0,0.78,0.62)`, constant +across every stuck frame → a real stable face, NOT the #137 synthetic-negated-run-direction +normal). 52° is just past the walkable cutoff, so the sweep treats it as a **wall**: it +**flattens that normal to a pure-horizontal `(0,1,0)` sliding normal** (Z zeroed) and slides +the player sideways in X, pinning Y+Z — instead of recognising it as a normal ~0.4 m **step** +and stepping the player up onto the next tread. The jump clears it because the jump's +Z +velocity is not in the horizontal `(0,1,0)` slide plane. The staircase continues climbable +above the jam (more 38.7° treads → a flat porch at Z 63.6) — so it is ONE localised spot, +not a general stair failure. Classic **#137 / building-collision-mesh junction-anomaly family** +(TS-4 sliding-normal-provenance), stair edition. + +**Open question (decides mesh-artifact vs faithful):** is that 52° face **real dat geometry** +of object `0xf6822103` or a **mesh-generation artifact** at a BSP-leaf / sub-object junction +on our side? The capture only records treads the player STOOD on, so it can't show the jam +face's own extent or the tread directly above it. Decisive next read: dump `0xf6822103`'s +collision faces (`ACDREAM_DUMP_GFXOBJS`, or resolve its GfxObj/Setup and decode the BSP) and +check for a spurious ~52° face where a 38.7° continuation should be. If the step to the next +tread is ≤ 0.6 m (the step-up budget; it looks ~0.4 m), step-up SHOULD lift the player → bug +in step-up-vs-wall classification for a just-over-walkable face. + +**Files:** `src/AcDream.Core/Physics/TransitionTypes.cs` (step-up / slide classification, the +sliding-normal horizontalisation); building-collision mesh generation (BSP faces for +landblock stabs). Capture apparatus: `ACDREAM_CAPTURE_RESOLVE`. + +**Acceptance:** the LOCAL player walks up the full outdoor staircase of the house-on-stilts +without jumping; no sideways-slide pin at the ~Z 61.4 junction; regression pass on other +stairs/ramps (indoor + outdoor) — no new phantom blocks. + +--- + ## #184 — [DONE 2026-07-08 · `37a94e1f`+`f51c1dff`+`e1ac56cc`+`ddb5a967`] Remote monsters overlap (arms interpenetrating) in a crowd; retail barely overlaps **Status:** CLOSED 2026-07-08 — all four slices shipped + both visual gates passed. Slices 1+3