⠀⠀⠀⠀⣠⣤⣤⡀⠀○▌⠀┬⠀⠀○⠀⠀⠀⠀⠀◙▓⠀├⠀⠀║⠀⠀⠀╚█⠀⠀⠀⠀⠀⠀┐⢀⣤⣤⣄⠀⠀⠀⠀
⠀⠀⠀⠸⣿⣿⣿⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣇⠀⠀⠀
⢀⣤⣤⣼⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣶⣾⣿⣿⣿⣿⣿⣿⣷⣶⣤⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⣿⣿⣿⣿⣤⣤⡀
⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠀⠀⠀⠀⢀⣴⡞⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣦⡀⠀⠀⠀⠀⢀⣴⣶⣿⣿⣿⣿⣿⣿⣿
⠙⠿⣿⡿⠏⢿⣿⣿⣿⣿⣦⣀■⣴⣿⠟⣤⡿⢁⣿⢛⣿⣿⣿⣿⣿⣿⣿⣿⡈⢿⣤⡙⣿⣦⡀⢀⣰⣿⣿⣿⣿⡿⠙⢿⣿⠿⠋
⠀⠀⠀⠀⠀⠀⠙⠻⣿⣿⣿⠃⠺⠛⠟⠻⠛⠓⠛⠛⠛⠛⠛⠛⠛⠛⠛⠟⠛⠟⠆⠟⠛⠚⠟⠳⠘⣿⣿⣿⡿⠋⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⡏⠀⡀⠂⠌⠀⠌⠠⠁⠌⠠⠁⠌⠠⠁⠌⠐⡀⠡⠀⠂⠈⠐⠀⢂⠐⠀⢸⠟⠉⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⢀⣀⣀⣀⣀⣀⣀⣀⣀⣁⣐⣈⣀⣀⣐⣀⣀⣂⣐⣀⣈⣀⣂⣀⣐⣀⣂⣁⣀⣁⣂⣀⣁⣀⣀⣀⣀⣀⣀⣀⠀⠀⠀⠀
⠀⠀⠀⠀⠻⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠇⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⣿⣿⣿⣿⡿⠋⠉⠛⠻⣿⣿⣿⣿⣿⣿⠟⠉⠉⠛⠿⣿⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣿⣿⡟⠀⠀⠀⠀⠀⠀⢻⣿⣿⣿⠁⠀⠀⠀⠀⠀⠹⣿⣿⣿⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣿⡇⠀⠀⠀⠀⠀⠀⣼⣿⣿⣿⠀⠀⠀⠀⠀⠀⢠⣿⣿⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢻⣿⣦⣀⣀⣀⣠⣴⣿⡿⠿⣿⣷⣄⣀⣀⣀⣤⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠻⢿⣿⣿⣿⣿⣇⠀⠀⣨⣿⣿⣿⣿⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⢰⣶⣬⣍⢙⣛⠛⠙⠋⠙⣉⡉⣭⣴⣾⡄⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⡇⣍⡛⠿⠏⣷⣿⣿⣿⢸⣿⣿⣧⢿⠿⠟⣁⢻⣿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣴⣿⣿⣿⡇⠾⣿⣷⣆⣤⣭⣭⣍⢨⣭⣭⣥⠐⣶⣿⡟⢸⣿⣿⣿⣦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⢠⣴⣾⣿⣦⣼⣿⣿⣿⣿⠟⠃⣷⣬⣙⡛⠻⠿⣿⣿⢸⣿⡿⠿⢘⣋⣥⣶⠘⠻⣿⣿⣿⣿⣷⣴⣾⣿⣶⡄⠀⠀⠀⠀
⠀⠀⠀⠀⢺⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⢻⣿⣿⣿⣷⣶⣶⣶⣶⣶⣶⣾⣿⣿⣿⡏⠀⠀⠈⠻⣿⣿⣿⣿⣿⣿⣿⡿⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠙⠛⢻⣿⣿⣿⣿⡆⠀⠀⠀⠀⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠀⠀⠀⠀⢠⣿⣿⣿⣿⡟⠛⠋⠁⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠸⣿⣿⣿⣿⠇⠀⠀⠀⠀⠀⠈⠿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠁⠀⠀⠀⠀⠀⠈⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠙⠛⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠛⠛⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⠚⠋⠀⠀⠀⠀⠀⠀⠀⠀
0xDEADMEM:0000KB
║▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░║
[ 0%]0x00 / 0x64
INITIALIZING NEURAL LINK_

⚠ PHOTOSENSITIVE WARNING ⚠
Contains flashing lights and effects

[ <- BACK ]0ximu://blog/deadlock-on-mac
[PUBLISHED][GAMING][MACOS][WINE]

Running Deadlock on a Mac: Five Boss Fights Deep in Wine

One-click installer + everything the error messages refused to tell me

2026-08//10 min read

Got a Deadlock invite. Opened Steam. Windows only. Stared at my M4 Max like it personally betrayed me.

Two nights later it runs at 60+ FPS on High through Apple's own D3D-to-Metal translation layer. This post is the full story plus a one-command installer, because the road there was littered with traps that each cost hours and produce zero useful error messages.

Apple Silicon, macOS 14+, ~80 GB free. Three steps:

1. Download "Install Deadlock.command"

2. In Finder: right-click it, choose "Open" (plain double-click gets blocked - the file is not notarized)

3. Let the Terminal window finish, log into Steam, install Deadlock, play.

