From 72f5df5bba4cf6a1e18efdc6ad41b46ea16123fe Mon Sep 17 00:00:00 2001 From: Eric Wagoner Date: Thu, 27 Aug 2026 16:09:57 -0400 Subject: [PATCH] Your own casts never cut away MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Casting a door onto the wall you already faced tripped the blocked- sight cutaway: the camera leapt to film the wall from another vantage, reading as a spin that put your back to your own door. In the live cockpit your own deeds now only ever TURN the head, gently and never past a quarter-turn — cutaways remain for things done TO you. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_015RCWSTnb1KYTPyL4GmhGnF --- packages/web/src/LiveFirstPerson.svelte | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/web/src/LiveFirstPerson.svelte b/packages/web/src/LiveFirstPerson.svelte index 1721360..35b82e8 100644 --- a/packages/web/src/LiveFirstPerson.svelte +++ b/packages/web/src/LiveFirstPerson.svelte @@ -349,11 +349,17 @@ } else if (aim && !aim.self) { const ax = aim.x + 0.5, ay = aim.y + 0.5; const wantFacing = Math.atan2(ay - ty, ax - tx); - // Your own magic turns your head — but never wrenches it: a deed - // you aimed BEHIND you via the keymap stays behind you. Things - // done TO you may still spin the world. - if (actor === povId && Math.abs(shortestArc(camF, wantFacing)) > Math.PI * 0.55) { - // deliberately unaimed + const arc = Math.abs(shortestArc(camF, wantFacing)); + if (actor === povId) { + // Your own magic turns your head — but never wrenches it and + // NEVER cuts away: casting a door onto the wall you face must + // not fling the eyes to some other vantage. A gentle turn when + // the deed is off to the side; nothing when it is behind you + // or already in frame. + if (arc <= Math.PI * 0.55) { + targetFacing = wantFacing; + aimed = true; + } } else { const toAim = Math.hypot(ax - tx, ay - ty); const sight = castRay(v, tx, ty, wantFacing);