docs: R5-V1 landed — wiring handoff, register TS-35 correction, #167, roadmap
Housekeeping around the R5-V1 core port (3d89446d):
- r5-wiring-handoff.md: the V2/V3/V4 GameWindow-wiring plan (per-entity
IPhysicsObjHost, AP-79→voyeur behavioral-equivalence anchor, TS-39 sticky
integration, mt-0 flags, #164, facade). These are the visual-gated slices.
- ISSUES #167: ConstraintManager leash unported — arming (SmartBox) + two
x87 distance constants BN elided; deferred (needs cdb/Ghidra). TS-35 stays.
- Register TS-35 corrected: R5 recon proved the "write side" is the
ConstraintManager server-position rubber-band leash, NOT the earlier
"per-cell contact-plane / doorway-jamming" guess. Oracle addresses fixed.
- Roadmap Phase R: R5-V1 shipped, R2-R4 visual pass PASSED, next = wiring.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
3d89446d98
commit
2b5e8a6738
4 changed files with 181 additions and 4 deletions
|
|
@ -46,6 +46,44 @@ Copy this block when adding a new issue:
|
|||
|
||||
---
|
||||
|
||||
## #167 — ConstraintManager leash unported (arming + two unknown x87 constants)
|
||||
|
||||
**Status:** OPEN (deferred, filed 2026-07-03 during R5-V1)
|
||||
**Severity:** LOW (server-position rubber-band + jump-during-rubber-band gate)
|
||||
**Component:** physics, constraint
|
||||
|
||||
**Description:** R5-V1 ported `ConstraintManager` (the server-position
|
||||
rubber-band leash) as a Core class for structural completeness of
|
||||
`PositionManager`, but it is never ARMED in acdream. Retail arms the leash
|
||||
ONLY from `SmartBox::HandleReceivedPosition` (0x00453fd0) — on every inbound
|
||||
server position packet, anchoring the mover to self (remotes) or the received
|
||||
position (player) — with a start/max distance band from
|
||||
`CPhysicsObj::GetStartConstraintDistance` (0x0050ebc0) and
|
||||
`GetMaxConstraintDistance` (0x0050ec10). acdream's position reconciliation is
|
||||
not `SmartBox`, so nothing calls `PositionManager.ConstrainTo`, and
|
||||
`IsFullyConstrained` stays false (= register **TS-35**'s current stub
|
||||
behavior — jump never blocked by the leash).
|
||||
|
||||
**Blockers:** (1) the two distance constants are **x87 float returns BN
|
||||
elided** — `GetStart/MaxConstraintDistance` decompile to a bare
|
||||
`this->m_position;` expression with the actual returned value lost to the
|
||||
FPU-return-elision artifact. Recovering them needs a live cdb read of `st0`
|
||||
after the call (retail debugger toolchain) or a Ghidra re-decompile with a
|
||||
corrected float-return signature. (2) The arming site (`SmartBox`'s inbound
|
||||
position-reconciliation branches A/B/C) has no acdream equivalent yet — wiring
|
||||
it means teaching acdream's position path to re-anchor the leash on every
|
||||
server position update, then feeding the `adjust_offset` taper into the body
|
||||
integration (same chokepoint as the sticky wiring, R5-V3).
|
||||
|
||||
**Where:** `src/AcDream.Core/Physics/Motion/ConstraintManager.cs` (class,
|
||||
unarmed); the read gate is `PhysicsBody.IsFullyConstrained` (TS-35) via
|
||||
`jump_is_allowed`. Decomp: `docs/research/2026-07-03-r5-managers/`.
|
||||
|
||||
**Acceptance:** the two constants are recovered (cdb/Ghidra), acdream arms the
|
||||
leash on inbound server positions, `IsFullyConstrained` fires while
|
||||
rubber-banding, and a jump attempt inside the tight leash is blocked
|
||||
(0x47) matching retail; TS-35 + this issue retire together.
|
||||
|
||||
## #160 — Remote moveto: run animation pace vs actual movement speed mismatch
|
||||
|
||||
**Status:** CLOSED (2026-07-03, `41006e79`, user-verified same session).
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue