From 0ce857fedcff0d99bf6f2bde9e07ec287f4506b6 Mon Sep 17 00:00:00 2001 From: Oliver Rieger Date: Sun, 2 Aug 2026 17:41:18 +0200 Subject: [PATCH] Let the ball eat its own aim band, mark the body, grow the machine MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Four things from the phone. THE BAND NO LONGER BLINKS OUT. Cutting it at the instant of release made a fast rally strobe — band, gone, band, gone. hitServe now records the arc it actually fired (error included, so the ball tracks what it is consuming to within a centimetre) and the ball eats it from behind as it flies. The aim resolves into the shot instead of vanishing. It ends early when the ball does, because a shambler swallowing the shot is a cut you want. THE TARGET MARK SITS ON THE BODY. A ring on the grass pointed at the one part of a shambler the shot has nothing to do with — the ball strikes anywhere under 1.9 m and the wound lands on the torso. So the mark rides at chest height when there is a body to hit and lies flat only when the lane is empty. Filled and washed out in the band's own colour instead of a hard 2px ring, which stops it reading as a decal stuck to the lawn. x_howto REDRAWN for the current gesture: thumb dragging back to a print, the shot leaving as a curved band onto the shambler's chest, shadow dots beneath. The old one still taught a straight arrow. MACH_H 1.15 -> 1.55. Waist high read as a prop you could ignore. Verified on a cache-busted build (the pane was serving a stale config.js, so the first pass measured nothing): preview velocity and gravity still identical to the fired ball, same flight time in the trail, unravel smooth to the hit. Co-Authored-By: Claude Opus 5 --- assets/x_howto.png | Bin 52255 -> 25878 bytes config.js | 3 +- gameplay.js | 21 +++++++++- render.js | 94 +++++++++++++++++++++++++++------------------ 4 files changed, 78 insertions(+), 40 deletions(-) diff --git a/assets/x_howto.png b/assets/x_howto.png index f935521e20c630892f002e2c6379f7c6b2b21575..3679daba5deeaa4bbad7c15fac961580493cb2d0 100644 GIT binary patch literal 25878 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 UV0u-ryZ`_I07*qoM6N<$f_)1e`v3p{ diff --git a/config.js b/config.js index 664ee85..52249cd 100644 --- a/config.js +++ b/config.js @@ -331,7 +331,8 @@ export const BOSS_ART = [ wounds: ['z_chairw'], throws: ['z_chairt', 'z_chairwt'] }, ]; -export const MACH_H = 1.15; // a ball machine stands about waist high — it must read as furniture, not as a body +export const MACH_H = 1.55; // was 1.15 — waist high read as a prop you could ignore. Still furniture + // (a body is PLAYER_H 1.88), but big enough to be a thing on the court. export const BOY_H = 1.5; // was 1.2 — the mopping boy read as a distant speck at that scale // how far off-court a boy starts. The mop boy comes in from just off-screen (he is slow, and // waiting 8s for him to walk into shot is dead time); a fetching boy sprints in from further out. diff --git a/gameplay.js b/gameplay.js index ad345d0..748c2b2 100644 --- a/gameplay.js +++ b/gameplay.js @@ -29,6 +29,9 @@ export function predictLanding() { // first-bounce point, closed form — exact, // lane is the target; the cone widens with range so distant lanes stay pickable. export const pullFrac = mag => Math.max(0, Math.min(1, (mag - TUNE.pullMin) / (TUNE.pullFull - TUNE.pullMin))); export const pullQuality = mag => TUNE.pullQMin + pullFrac(mag) * (1 - TUNE.pullQMin); +// pullQuality inverted: hitServe is handed a quality, not a drag, and the band it leaves behind is +// drawn at the same weight the live preview had. +export const qualityFrac = q => Math.max(0, Math.min(1, (q - TUNE.pullQMin) / (1 - TUNE.pullQMin))); export function flickTarget(ch, aim) { // exported: render draws the live reticle with it const q = pullQuality(aim.mag), f = pullFrac(aim.mag); @@ -199,8 +202,14 @@ export function previewServe(aim) { const st = splatServeTarget(P, aim, s, c.x, c.z); if (!st) return null; const { v, g } = serveArc(c.x, c.y, c.z, st.tx, st.tz, q); - return { x0: c.x, y0: c.y, z0: c.z, v, g, tx: st.tx, tz: st.tz, zt: st.ft.zt, - q, f: pullFrac(aim.mag) }; + return shotBand(c.x, c.y, c.z, v, g, st.tx, st.tz, !!st.ft.zt, q); +} + +// The drawable form of a shot: everything render needs and nothing that would pin a zombie object +// alive (`zt` is a flag, not the body — the trail below outlives whatever it was aimed at). +function shotBand(x0, y0, z0, v, g, tx, tz, zt, q) { + const T = Math.hypot(tx - x0, tz - z0) / (Math.hypot(v.vx, v.vz) || 1); // flight time to target + return { x0, y0, z0, v, g, tx, tz, zt, q, f: qualityFrac(q), T, t: 0 }; } function hitServe(sv, quality, aim = null) { @@ -218,6 +227,11 @@ function hitServe(sv, quality, aim = null) { tzs = boxZ + (Math.random() * 2 - 1) * (1 - quality) * 1.5; } const { v, g } = serveArc(ball.x, ball.y, ball.z, boxX, tzs, quality); + // THE BALL ERASES ITS OWN AIM. Cutting the band at the instant of release made a fast rally + // strobe — band, gone, band, gone. Instead the arc stays and the ball eats it from behind as it + // flies, so the aim resolves into the shot rather than blinking out of existence. This is the + // ACTUAL launch, error included, so the ball tracks the band it is consuming exactly. + if (st) G.trail = shotBand(ball.x, ball.y, ball.z, v, g, boxX, tzs, !!st.ft.zt, quality); ball.g = g; ball.vx = v.vx; ball.vy = v.vy; ball.vz = v.vz; ball.lastHit = sv.side; ball.bounces = 0; @@ -993,6 +1007,9 @@ export function update(dt) { crowd.cheer = Math.max(0, crowd.cheer - dt); G.idleT += dt; if (G.asideT > 0) G.asideT -= dt; // the asides' shared cooldown (see aside()) + // the fired band unravels behind the ball. It also goes the moment the ball does — a shambler + // eating the shot ends the band with the splat, which is a cut you want. + if (G.trail && ((G.trail.t += dt) >= G.trail.T || !ball.active)) G.trail = null; // "Time." belongs to the changeover alone. It used to ride the generic 'over' expiry, so any // other beat that overwrote overT while the breather ran (a melee kill taking a game, say) // had the umpire calling time on a pause that was never a changeover. diff --git a/render.js b/render.js index e6ce27d..b191ebe 100644 --- a/render.js +++ b/render.js @@ -181,7 +181,7 @@ function drawRunOff() { // ---------------------------------------------------------------- sprites ---- // assets/.png; game falls back to code-drawn figures until sprites load. -const SPRV = 78; // asset cache-buster — bump with main.js?v=N (see the img.src note below) +const SPRV = 79; // asset cache-buster — bump with main.js?v=N (see the img.src note below) const SPR = {}; for (const n of ['p_idle1','p_idle2','p_bounce','p_bounce2','p_toss','p_smash','p_run1','p_run2','p_run3','p_run4','p_swing1','p_swing2','p_die1','p_die2','p_die3','p_die4','p_die5', 'p_pull', // the serve wind-up: the racket dropping behind him while the pull is drawn @@ -453,6 +453,56 @@ function drawFlames(zb, hMeters) { ctx.fillRect(fx | 0, fy | 0, Math.max(1, s * 0.045), Math.max(2, s * (0.10 + 0.07 * Math.abs(Math.sin(ph * 2))))); } } +// The shot as a band through the air, drawn from u0 (0 = the whole flight, 0.6 = the ball has +// already eaten 60% of it) to the target. See the note at the call site for what each channel says. +function drawShotBand(a, u0) { + const left = 1 - u0; + if (left <= 0.01) return; + // cool blue-white = this only staggers. It stays READABLE on the dark lawn: you still need to + // see where you're pointing, you just need to know it won't kill. + const col = a.q >= TUNE.zSplatQ ? (a.zt ? UI.hot : UI.warm) : '#9db4d0'; + const N = 20; + const at = t => ({ x: a.x0 + a.v.vx * t, y: a.y0 + a.v.vy * t - 0.5 * a.g * t * t, + z: a.z0 + a.v.vz * t }); + const uAt = i => u0 + left * (i / N); + // The shadow first, under everything: an arc hanging in the air is ambiguous about where it + // comes down until something pins it to the lawn. This is the whole 3D cue. + for (let i = 0; i <= N; i++) { + const w = at(a.T * uAt(i)), p = proj(w.x, 0, w.z); + ctx.fillStyle = `rgba(0,0,0,${(0.42 - 0.24 * (i / N)) * left})`; + ctx.beginPath(); ctx.ellipse(p.x, p.y, Math.max(0.8, p.s * 0.07), Math.max(0.5, p.s * 0.028), 0, 0, 7); + ctx.fill(); + } + // ...then the band. Width comes from each point's OWN projection scale, so it tapers into the + // distance like everything else on the court rather than being a flat screen-space stroke. It + // also fades along its length: solid at the racket, thinning toward the target, so it reads as + // something leaving your hand and not as a label pinned on the shambler. + ctx.strokeStyle = col; ctx.lineCap = 'round'; ctx.lineJoin = 'round'; + const head = at(a.T * u0); // the cut end: the racket while aiming, the ball once it is flying + let prev = proj(head.x, head.y, head.z); + for (let i = 1; i <= N; i++) { + const w = at(a.T * uAt(i)), p = proj(w.x, w.y, w.z); + ctx.globalAlpha = (0.30 + 0.55 * a.f) * (1 - 0.55 * (i / N)) * left; + ctx.lineWidth = Math.max(1, p.s * (0.04 + a.f * 0.15)); + ctx.beginPath(); ctx.moveTo(prev.x, prev.y); ctx.lineTo(p.x, p.y); ctx.stroke(); + prev = p; + } + // The mark sits on the BODY, not at his feet. That is where the ball actually strikes (the hit + // test is a radius at any height under 1.9 m) and where the wound will be, so a ring on the grass + // was pointing at the one part of the shambler the shot has nothing to do with. Filled and washed + // out in the band's own colour rather than a hard 2px ring: it marks without looking like a decal + // stuck on the lawn. + const onBody = !!a.zt; + const m = proj(a.tx, onBody ? 0.95 : 0, a.tz); + ctx.globalAlpha = (onBody ? 0.34 : 0.24) * left; + ctx.fillStyle = col; + ctx.beginPath(); + if (onBody) ctx.ellipse(m.x, m.y, m.s * 0.26, m.s * 0.38, 0, 0, 7); // upright, over the torso + else ctx.ellipse(m.x, m.y, m.s * 0.30, m.s * 0.12, 0, 0, 7); // flat, lying on the grass + ctx.fill(); + ctx.globalAlpha = 1; ctx.lineWidth = 1; +} + function drawRing(x, z, color) { const p = proj(x, 0, z); // integer-snapped so the moving ring steps whole pixels instead of shimmering @@ -888,42 +938,12 @@ export function render() { // Because the arc terminates at the auto-picked target, a weak pull and a full one at the same // shambler draw the SAME curve in different colours — which is the "distance is free" rule made // visible instead of merely documented. - if (G.aim && G.mode === 'splatter' && !G.interlude && (G.phase === 'pretoss' || G.phase === 'toss' || G.phase === 'rally')) { - const pv = previewServe(G.aim); - if (pv) { - const kills = pv.q >= TUNE.zSplatQ; - // cool blue-white = this pull only staggers. It stays READABLE on the dark lawn: you still - // need to see where you're pointing, you just need to know it won't kill. - const col = !kills ? '#9db4d0' : pv.zt ? UI.hot : UI.warm; - const vh = Math.hypot(pv.v.vx, pv.v.vz) || 1; - const T = Math.hypot(pv.tx - pv.x0, pv.tz - pv.z0) / vh; // flight time to the target - const N = 20; - const at = t => ({ x: pv.x0 + pv.v.vx * t, y: pv.y0 + pv.v.vy * t - 0.5 * pv.g * t * t, - z: pv.z0 + pv.v.vz * t }); - // The shadow first, under everything: an arc hanging in the air is ambiguous about where it - // comes down until something pins it to the lawn. This is the whole 3D cue. - for (let i = 0; i <= N; i++) { - const w = at(T * i / N), p = proj(w.x, 0, w.z); - ctx.fillStyle = `rgba(0,0,0,${0.42 - 0.24 * (i / N)})`; - ctx.beginPath(); ctx.ellipse(p.x, p.y, Math.max(0.8, p.s * 0.07), Math.max(0.5, p.s * 0.028), 0, 0, 7); - ctx.fill(); - } - // ...then the band. Width comes from each point's OWN projection scale, so it tapers into - // the distance like everything else on the court rather than being a flat screen-space - // stroke. It also fades along its length: solid at the racket, thinning toward the target, - // so it reads as something leaving your hand and not as a label pinned on the shambler. - ctx.strokeStyle = col; ctx.lineCap = 'round'; ctx.lineJoin = 'round'; - let prev = proj(pv.x0, pv.y0, pv.z0); - for (let i = 1; i <= N; i++) { - const u = i / N, w = at(T * u), p = proj(w.x, w.y, w.z); - ctx.globalAlpha = (0.30 + 0.55 * pv.f) * (1 - 0.55 * u); - ctx.lineWidth = Math.max(1, p.s * (0.04 + pv.f * 0.15)); - ctx.beginPath(); ctx.moveTo(prev.x, prev.y); ctx.lineTo(p.x, p.y); ctx.stroke(); - prev = p; - } - ctx.globalAlpha = 1; ctx.lineWidth = 1; - drawRing(pv.tx, pv.tz, col); - } + if (G.mode === 'splatter' && !G.interlude && (G.phase === 'pretoss' || G.phase === 'toss' || G.phase === 'rally')) { + // While pulling: the live preview, whole. After release: the same arc with its tail already + // eaten, drawn from where the ball has got to. G.aim wins — a new pull replaces the last shot's + // leftovers rather than drawing two bands at once. + const band = G.aim ? previewServe(G.aim) : G.trail; + if (band) drawShotBand(band, band === G.trail ? band.t / band.T : 0); } // far-side drawables in z order (far → near), then the net, then the near side