docs: session handoff + collision port mandate in memory

Session 2026-04-14 summary: rendering rebuild complete, movement
speed+jump+facing working, collision partially working but needs
full retail port.

Memory updated with explicit user feedback: no more patching
collision, must port from decompiled code faithfully per CLAUDE.md.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Erik 2026-04-14 15:48:21 +02:00
parent 6c618937cb
commit b16a149718
2 changed files with 106 additions and 7 deletions

View file

@ -86,11 +86,35 @@ ground truth. ACE has the ENTIRE system already in C#:
- `TransitionTypes.cs` Transition methods — replace FindTransitionalPosition, TransitionalInsert, FindEnvCollisions, FindObjCollisions, SlideSphere, AdjustOffset with faithful ports
- `PhysicsEngine.ResolveWithTransition` — may need restructuring
## Approach
## Approach (MANDATORY — per CLAUDE.md)
1. Read ACE's Sphere.cs fully (it's the object collision dispatcher)
2. Read ACE's BSPTree.cs/BSPNode.cs/BSPLeaf.cs fully
3. Read ACE's Transition.cs fully
4. Port each class method-by-method, preserving ACE's logic exactly
5. Cross-reference each method against the decompiled function address
6. Test incrementally: terrain → indoor walls → objects → step-up → full
For EVERY function:
1. **DECOMPILE FIRST.** Find the matching function in the decompiled
client (`docs/research/decompiled/`). Use the function map at
`docs/research/acclient_function_map.md`. If not mapped, search
by characteristic constants or struct offsets.
2. **CROSS-REFERENCE ACE.** Read ACE's C# port of the same function.
ACE provides naming and structure. Note any differences.
3. **WRITE PSEUDOCODE.** Translate the decompiled C into readable
pseudocode BEFORE porting to C#. Add to
`docs/research/collision_port_pseudocode.md`.
4. **PORT FAITHFULLY.** Translate pseudocode to C# line-by-line.
Same variable names, same control flow, same boundary conditions.
Do NOT "improve" or "simplify" the algorithm.
5. **VERIFY.** When ACE and the decompiled code disagree, the
decompiled code wins. Document the difference.
### Execution order:
1. Sphere collision (Sphere.cs) — FUN_005387c0 and sub-functions
2. BSP tree (BSPTree/Node/Leaf) — find_collisions dispatcher
3. Polygon tests (Polygon.cs) — pos_hits_sphere, adjust_sphere_to_plane
4. Transition orchestrator (Transition.cs) — FindTransitionalPosition
5. Cell collision (LandCell/EnvCell/ObjCell) — FindEnvCollisions, FindObjCollisions
6. Wire into PhysicsEngine.ResolveWithTransition
7. Test: terrain → indoor walls → objects → step-up → every object type