It builds one self-contained Deadlock.app in ~/Applications; nothing else touches your system. Source, external-drive install and the terminal one-liner live in the GitHub repo.

# The Stack

No Mac port exists and none is coming soon. The play is a Windows compatibility layer: wine translates Windows syscalls, Apple's D3DMetal (from the Game Porting Toolkit) translates DirectX 11 into Metal, and Rosetta 2 chews through the x86 instructions. Three translation layers deep and it still pushes 60+ FPS. Modern Macs are absurd.

The installer pulls the CrossOver trial from CodeWeavers' own servers and extracts its wine build. That specific engine matters, and the reasons why are the interesting part.

# Boss Fight 1: The Firewall That Kills Silently

First Steam launch inside wine: "Download failed: http error 0". The Mac itself was online. DNS from inside wine: dead. Every host.

Culprit: LuLu (any outbound firewall does this). Freshly extracted wine binaries at a new path are unsigned strangers, and the block is silent: no popup if the alert gets lost, just a process where networking does not exist. If exactly ONE process on your machine cannot resolve DNS, suspect your firewall first. Allow wine and wine-preloader, retry, move on.

# Boss Fight 2: Steam Outgrew Your Wine

Try running 2026 Steam on the standalone Game Porting Toolkit engine: "steamwebhelper is not responding" forever, none of the recovery options help. Try CrossOver 24's wine 9: "Unexpected Transport Error (0x3008)" and a login spinner that never resolves.

Both engines are simply too old. Steam's Chromium UI now needs wine 10+, which is why half the guides on the internet (written in the Whisky era) no longer work. Whisky itself is unmaintained and its documented fix is pinning an ancient Steam build. Do not bother.

CrossOver 26 ships wine 11. Steam boots, logs in, downloads, plays. That is the entire reason the installer uses it.

# Boss Fight 3: The 10 FPS Trap

Game installed, launched, rendered... at 10 FPS on an M4 Max. GPU half idle, CPU barely one core. Everything healthy, everything slow.

Diagnosis with one command while the game runs:

lsof -p $(pgrep -f deadlock.exe) | grep -oiE 'D3DMetal|wined3d|dxvk' | sort -u

If this prints wined3d and no D3DMetal, you found your 10 FPS.

wined3d is wine's ancient fallback renderer. The fix is buried in CrossOver's internals: a library called cxcompatdb.so is what redirects d3d11 calls to D3DMetal, and it silently gives up if CX_ROOT is not set. No warning, no log line. You get a perfectly working game at slideshow speed.

The launcher the installer writes exports CX_ROOT, CX_GRAPHICS_BACKEND=d3dmetal and the libd3dshared path. That trio is the difference between 10 FPS and 60+.

# Boss Fight 4: macOS Itself

Double-clicked the finished app: "Steam is unable to write to its folder." Same app worked from the terminal.

That one is App Translocation: Gatekeeper sometimes runs your bundle from a read-only temporary copy, so any relative path inside the launcher points into a frozen clone. The installer bakes absolute paths into the launcher for exactly this reason. If you ever see a wine app that works from zsh but not from Finder, this is why.

# Boss Fight 5: The Zombies ps Refused to Show

Renderer fixed, still stuttering, still low FPS. Checked ps: nothing hot. Checked the GPU: half idle. Checked shader compilers: asleep. The machine swore it was bored.

sudo powermetrics -n 1 -i 3000 --samplers tasks | head -30

wine-preloader  740 ms/s
wine-preloader  720 ms/s
wine-preloader  708 ms/s
...eleven more of these...

Fourteen orphaned wine processes from earlier failed launches, each quietly burning over half a core. Roughly 7 cores of pure waste, invisible in ps because ps shows a decayed average and these had been "idle" between samples. powermetrics shows the truth. Killed them, FPS tripled on the spot.

The installed launcher now sweeps orphans on every start, so you never collect fourteen of them like I did. It also warns you if a heavy compiler job is eating your cores when you launch, because a dev machine running builds while you queue is its own boss fight.

# Troubleshooting Speedrun

http error 0 / cannot go online
Your firewall blocked wine. Allow wine + wine-preloader.

steamwebhelper not responding / 0x3008
Wine too old for current Steam. Use CrossOver 26+ (the installer does).

Renders fine but ~10 FPS
wined3d fallback. Check with the lsof one-liner; the fix is the CX_ROOT environment trio.

Works in terminal, breaks from Finder
App Translocation. Absolute paths in the launcher.

Random stutter, machine claims idle
Orphaned wine processes or background builds. Trust powermetrics, not ps.

Login freezes at 2FA
Use the QR code with the Steam mobile app instead.

# Fine Print

The installer downloads the CrossOver trial from CodeWeavers' own servers and builds everything locally. Before you ask: the trial's 14-day limit applies to the CrossOver app, which this setup never runs. The extracted wine engine is open source (LGPL) and has no expiry - my other wrapper runs a year-old extracted engine to this day.

If this becomes your daily setup, buy a CrossOver license anyway. CodeWeavers fund a huge share of wine development; the nudge is about supporting the people who made this possible, not about anything breaking.

Deadlock's anti-cheat is user-mode VAC today and wine players are not getting banned, but Valve does not support or bless this. A future anti-cheat update could end the party overnight. Play accordingly.

First session will stutter while shaders compile and Rosetta warms its caches. It smooths out. Start at 1440p Medium, go up from there. My M4 Max sits at 60+ on High.

Total damage: two evenings, five boss fights, zero Windows machines purchased.