• v3.13.0 abea86a9fb

    v3.13.0
    All checks were successful
    CI / build-and-test (push) Successful in 2m25s
    Stable

    joeyr released this 2026-07-31 20:30:34 -05:00 | 22 commits to main since this release

    Added

    • The champ-select board says which mode it is showing. A badge beside "In champ select" names the map — muted for an ordinary game, accented for Classic Rift. Two boards for two modes were pixel-identical while being backed by entirely different champions, so the only way to tell a Classic Rift board from a Summoner'''s Rift one was to recognize the Jade roster by its champion art.

      The mode comes from the LCU gameflow session'''s map.id, read once on entering champ select. That is the only signal available at that point: the Live Client Data API the in-game paths use does not exist until the game process launches, and by then there is no pick left to advise on.

      Keyed on map.id === 453 and never on a mode-name substring. Queues 2450 and 3280 report a KIWI_JADE mode ("ARAM: Mayhem Classic-ish") on map 12, so an includes('''JADE''') test would call those Classic Rift; a test pins that case. A session that cannot be read, or reports no map, is simply not badged — it is never guessed at.

    • game-mode, a retained IPC message carrying the roster, map id and map name, re-delivered on markReady() like the other retained state so a reload mid-champ-select repaints the badge.

    Notes

    • This does not yet restore tier badges or automatic enemy lane placement in Classic Rift. Both read the op.gg tier list, which is still fetched as type=ranked and keyed by live champion ids, so every 60xxx lookup misses. A per-role tier list is the one op.gg request that cannot derive its queue from a champion id, which is exactly why the session-level mode above had to exist first. See docs/classic-opgg-plan.md.
    Downloads