On the strike frame the full-screen flash is pushed to maximum, then each frame multiplies the last value by a decay rate — an afterglow that briefly lights the silhouette hills before cooling like a camera flash

decay 0.95 · afterglow fillRect · globalCompositeOperation · requestAnimationFrame