Overlay - Gidntsquia/deadlock-street-brawl-helper GitHub Wiki
The Windows app draws the advice on a transparent window laid over the Deadlock window. The overlay is click-through: clicks reach the game. Run Deadlock in borderless windowed mode. In exclusive fullscreen the overlay may not show (a Windows limit); the app does not crash or mis-detect the window there.
- The overlay is blank, and its window hidden, unless the item draft screen is up or the ability points panel is showing.
- Above each card is a plate with the tier letter and
Score: n. Hover a plate to see where the score comes from (win rate, pick rate, hero fit, enemy team, enhanced bonus); the rows add up to the score. - Only the card to take is teal, with a teal circle round it. The other cards are charcoal plates with a thin
grey border and a dark veil over the card. An enhanced card has an
Enhanced +ncell. - A grey
?plate means a card could not be read. It is only shown after 2.5 s, and not while two or more cards are still sliding in. - When a re-roll is the better call, a teal
RE-ROLLplate sits above the re-roll button and all cards go grey. - While the draft screen is up and no plates are drawn yet, the overlay says
Reading. - A small dot at the top left (teal watching, amber reading, grey capture failed) shows in the lobby only.
- For about 15 seconds after the draft closes, a picture of the game's ability upgrade panel shows this round's
points. Set your own order per hero in the app's ability order editor; a valid one replaces the standard order
and the panel's evidence line reads
Your order.
Capture is not on all session. While Deadlock is in front, the app probes a tiny screen region for the draft
screen and turns capture on when it sees one. F8 (Detect now), or the Detect now button in the Debug panel,
asks right away; with no draft on screen the status says No draft found.
src/brawl/worker.ts asks the page for a frame, reads it and asks again. Worker timers are not throttled when
the game has the foreground. Cards sit at fixed positions and print their name: each card is read from its name
line and the set is accepted once the same three cards and labels hold for 300 ms (1.2 s when the labels
change under the same cards). A set you already picked from is never advised again.
The app follows the match the way Street Brawl runs it: rounds 1 to 5, three choices per round, one re-roll per
game. src/brawl/brawlState.ts is a pure state machine (tracker.ts runs it inside the worker). It reads each
thing once, when the game changes it.
-
Round start. The round banner is probed with the same tiny screen read as the CHOICE glyph. A hit turns
capture on and logs
round.start. The name reader is already warm: it is started and warmed when the app opens (Name Reader). -
Loading screen. The "Joining the fight as " plate is followed at once by round 1's draft, so the first
sure read of it (once per loading screen) warms the draft reader the same way a round start does: new match, round 1,
fresh name line fingerprints. Logged
draft.warm(from: loading) afterhero.loading; it also lets the round 1 banner of the new match count again. -
Cards one at a time. A card's name line is read as soon as it holds still for two frames. A locked slot is
never read again while its line looks the same. Plates, the take mark and the re-roll call appear together
once all three slots are locked, then stay frozen. Until then the overlay says
Reading. - Re-roll. Same CHOICE label and all three name lines blank is a re-roll. The slots clear and the new cards are read the same way. After one is seen, no re-roll is advised again that round.
-
Picks. The pick is read from the closing set (within 400 ms of the close). If it cannot be read, the
advised card is assumed and the owned grid is read once to check; a mismatch corrects the owned list and logs
owned.corrected. The grid is not read every frame. -
Resync. The ROUND and CHOICE label is the only thing compared every frame. A label that does not follow on
from the tracked place resets to it, reads the cards, grid and re-roll caption again, and the status says
Resynced to round N choice M. F8 forces the same. Round labels going backwards start a new match.
The session report lists, per draft, the reads per slot, resyncs, where the pick came from (read, assumed
or grid) and the advice time. npm run brawl:replay prints the same.
Debug mode is on in development and in any -rc version, and off in a final release. Ctrl+Shift+D opens the
Debug panel: Start/Stop capture, Detect now, test mode, round, choice, re-rolls, enemies, owned items, the advice
list, the ability order, and the session report (one row per draft with its crops, what was read and drawn, and
Mark wrong). With debug on, the last three matches are recorded under the app's user data folder so a draft
can be replayed through the real worker (npm run brawl:replay).
Test mode opens a dummy window titled Deadlock with a real draft screenshot, so the overlay can be tried
without the game. It refuses to start when a real Deadlock window exists.