89cf5df71f3b6f756d1be09ba44450586754040a
The previous version of these three detours hung FIFA at the "are both teams
ready" prompt. FUN_180033770 is POLLED - about 150 calls alternating between the
two real match team ids - and the wrapper did a synchronous write_log on every
one. That is the whole cause; the detours themselves were sound.
Rebuilt so the hot path costs nothing:
- kit_enum returns immediately unless the team is the FUT club (130000), so
the polled case does no formatting and no I/O at all. When it is the FUT
club it reports the out-list length, i.e. how many kits were actually
offered - the number that decides whether the carousel has anything.
- kit_desc dedupes on the packed kit id, so a carousel that re-describes the
same kit logs it once. It decodes teamid/year/slot for comparison against
the active triple.
- kit_scan only reports cardtype 7 and dedupes on (subtype, selector).
Dedupe is a fixed 16-slot lock-free SeenSet - no allocation, no locks, safe to
consult from a polled game thread. A full set stops reporting rather than
evicting, because the point is a bounded log.
Rule this file broke once and must not break again: no trace may log per-call on
a polled function.
Motivation changed too. The kit selector is not cosmetic: it is what blocks
entering a match, which also explains why every match in the capture corpus is a
DNF with an unpopulated params object - entered and backed out of. A screenshot
shows the carousel with two tiles, one named HOME and one labelled "undefined",
both with untextured white shirts, which is exactly sub_180033430 writing NAME
on a match and nothing at all on a miss.
Description
GUI launcher for OpenFUT — manages core/bridge services, DLL hook deployment, and TLS cert setup
Languages
Rust
100%