Re-slice corrected bounce sheet; ball under the hand; stable landing rings

- p_bounce/p_bounce2 re-extracted from Oliver's corrected _sheet_pbounce.png
  (racket properly in the right hand)
- bounce ball offset 0.4 -> 0.32 so it sits under the reaching hand
- landing rings draw with integer-snapped center/radii and a solid 2px
  stroke — the sub-pixel anti-aliasing shimmer read as flickering

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Fable 5 committed 2026-07-11 15:11:30 +02:00
1 parent 91da24f1a7
commit 7069723042
4 files changed
+6 -3

No files matched your search

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

+6 -3
View File
@@ -623,8 +623,11 @@ function drawBoy(b) {
} }
function drawRing(x, z, color) { function drawRing(x, z, color) {
const p = proj(x, 0, z); const p = proj(x, 0, z);
ctx.strokeStyle = color; ctx.lineWidth = 1.2; // integer-snapped so the moving ring steps whole pixels instead of shimmering
ctx.beginPath(); ctx.ellipse(p.x, p.y, p.s * 0.3, p.s * 0.12, 0, 0, 7); ctx.stroke(); const cx = Math.round(p.x), cy = Math.round(p.y);
const rx = Math.max(2, Math.round(p.s * 0.3)), ry = Math.max(1, Math.round(p.s * 0.12));
ctx.strokeStyle = color; ctx.lineWidth = 2;
ctx.beginPath(); ctx.ellipse(cx, cy, rx, ry, 0, 0, 7); ctx.stroke();
} }
function drawChar(ch) { function drawChar(ch) {
@@ -733,7 +736,7 @@ function render() {
// server idly bouncing the ball while waiting // server idly bouncing the ball while waiting
if (phase === 'pretoss') { if (phase === 'pretoss') {
const sv = score.server === 'P' ? P : O; const sv = score.server === 'P' ? P : O;
const bx = sv.x - 0.4 * (sv.side === 'P' ? 1 : -1), by = Math.abs(Math.sin(idleT * 3.6)) * 0.78; // floor to hand const bx = sv.x - 0.32 * (sv.side === 'P' ? 1 : -1), by = Math.abs(Math.sin(idleT * 3.6)) * 0.78; // floor to the reaching hand
const sh = proj(bx, 0, sv.z); const sh = proj(bx, 0, sv.z);
ctx.fillStyle = 'rgba(0,0,0,0.3)'; ctx.fillStyle = 'rgba(0,0,0,0.3)';
ctx.beginPath(); ctx.ellipse(sh.x, sh.y, Math.max(1.5, sh.s * 0.08), Math.max(1, sh.s * 0.035), 0, 0, 7); ctx.fill(); ctx.beginPath(); ctx.ellipse(sh.x, sh.y, Math.max(1.5, sh.s * 0.08), Math.max(1, sh.s * 0.035), 0, 0, 7); ctx.fill();