docs: update bugs.md — close BUG-002/003/004, add BUG-005/006/007

Closed: jump server packet (002), facing direction (003), run speed (004).
New: collision penetration (005), corner stuck (006), missing trees (007).
All collision bugs stem from static-overlap detection instead of
swept-sphere — needs Transition restructure to use FindTimeOfCollision.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Erik 2026-04-14 12:17:31 +02:00
parent fc96f1b7e3
commit 3997839d1a

View file

@ -18,39 +18,50 @@ the "Fixed" section with the commit hash that resolved it.
or the CreaturePalette pipeline in `InstancedMeshRenderer`.
- **Phase:** Unassigned (investigate after rendering rebuild Step 5).
### BUG-002: Jump not visible from retail client
### BUG-005: Collision penetration — body enters objects before blocking
- **Observed:** 2026-04-14
- **Description:** Jump works locally (player rises and falls) but no
jump packet is sent to the server. Other clients don't see the jump.
- **Repro:** Jump in acdream, observe from retail client — no jump visible.
- **Likely area:** GameWindow.cs jump packet sending (currently a TODO
Console.WriteLine). Need to research jump packet format from holtburger.
- **Phase:** B.2 (movement completion)
- **Description:** Player walks partway into boulders, trees, and walls
before collision is detected. Root cause: static overlap detection
instead of swept-sphere. Retail uses FindTimeOfCollision to compute
the exact contact point BEFORE moving the sphere. Our system moves
first, detects overlap, then tries to push out.
- **Repro:** Walk into a boulder at any speed — body clips into it.
- **Fix required:** Restructure Transition loop to compute collision
time before advancing position. Use CollisionPrimitives.FindTimeOfCollision
(already ported from FUN_00539BA0).
- **Phase:** B.3 (collision completion)
### BUG-003: Facing direction mismatch with server
### BUG-006: Getting stuck at object corners and tight spaces
- **Observed:** 2026-04-14
- **Description:** Character facing direction in acdream doesn't match
what other clients see. Our quaternion convention for outbound
MoveToState/AutonomousPosition packets is wrong.
AC convention: heading 0 = West, 90 = North, 180 = East, 270 = South.
Our convention: Yaw 0 = +X (East in AC terms). The wireRot quaternion
needs to use holtburger's `from_heading` formula:
`theta = (450 - degrees).to_radians()`, `w=cos(theta/2)`, `z=sin(theta/2)`.
- **Repro:** Walk in acdream, observe from retail client — character faces
wrong direction.
- **Likely area:** GameWindow.cs wireRot computation (line ~1899).
- **Phase:** B.2 (movement completion)
- **Description:** Player gets permanently stuck when walking into
building corners or between objects. The SlideSphere crease projection
degenerates when two collision normals are nearly parallel or the
sphere is already penetrating.
- **Repro:** Run along a building wall and hit a corner.
- **Fix required:** Pre-move collision prevents penetration (fixes
BUG-005), which eliminates the degenerate crease case. Also need
stuck detection + push-out as a safety valve.
- **Phase:** B.3 (collision completion)
### BUG-004: Run speed not verified working
### BUG-007: Some trees don't have collision
- **Observed:** 2026-04-14
- **Description:** RunRate wiring exists (Task 1) but user reported no
speed change. Either the server's UpdateMotion ForwardSpeed isn't being
received, or it's not propagating to the velocity computation. Need to
add diagnostic logging to verify the UpdateMotion path fires.
- **Phase:** B.2 (movement completion)
- **Description:** Some scenery trees/objects pass through despite
CylSphere collision being implemented. Likely missing CylSphere
data in their Setup, or the Setup isn't cached in PhysicsDataCache.
- **Repro:** Walk through certain trees near Holtburg.
- **Phase:** B.3 (collision completion)
---
## Fixed
_(none yet)_
### BUG-002: Jump not visible from retail client
- **Fixed:** 5634e71 — Jump packet (opcode 0xF61B) now sent to server.
### BUG-003: Facing direction mismatch with server
- **Fixed:** 6523c71 — YawToAcQuaternion converts from our yaw convention
to AC heading (0=West, 90=North) using holtburger's from_heading formula.
### BUG-004: Run speed not verified working
- **Fixed:** bb7eced — Server doesn't echo UpdateMotion to sender. Compute
RunRate locally via PlayerWeenie.InqRunRate (Run skill 200 → 9.5 m/s).