diff --git a/src/AcDream.App/Physics/LiveEntityNetworkUpdateController.cs b/src/AcDream.App/Physics/LiveEntityNetworkUpdateController.cs index 051fe677..63c36e64 100644 --- a/src/AcDream.App/Physics/LiveEntityNetworkUpdateController.cs +++ b/src/AcDream.App/Physics/LiveEntityNetworkUpdateController.cs @@ -2417,11 +2417,21 @@ internal sealed class LiveEntityNetworkUpdateController update.Position.LandblockId); } - // PositionPack::UnPack initializes an absent velocity to zero; - // MoveOrTeleport installs that exact vector with set_velocity. - // The canonical seam wakes the retained ObjectClock and body in - // one operation. Position-delta velocity below remains animation - // diagnostics and is never substituted into physics. + // 4a-family correction (2026-08-04, found and reported while + // pinning C4 route 5's D-P5 no-velocity design): the previous + // comment here claimed "MoveOrTeleport installs that exact vector + // with set_velocity". A byte-level disassembly of the PDB-paired + // binary (0x00516330-0x00516438, every branch) shows + // MoveOrTeleport never reads its velocity argument's stack slot, + // and UnpackPositionEvent performs no set_velocity either — the + // only set_velocity in the whole accepted-Position chain zeroes + // the LOCAL player (@0x004541B4). This call's actual retail + // justification is therefore NOT yet established and needs its + // own audit; what IS still true and unaffected by that finding: + // the canonical seam below wakes the retained ObjectClock and + // body in one operation, and the Position-delta velocity further + // down remains animation diagnostics, never substituted into + // physics. if (!_liveEntities.IsCurrentPositionAuthority( positionRecord, acceptedPositionAuthorityVersion))