Skip to content

Read VALORANT 13.10 replays - #556

Merged
SunkenInTime merged 1 commit into
mainfrom
t3/replay-13-10
Nov 13, 2026
Merged

SunkenInTime merged 1 commit into
mainfrom
t3/replay-13-10

Conversation

@SunkenInTime

@SunkenInTime SunkenInTime commented Nov 13, 2026 •

Copy link
Copy Markdown
Owner
Before (main's decoder) After
A 13.10 replay on main: dimmed card reading "Patch 13.10" that won't open The same replay with this PR: 7:03 long, opens

The same replay open with this PR, round 1 at 0:16: health bars partway down, four kills with assists, the dead greyed out.

13.10 Icebox replay open mid-fight

Both pictures are the same Linux build of this branch with only libicarus_replay.so swapped.

VALORANT 13.10 shipped this week, so every match a user downloads now shows as a dimmed "Patch 13.10" card they can't open. Our decoder is pinned to vrfkit v0.4.0, which stops at 13.09, and vrfkit's latest tag (v0.5.0) doesn't add 13.10 either.

vrfkit#45 adds 13.10. It's open, from an outside contributor, and its CI is still waiting for maintainer approval. It changes three things:

  • the 13.10 payload transform. Its seed addend, offset and step order match the transform the C# parser vrfkit derives from merged yesterday (ValorantReplayParser 093fe9b).
  • the combat report's regional damage arrays, which moved handles.
  • MulticastNotifyDamage_*.LifeChangeEvents, whose four members moved one handle. Our health bars read these, so without this change 13.10 health would be wrong.

This PR pins every vrfkit crate to that PR's commit (6194bde, v0.5.0 plus #45) and applies the same v0.4.0..6194bde diff to our vendored sink in src/vendor/sink/. The decoder version becomes 0.3.6+vrfkit.0.5.0-6194bde, so cached decodes rebuild. When vrfkit tags a release with 13.10, we move to the tag.

What else v0.5.0 changes: it types the ReplicatedMovement of Hush's projectiles, so they now carry their flight path, which the app already draws. On our six older replays (13.00 ×2, 13.08 ×2, 13.09 ×2), the decoded JSON and movement data are otherwise identical to main's.

Corpus test: the replay you sent is Swiftplay (first to 5, sides switch after round 4), and check_score/check_sides only knew the competitive format. They now read the format from match.gameMode.

How far it got

  • Your replay (13.10, Icebox, Swiftplay, 5–0) decodes in 0.36 s with zero decode errors and a verified transform. It passes every corpus check: event counts match the file's own Event chunks, every player starts each round at 100 health and is at 0 after dying, sides are correct, flashes and doors decode.
  • Corpus suite over all 7 replays: passes. cargo fmt --check, cargo clippy --all-targets -D warnings, and 189 unit tests pass.
  • Opened and scrubbed in the running Linux desktop app (screenshots above).
  • Not checked: Windows and macOS builds (CI and the release build them), competitive 13.10 replays (only this one Swiftplay match exists), and new 13.10 abilities (there's no new agent this patch).

To run the Linux app at all, I locally applied the custom-cursor guard from t3/film-capture. It isn't part of this PR.

ci: replay

Summary by CodeRabbit

  • New Features
    • Added replay support for VALORANT 13.10 data layouts.
    • Replay validation now accounts for Swiftplay’s shorter match format, including its win threshold and side switch.
  • Bug Fixes
    • Match score and side checks now adapt to the replay’s game mode, including overtime rules.
  • Documentation
    • Updated replay format examples and version references for the newer replay support.

@coderabbitai

coderabbitai Bot commented Nov 13, 2026 •

Copy link
Copy Markdown

Explain Change →

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 54 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: ecd5dda8-66dc-440c-9740-0ceb20dddb06
Commits

Reviewing files that changed from the base of the PR and between 1e553dd and 81ccf0f.

Files ignored due to path filters: 1

  • native/replay/Cargo.lock is excluded by !**/*.lock
Files selected for processing: 16

  • docs/replay-format.md
  • native/replay/Cargo.toml
  • native/replay/NOTICE.md
  • native/replay/src/header.rs
  • native/replay/src/vendor/frame.rs
  • native/replay/src/vendor/mod.rs
  • native/replay/src/vendor/pass.rs
  • native/replay/src/vendor/sink/blobs.rs
  • native/replay/src/vendor/sink/failure_stats.rs
  • native/replay/src/vendor/sink/intern.rs
  • native/replay/src/vendor/sink/measured_routes.rs
  • native/replay/src/vendor/sink/mod.rs
  • native/replay/src/vendor/sink/paths.rs
  • native/replay/src/vendor/sink/rpc.rs
  • native/replay/src/vendor/sink/stream.rs
  • native/replay/tests/corpus.rs

No actionable comments were generated in the recent review.

Walkthrough

The replay crate updates its vrfkit revision and version records. It adds release-specific schema and route selection for VALORANT builds. Corpus validation now derives score and side rules from the replay’s game mode.

Changes: Replay decoding and validation

Layer / File(s) Summary
Pin vrfkit and update version records
native/replay/Cargo.toml, native/replay/NOTICE.md, native/replay/src/header.rs, native/replay/src/vendor/*, docs/replay-format.md
The crate pins vrfkit and vrf-testkit to commit 6194bde. The decoder version, documentation, and vendored-source references identify vrfkit 0.5.0-6194bde.
Select layouts and routes by release
native/replay/src/vendor/sink/mod.rs, native/replay/src/vendor/sink/blobs.rs, native/replay/src/vendor/sink/rpc.rs, native/replay/src/vendor/sink/measured_routes.rs
ExportSink enables the 13.10 layout flag for the exact release branch. Rounds and damage RPC decoding use 13.10 schemas when the flag is enabled. Measured route sets are updated for 13.08, 13.09, and 13.10.
Derive corpus checks from game mode
native/replay/tests/corpus.rs
Corpus score and side checks use a format derived from gameMode. Swiftplay uses a 5-win threshold, 4-round halves, and no overtime; other modes use 13 wins, 12-round halves, and overtime.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Change: Bug fix

Sequence Diagram(s)

sequenceDiagram
  participant ReplayBranch
  participant ExportSink
  participant RoundsDecoder
  participant DamageRpcDecoder
  ReplayBranch->>ExportSink: Enable 13.10 layouts for the exact release branch
  ExportSink->>RoundsDecoder: Pass release_1310_layouts
  RoundsDecoder->>RoundsDecoder: Select the 13.10 rounds schema when enabled
  ExportSink->>DamageRpcDecoder: Pass release_1310_layouts
  DamageRpcDecoder->>DamageRpcDecoder: Select the 13.10 damage schema when enabled
Loading

Possibly related PRs

  • SunkenInTime/icarus#414: This PR introduced the vrfkit v0.4.0 pin and vendored sink files that this change updates.
Merge Risk: Minimal · previous review 1e553

This update teaches the replay decoder to read VALORANT 13.10 replays and bumps the decoder version so cached decodes rebuild. No concrete merge-blocking problem was found. The remaining uncertainty is limited to normal validation: Windows and macOS builds, competitive 13.10 replays, and new 13.10 abilities were not checked.

Pre-merge checks: Passed 4

Check name Status Explanation
Title check Passed The title "Read VALORANT 13.10 replays" matches the main change. The PR pins vrfkit to a commit that adds VALORANT 13.10 support, updates the vendored sink with 13.10 schemas, and bumps the decoder ve…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Full details: Title check

Explanation

The title "Read VALORANT 13.10 replays" matches the main change. The PR pins vrfkit to a commit that adds VALORANT 13.10 support, updates the vendored sink with 13.10 schemas, and bumps the decoder version. The title is short and specific, and it names the game patch the PR targets. It does not cover the 13.08/13.09 measured-route changes or the corpus match-rule changes, which is expected for a short title.

Finishing Touches

Generate unit tests (beta)

  • Commit to this branch
  • Create a new PR
  • 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

Recent review info

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: eb09e569-170a-40c8-9bd1-5383894786ed
Commits

Reviewing files that changed from the base of the PR and between 5bb1d8e and 1e553dd.

Files ignored due to path filters: 1

  • native/replay/Cargo.lock is excluded by !**/*.lock
Files selected for processing: 16

  • docs/replay-format.md
  • native/replay/Cargo.toml
  • native/replay/NOTICE.md
  • native/replay/src/header.rs
  • native/replay/src/vendor/frame.rs
  • native/replay/src/vendor/mod.rs
  • native/replay/src/vendor/pass.rs
  • native/replay/src/vendor/sink/blobs.rs
  • native/replay/src/vendor/sink/failure_stats.rs
  • native/replay/src/vendor/sink/intern.rs
  • native/replay/src/vendor/sink/measured_routes.rs
  • native/replay/src/vendor/sink/mod.rs
  • native/replay/src/vendor/sink/paths.rs
  • native/replay/src/vendor/sink/rpc.rs
  • native/replay/src/vendor/sink/stream.rs
  • native/replay/tests/corpus.rs

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

vrfkit v0.5.0 stops at 13.09, so 13.10 replays show as a dimmed card that
won't open. vrfkit pull request #45 adds 13.10: the payload transform, the
combat report's moved array handles, and the damage RPC's members moved
one handle, which our health bars read. It isn't merged or tagged yet, so
the crates pin its commit (6194bde, v0.5.0 plus that PR), and the vendored
sink takes the same changes. Move to the tag once one carries 13.10.

v0.5.0 also types the ReplicatedMovement of Hush's projectiles, so they
now carry their flight path. Every other
decoded fact in our 13.00, 13.08 and 13.09 replays is byte-for-byte the
same.

The corpus test knew only competitive's format. It now reads Swiftplay's
too: first to 5, sides switch after round 4.
@SunkenInTime
SunkenInTime merged commit 94459dd into main Nov 13, 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