From cff52c44f4a84d330bb4d21609f08a576bb7f75f Mon Sep 17 00:00:00 2001 From: Erik Date: Tue, 4 Aug 2026 21:04:06 +0200 Subject: [PATCH] docs(physics): correct stale set_velocity claim in the 4a remote velocity comment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit LiveEntityNetworkUpdateController.cs's TryCommitAuthoritativeVelocity call site carried a comment claiming "MoveOrTeleport installs that exact vector with set_velocity". The C4 route 5 byte-decode of CPhysicsObj::MoveOrTeleport @0x00516330-0x00516438 (the immediately preceding commit) shows this is false: the function never reads its velocity argument's stack slot in any branch, and UnpackPositionEvent performs no set_velocity either. The only set_velocity in the whole accepted-Position chain zeroes the LOCAL player @0x004541B4, a different call site entirely. This commit only corrects the comment. The 4a call itself is left unchanged in production, deliberately out of C4 route 5's scope — the route governs RuntimeSetPositionOperationKind placement dispatch, not the pre-existing remote velocity commit. #317 (docs/ISSUES.md, filed in the previous commit) tracks the follow-up: audit the whole accepted-Position velocity chain and either find the correct retail source or remove the call with a divergence-register row. Co-Authored-By: Claude Opus 5 --- .../LiveEntityNetworkUpdateController.cs | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) 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))