I originally posted this guide on reddit, but wanted to repost it here as part of migrating away. Some games, including Halo MCC Coop and Company of Heros 3, will desync during multiplayer. This can be fixed by manually syncing two files.
Thanks to this comment by Fractal on ProtonDB for showing me the way.
The issue is non-matching ucrtbase.dll files between the two computers. There are two different copies of the file, both in the system32 and syswow64 folders (note: each copy is unique, you need to copy two separate files with the same name from different folders). It sounds like these files are supposed to be automatically synced for coop, but they aren't (possibly for legal reasons) and it causes problems with desync.
To fix it, you need to take copies of your friend's windows versions of the files, and copy them into the compdata folder for Halo on your deck. After that you should be able to play without desync.
The specific steps to follow are:
-
On the windows machine, go to:
C:\Windows\System32\ucrtbase.dll
and copy the file. -
Send it to the linux machine. Some software (like Discord) can compress or straight up change the file. I found I could safely send the files through discord if I put them in a .zip file first. If in doubt (or if things don't work) you'll need to verify the checksums (md5/sha256 etc).
-
On your linux system, replace the symlinked file in your steamapps folder. Once you're in your steamapps folder, the file will be located at:
steamapps/compatdata/976730/pfx/drive_c/windows/system32/ucrtbase.dll
The location on the steam folder can be different depending on how steam is installed, on steam deck you'll usually find it in the hidden folder.steam/steam
inside your home folder. You'll need to enable the option to show hidden folders before it will show up, this option can be found in the menu in the upper right of the file explorer. -
Repeat the process, but this time get the file from
C:\Windows\SysWOW64\ucrtbase.dll
. Once you have it safely on the linux machine, put it in the steamapps folder atsteamapps/compatdata/976730/pfx/drive_c/windows/syswow64/ucrtbase.dll
After this start both games in anti-cheat disabled mode, and coop should now work.
If the linux/steam deck version of the game won't start at all, it means something is wrong with the ucrtbase.dll files. They either got corrupted/changed during transfer, you mixed up which one was from the system32 folder and which was from the syswow64 folder, or you accidentally put the same file in both of those folders.
Either way, I'd recommend checking the checksums of the files on both machines to figure out which (or both) files got messed up in transfer.
Here's a guide on checksums for windows, it will require either 3rd party software or using the windows command line. On linux, KDE has checksums built into the file explorer, just right click on the file and hit properties. On other DE enviroments you can usually just run md5sum <file>
or sha256sum <file>
Yeah, my understanding is that it's not an insurmountable issue, it's just one that the steam deck hardware team wasn't able to solve in a cost effective way.