e4c56a225e39e91a1289741c40f358a99ffd71cb
Fixes the ordering instead of fighting the movie. The tab bar is bound by FUN_18007e5e0 (six caption tests -> PANEL_ID, else hide panel), which is slot 0 of a secondary vtable invoked by the screen framework at screen-show. On a cold session the /store/purchasegroup groups have not arrived by then, so all six panels hide and no tab bar is drawn. Late publishing does not fix it: deploying the 0x278a publish at render time fired with its gate accepting (log: tabpublish=1 state=0x418) and the bar still did not appear, i.e. the movie ignores late tab updates. So load the groups BEFORE the store is ever opened. The store screen issues its own pack-list request at 0x18007f25e as FUN_180017870(*(base+0x2de0d0)) -- a single-argument call on the storefront global. Issue exactly that call once per process from the FUT event dispatcher, which already runs on a game thread long before the store screen exists. When the user then opens the store, the native screen-show bind sees a populated group list and binds the tabs itself -- the same reason a second entry has always worked. Fail-closed: base + CardsDLL image validated, storefront read guarded, FUN_180017870 fingerprinted before the first call, one request per process claimed before issuing (no re-entrant double request), and skipped entirely once groups exist. Logs prewarm= for evidence. fmt/clippy -D warnings clean, 32 hook tests pass.
Description
GUI launcher for OpenFUT — manages core/bridge services, DLL hook deployment, and TLS cert setup
Languages
Rust
100%