Skip to content

Draw High Tide's wall in the replay viewer - #424

Merged
SunkenInTime merged 3 commits into
mainfrom
t3/high-tide-replay
Nov 1, 2026
Merged

SunkenInTime merged 3 commits into
mainfrom
t3/high-tide-replay

Conversation

@SunkenInTime

@SunkenInTime SunkenInTime commented Nov 1, 2026 •

Copy link
Copy Markdown
Owner

High Tide growing, standing and leaving

Before and after, 6 s after the head stopped

No replay with Harbor exists on this machine, so everything above is a stand-in match. See "What I couldn't check" before merging.

ci: test web

ItzMady asked for this and Dara said yes. A High Tide in a replay was a small icon flying along, and when the head stopped, the icon and the cone blocking both vanished. In the game the wall stays up for 15 s, and that is the part a coach wants to see.

The brief said the wall was already data and just wasn't drawn. Half of that held up. The head's path is there, but it only lives about 2.5 s. The 13.09 blueprints show a second actor, GameObject_Mage_Q_WallManager, with WallDuration 15 and Riot's own minimap vision blockers on it. Our catalog had never heard of it. Phoenix's Blaze is built the same way, and in our replays its projectile lives 0.7 s and its manager 10.7 s.

What this does

  • The wall is the head's path, growing with the head. It stays until the manager closes, then fades over the usual 500 ms.
  • _linePoints in replay_frame.dart is the one source for both the drawn line and the LineOccluder, so the drawing and the blocking can't disagree.
  • The manager is paired to the head by caster and spawn time. If there's no manager, the wall leaves with the head, which is what happens today.
  • ReplayWallPainter strokes the path under the utility layer, in blue with a team-coloured edge. The stroke uses no clip, so Cones: stop clipping to the floor every frame #306 doesn't apply.

Cone blocking got too slow, so that changed too

Blocking for 15 s instead of 2.5 s cost real frames. Every cone within reach of the wall took an offscreen layer and a shadow path, including cones facing away from it. LineOccluder.shadows now takes the cone's view and skips segments it can't see. No segments left means no layer, and the layer is now the size of the wedge instead of the full reach circle.

Release build, raster time over the same 16 s of 1x playback, interleaved runs, while other builds were running on this PC:

median of 4 runs, p50 p99 range
no wall 6.9 ms 9.5 to 13.4 ms
wall, first version about 11 ms 21 to 28 ms (3 runs)
wall, this PR 8.2 ms 10.9 to 19.7 ms

So a standing wall still costs about 1.3 ms while it's up. Turning off anti-aliasing on the shadow made no difference, so I left it on. What's left looks like the per-cone layer that smokes also pay, and smokes don't get the view check in this PR.

Capture

A capture saves High Tide's icon, where the head is or where it stopped. A saved page can't hold a curved wall, and this PR doesn't change the strategy format. I captured two moments into a local strategy and opened it: 10 agents, 4 abilities, the icon where it should be, no wall. Saving the wall as a page drawing would need no format change, but that's a different feature from P7, so I left it out.

How far into ground truth

Watched in a release driver build at 1x and stepped through it frame by frame: the cast, the wall standing, the fade, an attack round and a defense round. Main's build run on the same match shows no wall and no icon at the same moment. All 243 replay and occluder tests pass, and each of the 8 mutations I made to the new logic fails a test.

What I couldn't check

Nobody has seen a real High Tide in Icarus. I searched E:, D: and C:, and none of the 12 distinct replays has Harbor. The stand-in is a real 13.09 Lotus match with a Phoenix changed to Harbor, and the head follows that player's real walked route at the blueprint's 25 m/s, stopping at 60 m. That proves the drawing, the blocking, the timing and the cost. It doesn't prove the wire data. Three assumptions rest on the blueprints and on Phoenix's actors:

  • The manager opens within 1 s of the head's life, under the same owner. If not, the wall disappears with the head, as it does today.
  • The head's ReplicatedMovement path is dense enough to draw. Phoenix's is, at 10 Hz.
  • The wall forms behind the head at about the head's speed. The blueprint also has a 3.1 m DistanceBeforeStart, which I took to mean the wall starts a little ahead of Harbor. I didn't trim for it.

The first real Harbor replay anyone gets should settle these in a minute. The manager also has a MulticastAddAnchor RPC, every 2 m, which would be a sharper line than the head's path. I didn't add it to the decoder because I can't check its fields without a replay.

RetriggerView in GreptileConfidence Score: 5/5

The PR appears safe to merge, with the previous palette finding fixed and no new issues found.

Summary

Draws High Tide along its head’s path and keeps it visible until its matching wall manager closes.

  • High Tide replays show the wall its moving head leaves behind.
  • Sight cones skip wall shadows they cannot see.

No new issues were found in the changes since the previous review. Tests were inspected, not run. Real Harbor replay data remains unverified, as SunkenInTime notes in the PR description.

Diagram

%%{init: {'theme': 'neutral'}}%%
flowchart LR
  H[Head path] --> P[Shared wall points]
  M[Matching wall manager] --> L[Wall lifetime]
  P --> D[Draw wall]
  P --> B[Block cones]
  L --> D
  L --> B
  L --> F[Fade after closing]
Loading

Reviews (3) · Last reviewed commit: "Name the wall's colour in Settings" · Reviewed by Greptile

High Tide was its icon on the guided head, and it stopped blocking cones the
moment the head stopped. In the 13.09 blueprints the head is only the first
actor: GameObject_Mage_Q_WallManager opens with it and holds the wall for 15 s.
The catalog never knew about it.

The wall is now the head's path, growing with it, up until the holder closes,
then fading. Cones are cut along the same list of points that is drawn.

Blocking for 15 s instead of 2.5 s made the cost of a wall's shadows matter, so
a cone now skips segments it can't see, and needs no layer when none are left.

A capture keeps the icon: a page can't hold a curved wall.
@coderabbitai

coderabbitai Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 25 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 9c7094c4-eb68-441c-a3d0-10822c8e3545
Commits

Reviewing files that changed from the base of the PR and between 9e799b1 and c2bc20d.

Files selected for processing: 9
  • lib/const/settings.dart
  • lib/replay/replay_ability_catalog.dart
  • lib/replay/replay_frame.dart
  • lib/view_cone/vision_occluders.dart
  • lib/widgets/replay/replay_canvas.dart
  • lib/widgets/replay/replay_cones.dart
  • lib/widgets/replay/replay_effects.dart
  • test/replay_frame_test.dart
  • test/vision_occluders_test.dart
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

Comment thread lib/widgets/replay/replay_effects.dart Resolved
@SunkenInTime
SunkenInTime merged commit 1830650 into main Nov 1, 2026
15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant