From e85345e0d8e57482a5444d3ab496ac494670703e Mon Sep 17 00:00:00 2001 From: Oliver Rieger Date: Sun, 26 Jul 2026 15:57:24 +0300 Subject: [PATCH] Splatter: invert the aim camera, and make the pull's angle actually matter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The aim camera now drops and pushes IN while you draw instead of lifting and leaning back — you crouch into the shot. Both knobs just flip sign, so the old behaviour is a sign change away in the T panel. And the reason the pull's angle felt like it did nothing: aimCone 0.45 meant a lane half-width of ±10 m at the far baseline, which is the entire court. Every downward pull locked the same body, so the indicator's angle was decoration. At 0.10 (±2.9 m out there, ±0.9 m at your feet) the angle picks a lane for real — swept in 4° steps against three shamblers 18 m out, each one owns a ~12° window and past ±20° the ball flies into an empty lane. Thumb-sized, but you have to point. Co-Authored-By: Claude Opus 5 --- config.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/config.js b/config.js index 8198d99..4ef2dc5 100644 --- a/config.js +++ b/config.js @@ -26,7 +26,7 @@ export const TUNE = { changeoverT: 4.5, // s the changeover breather lasts (after odd games, as the rules demand) gameBeatT: 1.6, // s the game-end beat lasts on even (non-changeover) games eatenR: 0.9, // m a shambler must close to eat you — matches the visual sprite overlap - zSnap: 1.4, // m free-aim magnetism: a zombie this close to your flick's landing point is the target + zSnap: 0.9, // m of lateral slack at zero range — the aim cone's base width (fat-thumb forgiveness) killsPerPoint: 3, // splatter: zombie kills to score ONE tennis point (1 = every kill scores, old behavior) zSplatQ: 0.5, // min shot quality to splatter; below = stagger pushback zPushback: 1.4, // m a staggered zombie is knocked back @@ -38,12 +38,17 @@ export const TUNE = { pullFull: 95, // px of pull for a full-power shot. Keep this well inside one thumb's travel. pullQMin: 0.12, // shot quality at pullMin, scaling to 1.0 (= PERFECT) at pullFull. Below // zSplatQ it only staggers, so a lazy flick can't kill: THE anti-spam knob. - aimCone: 0.45, // lane half-width per meter of range — the aim cone widens with distance + aimCone: 0.10, // lane half-width added per meter of range. This is what makes the pull's ANGLE + // mean something: at 0.45 the cone was ±10 m at the far baseline — the whole + // court — so every downward pull picked the same body and the angle felt inert. + // 0.10 gives ±2.9 m out there: you have to actually point at a lane. aimReach: 22, // m the aim ray runs when no shambler stands in the lane - aimCamY: 1.2, // m the camera rises while you're drawing — a steeper look, so the gap between - aimCamZ: 1.2, // m it also leans back, so the lift doesn't push the near court off-screen. - // Together: you can read the depth behind the net, which is exactly the shot - // that used to be blind. Set both to 0 for the old fixed camera. + // How the camera moves while you're drawing the slingshot. NEGATIVE (the default) drops it and + // pushes in — you crouch into the shot. POSITIVE lifts it and leans back for a steeper, more + // top-down look, which reads the depth behind the net better but feels less like aiming. + // Both 0 = the old fixed camera. + aimCamY: -1.2, // m of camera height change + aimCamZ: -1.2, // m of camera dolly (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 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