This project was created using AI Assistance
Deadlock Arcade - play mini-games straight from Deadlock.
Compatible with QOL Lock and like 95% other mods (place DL Arcade higher in priority)
No alt-tabs. No second app. Press Esc, pick a game, and play a round while you wait for your match.
Support & Community
• Discord: Report bugs, suggest new games, or discuss the mod on the Discord Server.
• Support the project: Help cover server costs & future development on Boosty. Any help is massively appreciated!
Games Included
• Poker (Texas Hold'em, 2 to 4 players)
• Geoguesser
• Pixel Battle
• Chess
• Checkers
• Wordle
• Durak
• Connect Four
• Tic-Tac-Toe
How to play
Press the Escape key. Select "DL Arcade"; it will appear below the "Exit Game" button
• Quick Match: Public matchmaking. No code needed.
• Select Multiple: Queue for several games at once, get matched on whatever overlaps.
• Private Lobbies: One player shares a 4-digit code, the other types it in.
• Play vs Bot: Fully offline, no server connection needed.
Wait, how does DL Arcade even go online?
TL;DR: Deadlock's UI has zero networking, but it CAN load images. We send actions hidden inside image URLs (e.g. /move.png?code=4591&from=12&to=28), and the server replies with tiny PNGs where the pixel width and height encode the response data. We read the image size in pixels and decode it back into board moves, cards, and game state!
The Technical Breakdown (Longer Version)
Deadlock's UI has absolutely zero networking. No fetch, no websockets, no HTTP. It was never meant to talk to a server. So how does Quick Match pair you with a stranger across the world, manage chess clocks, or deal hands in a 4-player Poker table?
Panorama can't send a web request, but it CAN load an image from a URL. So the entire multiplayer system is built on a custom image-sidechannel protocol.
Sending Data: We "load" a PNG image from our Cloudflare Worker server, but encode our actions, lobby codes, seat tokens, or poker bets into URL query parameters (e.g. .../api/move.png?code=1234&from=12&to=28&tok=a9f...). The server updates the game state and returns a tiny dynamic PNG.
Receiving Data (Level-Encoded Dimensions): Panorama won't let us read text or JSON from an image. Instead, we read the image's rendered width and height in pixels. The server encodes values into discrete levels (dim = level * 9 + 15). Width and height carry game concepts directly: board squares (0..63), lobby code halves, card IDs, chess clocks, or betting actions.
DPI & Resolution Safety: Different monitor resolutions (1080p, 1440p, 4K) or UI scaling levels distort rendered pixel sizes. To prevent corrupted moves or phantom inputs, the client auto-calibrates against a 600x1000 probe image on the first online request. The 9-pixel grid formula provides a massive ±4.5px safety buffer against layout rounding errors.
Matchmaking, private 4-digit codes, live turn sync, chess clocks, and 4-player Texas Hold'em dealers - all squeezed through the pixel dimensions of dynamic PNG images.
