Click the range to shoot. The server rewinds every candidate to the
instant you rendered it and tests the ray there
(live.smooth({ hitTest })) - so a shot that
landed on your screen lands on the server. Crank the latency slider:
delayed sends still hit where you saw the target, because the rewind
window is server-measured (uplink + interpolation) and capped by maxRewindMs: 400.
WASD / arrows to move, click to shoot.
0
Authoritative: onHit credits the shooter through
the shared apply (ctx.applyTo), so
this number is the server's answer, not a local guess.
shots fired: 0
hit events seen: 0
Delays your command/shoot sends with a setTimeout wrapper. The shot fires (and the
muzzle flash draws) when the send actually leaves; the
rewind then resolves it against the scene as rendered at
that instant. Targets orbit slowly enough that a shot aimed
at a rendered target stays inside its hitbox across the
whole slider range.