Tighten route-mode ladder docs

This commit is contained in:
Jan Petykiewicz 2026-04-06 20:36:20 -07:00
commit d783822b1c
2 changed files with 17 additions and 5 deletions

View file

@ -205,7 +205,14 @@ Highest-value open edge:
wrappers `0x591480` and `0x591510`, but still no dedicated semantic reader has been recovered.
So the main remaining uncertainty is the exact higher-level meaning of header bit
`[descriptor+0x15] & 0x1`, plus whether `[descriptor+0x10]` ever matters outside that
preservation path. The route-event dispatcher side is cleaner too:
preservation path. The route-mode setter is clearer too: `0x595650` now reads as a compact
state machine over the transport-owned route tables, where mode `0` splits the `gsi_am_rating`
branch into direct primary-endpoint handling versus queued insertion, mode `1` adds the ready-bit
gate and the same queued fallback, mode `2` removes pending descriptors from the queued family,
mode `3` forces mode `2` when the primary-endpoint table is empty, mode `4` updates the deferred
route-status state around `[this+0x1ed4]` and `[this+0x1ed8]`, and mode `5` copies the staged
route companion dword at `[this+0x490]` into `[this+0x54]` while mirroring that value into the
local field-cache family. The route-event dispatcher side is cleaner too:
the mode-`5` tails in both callback families do not copy a descriptor-local field. They mirror the
transport-staged companion dword at `[this+0x490]` into `[this+0x54]` and the local field-cache
family instead. The `gsi_am_rating` maintenance lane is tighter now too: it sorts the

View file

@ -487,10 +487,15 @@ transition.
context `[transport+0x17f8]`. The grounded live-route connect path at
`multiplayer_transport_try_connect_live_route` does not currently perform any matching
post-construction patch for `[route+0xa0]`, `[route+0xa4]`, or `[route+0xd4]`, and the higher
route-mode state machine now looks consistent with that: current grounded mode transitions switch
by releasing route objects through `multiplayer_gamespy_route_release_and_free` and rebuilding
them through `multiplayer_transport_try_connect_live_route`, not by mutating callback slots in
place. The parser behavior is now tighter as well: semicolon lines only dispatch when
route-mode state machine now looks consistent with that: `multiplayer_transport_set_route_mode`
latches the requested small mode at `[this+0x18b8]`, then uses mode `0` for the direct-versus
queued `gsi_am_rating` split, mode `1` for the ready-bit plus queued fallback, mode `2` for
pending-descriptor cleanup, mode `3` for the empty-table fallback, mode `4` for deferred
route-status recovery, and mode `5` for copying the staged route companion dword into `[this+0x54]`
and the local field cache. The current grounded mode transitions still switch by releasing route
objects through `multiplayer_gamespy_route_release_and_free` and rebuilding them through
`multiplayer_transport_try_connect_live_route`, not by mutating callback slots in place. The
parser behavior is now tighter as well: semicolon lines only dispatch when
`[route+0xd4]` is non-null, and the subtype-`6` raw fallback only dispatches when `[route+0xa4]`
is non-null. For the currently grounded transport-owned status and live routes, those two branches
therefore remain optional and can cleanly no-op instead of implying a hidden mandatory callback