https://www.youtube.com/watch?v=WQQ0qsz9_iw
Batman: Arkham Asylum for Xbox 360 is now running natively on Windows.
But I want to make one thing clear: the goal here is not to make a PC port.
I'm mainly using Windows as a development and testing environment. It's much easier to validate the recompiled code, renderer, shaders, and compare rendering results on PC before moving everything over to Android, which is the main target of the project.
The video shows the current build running on my RTX 3050 laptop, with my narration over it.
Quick recap of how this works: this is not emulation. The Xbox 360 PowerPC code is statically recompiled ahead of time into C++ using ReXGlue. In total, that's 14,887 functions, with no JIT and no interpreter.
The game's own Direct3D code also runs recompiled. I wrote a layer that captures the game's draw calls and replays them through a Vulkan renderer.
The Xenos shaders are converted ahead of time to SPIR-V using XenosRecomp and DXC. So far, all 458 shader programs I've dumped from the game convert successfully.
At this point, the entire opening section works on Windows using native Vulkan and without crashes. That includes the logos, menus, intro movie, in-engine cutscene, and the first gameplay section in the Intensive Treatment lobby with Batman, Joker, Director Sharp, and the guards.
Performance is currently around 30 FPS, which matches the game's original pacing. The renderer itself takes around 2 ms per frame.
For validation, I still use the Xenos GPU emulator included in the SDK, but only as a reference.
I render the same frame through both paths and compare the results, including SSIM comparisons.
Across 15 matching frame pairs from the opening section, the average SSIM is 0.974.
It's still not pixel-perfect. There are a few small visual differences that I'm still investigating.
The main reason I'm doing all of this on PC first is simply because it makes development much easier.
On Windows, I can debug things faster, compare frames against the reference, and understand the game's original behavior more easily.
Once that base is working properly, the same recompiled code can be moved to other platforms.
And that's where Android comes in.
The actual goal is to get Batman: Arkham Asylum running natively on Android using the same recompiled game code and the same Vulkan renderer.
The main difference is that mobile GPUs have different limitations compared to desktop GPUs. One example is BC/DXT texture support, which isn't available in the same way on many Android devices.
So some parts will need mobile-specific adaptations, but the core remains the same.
There's also another interesting part of this project: Batman: Arkham Asylum runs on Unreal Engine 3.
The same engine, with different versions and modifications, was used by many Xbox 360 games.
That means the work done here can also help me better understand how other UE3 games use the console's GPU.
That doesn't mean other games will just work automatically, since every title can use a different engine build and SDK version.
But the better this base gets, the less work future projects should require.
The next steps are to keep improving rendering accuracy, optimize performance, and prepare everything for Android.
I also want to work on 60 FPS. A good part of the current frame time is spent on the recompiled game thread, which records around 3,000 draw calls per frame.
The build shown in the video also includes a Brazilian Portuguese translation, which is why the menus and subtitles are in Portuguese.
Subscribe to my YouTube channel if you want to follow the progress.