diff --git a/docs/superpowers/plans/2026-05-29-a8f-camera-collision.md b/docs/superpowers/plans/2026-05-29-a8f-camera-collision.md index 110fa4e..29ebd50 100644 --- a/docs/superpowers/plans/2026-05-29-a8f-camera-collision.md +++ b/docs/superpowers/plans/2026-05-29-a8f-camera-collision.md @@ -216,9 +216,14 @@ public sealed class PhysicsCameraCollisionProbe : ICameraCollisionProbe stepDownHeight: 0f, // no step-down / ground snap isOnGround: false, // no contact-plane / walkable semantics body: null, // no cross-frame persistence - moverFlags: ObjectInfoState.None, // all targets collide; also keeps - // camera sweeps out of the #98 - // IsPlayer capture filter + // Retail init_object(player, 0x5c) = IsViewer|PathClipped|FreeRotate| + // PerfectClip (pseudo-C :92864). PathClipped = hard-stop at first contact + // (the spring arm, not edge-slide); IsViewer = eye passes through creatures, + // colliding only with world geometry. NOT IsPlayer -> stays out of the #98 + // capture filter. (Updated from ObjectInfoState.None during implementation + // per the Task-10 code-quality review; shipped in fcea05f / spec ยง5.1.) + moverFlags: ObjectInfoState.IsViewer | ObjectInfoState.PathClipped + | ObjectInfoState.FreeRotate | ObjectInfoState.PerfectClip, movingEntityId: selfEntityId); // skip the player's own ShadowEntry return FromSpherePath(r.Position, ViewerSphereRadius);