Replay: smokes block sight, utility arrives and leaves, playback at 165 Hz

Dara's notes from testing the viewer:

- Smokes block view cones. Every smoke (Omen, Brimstone, Clove, Jett,
  Miks, Astra, Viper's orb, Harbor's Cove, Cypher's cage) hides itself and
  the shadow behind it; Viper's Toxic Screen, Phoenix's Blaze and Harbor's
  High Tide hide what lies behind their line. Standing in a smoke, nothing
  shows.
- Thrown utility is shown in flight: its icon along the replay's path with
  a short trail (Omen and Jett smoke orbs, mollies, Sova's bolts, Fade's
  Seize, Reyna's Leer, Curveball and others), and a ring spreads where it
  activates.
- Utility that ends (destroyed, expired or popped) fades out where it
  stood with a burst, rather than vanishing. The replay does not say which.
- Ranges and areas players stand in are drawn at 30% so the agents and
  cones under them stay readable; smokes stay solid.
- Playback is smooth. Players moved a few at a time before (the cone cut
  was the cost); now every player moves every frame, moving utility glides
  between its 10 Hz path points, and cones are cut on a worker isolate
  (ReplayConeWorker) and drawn from their latest cut carried along with the
  agent, all in one layer clipped to the floor once (ReplayConesPainter).
  The roster, killfeed, dock and match card rebuild when what they show
  changes, and utility sits on its own cached layer.

Measured with the profile playback harness on Split: UI thread 3.0 ms and
raster 3.9-5.7 ms a frame (the window runs at its 144 Hz cap), from 13.5 ms
UI and 4.6 ms raster at 73 fps before.

The editor's view cone is unchanged apart from a hook that lets the replay
draw cones itself, and the height model's cone query is split so the
horizontal cut, which needs no dart:ui paths, can run off the root isolate.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
b80af76e6aDara Adedeji committed on 10/2/2026, 10:58:07 PMparenta3452aa
20 files changedLine totals unavailable