From c8990fe9002abbd098450ec9564c8cf9f4bbebab Mon Sep 17 00:00:00 2001 From: Oliver Rieger Date: Sun, 26 Jul 2026 16:42:25 +0300 Subject: [PATCH] =?UTF-8?q?Splatter:=20invert=20the=20chevron=20fade=20?= =?UTF-8?q?=E2=80=94=20solid=20at=20the=20racket,=20thinning=20up=20the=20?= =?UTF-8?q?lane?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reads as something leaving your hand and receding rather than as a label on the zombie, which is what the perspective shrink was already saying. The arrowhead stays fully opaque, so the target is still unmistakably marked. Co-Authored-By: Claude Opus 5 --- index.html | 2 +- render.js | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/index.html b/index.html index a01d87d..e8ae0fc 100644 --- a/index.html +++ b/index.html @@ -52,6 +52,6 @@

TAP TO START

- + diff --git a/render.js b/render.js index 5117f58..8a6ca14 100644 --- a/render.js +++ b/render.js @@ -428,15 +428,16 @@ export function render() { ctx.fill(); }; // Chevrons stepped along the lane in WORLD space, each sized by its own projection scale, - // so they shrink into the distance like everything else on the court. They also fade IN - // toward the target: faint at your racket, solid on the body, which walks the eye up the - // lane instead of leaving a uniform stripe. More of them, and fatter, the harder you draw. + // so they shrink into the distance like everything else on the court. They also fade OUT + // toward the target: solid at your racket, thinning up the lane, so the trail reads as + // something leaving your hand rather than as a label on the zombie. More of them, and + // fatter, the harder you draw. const n = Math.round(3 + ft.f * 5); ctx.fillStyle = col; for (let i = 1; i <= n; i++) { const u = i / (n + 1); const c = proj(P.x + (tx - P.x) * u, 1.4 + (0.35 - 1.4) * u, P.z + (tz - P.z) * u); - chevron(c, Math.max(1.5, c.s * (0.07 + ft.f * 0.09)), 0.3 + 0.7 * u); + chevron(c, Math.max(1.5, c.s * (0.07 + ft.f * 0.09)), 1 - 0.7 * u); } chevron(b, Math.max(2.5, b.s * (0.10 + ft.f * 0.11)), 1); // the arrowhead lands ON the target ctx.globalAlpha = 1;