bo2-mac - Black Ops II statically recompiled to native ARM64 macOS
bo2-mac takes your own Steam copy of Call of Duty: Black Ops II and converts its x86 machine code into native ARM64 code for your Mac. Using Remill to lift functions to LLVM IR, a hand-written Win32 runtime, and Direct3D 11 rendered through Metal, it runs the campaign, Zombies, and multiplayer without Wine or a JIT. About 150,000 functions are translated ahead of time, and the copy protection is executed, not bypassed. On an Apple M1, expect 51–60 fps in campaign, 57–60 in Zombies, and 53–60 in multiplayer against bots. The converter checks your executables and builds the app locally, so no game files are shared.
The x86 code itself is gone: it is ARM64 machine code before the game starts.
- cornedor
I've used to same technique to get Fallout: New Vegas running on Asahi Linux on MacOS. Its quite a step, but https://github.com/doitsujin/dxvk makes it possible to skip a lot of work and get the game running in day. You can then make any changes you want, so I'm running fallout nv on a wide display in native resolution and some graphical improvements. Realtime whole world shadow maps, SSAO, tonemap + color grading, FXAA and Hor+ FOV.
Gives me a solid 60fps most of the time, with only the occasianal bug here and there that is often fixed in no time. Luckily i've added 10min auto save quite quickly, so that it does not cause that big of a problem.
Aside from the fun of both getting the game to work on this machine, and the fun of actually being able to play the game, it is a great way to find creative ways to work with LLM. Building out dev tools on the way that works for an LLM etc.
- klaussilveira
Somewhat related: https://lwss.github.io/Kisak-Black/
- scronkfinkle
> does not use any emulator whatsoever, be it Wine, Crossover or Rosetta
Not sure about the other two, but WINE Is Not an Emulator. It's in the name :)
- baalimago
Stuff like this makes me really happy about AI. The convenience that AAA lacks, or that they intentionally withhold, is now within reach.
- cedws
How does it actually recompile, does it use an existing tool? I can’t imagine the agent combs through every routine and hand translates the assembly.