The camera holds still: the ball-follow lean zeroed on Oliver's verdict
The flattened body curve stays (farK 0.25 — 'really good, helped a ton'); the broadcast lean was 'distracting' and its knobs sit at 0 like the aimCam pair. The plumbing stays for the T panel. PROJECT.md: farK is now a settled feel decision. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
e571e46d92
commit
0e01894f4d
3 files changed
+15
-7
No files matched your search
+9
-2
@@ -344,6 +344,12 @@ zombie (now an occasional opponent, `TUNE.racketEvery`, not the every-game fixtu
|
|||||||
starts flashing brightness. `assets/_sheet_crowd1.png` is the pre-brightening original.
|
starts flashing brightness. `assets/_sheet_crowd1.png` is the pre-brightening original.
|
||||||
|
|
||||||
## Settled feel decisions — do not regress silently
|
## Settled feel decisions — do not regress silently
|
||||||
|
- **Far bodies draw off a flattened scale curve; the camera holds still.** `TUNE.farK` 0.25
|
||||||
|
(render.js `farB`): the court projects true, bodies grow toward the far baseline (~20% at the
|
||||||
|
back), anchored so the near player never changes. Oliver: *"new perspective is really good —
|
||||||
|
helped a ton."* The ball-follow lean built alongside it (`farCamY`/`farCamZ`) was vetoed the
|
||||||
|
same day — *"the camera movement is distracting"* — and sits at 0 like the aimCam pair: every
|
||||||
|
camera-motion experiment on this game has now lost to a still camera.
|
||||||
- **Two-stage serve**: touch = reticle, drag = aim, release = fire, drag back under `pullMin` =
|
- **Two-stage serve**: touch = reticle, drag = aim, release = fire, drag back under `pullMin` =
|
||||||
cancel. The pull's DIRECTION picks the lane, its LENGTH is power — deliberately decoupled so a
|
cancel. The pull's DIRECTION picks the lane, its LENGTH is power — deliberately decoupled so a
|
||||||
far shambler never costs a longer drag than the screen has.
|
far shambler never costs a longer drag than the screen has.
|
||||||
@@ -408,8 +414,9 @@ zombie (now an occasional opponent, `TUNE.racketEvery`, not the every-game fixtu
|
|||||||
## Session log: the far court, without spending the lens (2026-08-13)
|
## Session log: the far court, without spending the lens (2026-08-13)
|
||||||
|
|
||||||
Oliver: the far-side opponent is barely visible in portrait, and the lens (camZ/camF, already at its
|
Oliver: the far-side opponent is barely visible in portrait, and the lens (camZ/camF, already at its
|
||||||
measured ceiling — see fitViewport) and world height were the only knobs he knew. Two new ones, both
|
measured ceiling — see fitViewport) and world height were the only knobs he knew. Two new ones.
|
||||||
AWAITING HIS PHONE VERDICT — nothing here is settled yet:
|
VERDICT (same day): the scale curve is settled-in (*"really good — helped a ton"*), the lean was
|
||||||
|
vetoed (*"the camera movement is distracting"*) and its knobs sit at 0 — see the settled list:
|
||||||
|
|
||||||
- **`TUNE.farK` — bodies draw off a flattened scale curve, the court projects true.** The 16-bit
|
- **`TUNE.farK` — bodies draw off a flattened scale curve, the court projects true.** The 16-bit
|
||||||
tennis trick: `s' = s·(sNear/s)^farK`, anchored at the player's deepest stance (he is untouched),
|
tennis trick: `s' = s·(sNear/s)^farK`, anchored at the player's deepest stance (he is untouched),
|
||||||
|
|||||||
+1
-1
@@ -431,6 +431,6 @@ if (location.hostname !== 'splatter-tennis.wuwi.one') {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script type="module" src="src/main.js?v=210"></script>
|
<script type="module" src="src/main.js?v=211"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
+5
-4
@@ -283,10 +283,11 @@ export const TUNE = {
|
|||||||
// BALL-FOLLOW LEAN (tennis + match only): while the ball is on the FAR half the camera eases
|
// BALL-FOLLOW LEAN (tennis + match only): while the ball is on the FAR half the camera eases
|
||||||
// toward camY+farCamY / camZ+farCamZ — a broadcast-style lean into the deep court. It pivots
|
// toward camY+farCamY / camZ+farCamZ — a broadcast-style lean into the deep court. It pivots
|
||||||
// about the near player's feet (see fOff in render.js), so his stance and the pull room the
|
// about the near player's feet (see fOff in render.js), so his stance and the pull room the
|
||||||
// apron math promised never move. Both 0 = the camera holds still. Defaults are deliberately
|
// apron math promised never move. Both 0 = the camera holds still, which is where Oliver
|
||||||
// shy of visible: the phone (not the desktop pane) is where a moving camera gets its verdict.
|
// landed ("the camera movement is distracting") — the same verdict the aimCam pair got. The
|
||||||
farCamY: 0.35, // m of camera rise while the ball is far (steepens the look-down)
|
// flattened body curve above carries the far-court read on its own.
|
||||||
farCamZ: -0.6, // m of camera dolly while the ball is far (negative = closer)
|
farCamY: 0, // m of camera rise while the ball is far (steepens the look-down)
|
||||||
|
farCamZ: 0, // m of camera dolly while the ball is far (negative = closer)
|
||||||
backstopZ: -1.8, // z of the far backstop — must sit IN FRONT of the -2 retire line, or balls die before they reach it
|
backstopZ: -1.8, // z of the far backstop — must sit IN FRONT of the -2 retire line, or balls die before they reach it
|
||||||
backstopKeep: 0.55, // pace a ball keeps after the rebound — still lethal, slower
|
backstopKeep: 0.55, // pace a ball keeps after the rebound — still lethal, slower
|
||||||
backstopPop: 1.8, // m/s of lift off the fence, so the rebound travels back instead of dying at the net posts
|
backstopPop: 1.8, // m/s of lift off the fence, so the rebound travels back instead of dying at the net posts
|
||||||
|
|||||||
Reference in new issue
Block a user