Halo: Combat Evolved (for original Xbox) ported to Windows, Linux and Android
C
1,014
750 commits
updated Oct 7, 2026
This project is a port of the Halo: Combat Evolved decompilation to Linux,
Windows and Android. The decompilation is of the Xbox build 2342
(cachebeta.exe, SHA-256
4cc87b45f721270392a96f1674ed2b5cd4a7bb4355faeab4531d1cf1884d9520).
The port starts from the decompilation of bnunu/halo-1. That project is a fork of punpckhdq/halo.
GitHub Actions builds the game for each commit. These links download the builds of the latest release:
| Platform | Release | Debug |
|---|---|---|
| Linux | halo-linux-release.zip | halo-linux-debug.zip |
| Windows | halo-windows-release.zip | halo-windows-debug.zip |
| Android | halo-android-release.zip | halo-android-debug.zip |
Use the release build to play. The debug build stops at the first failed assertion and writes it to the log. Use the debug build to find and report problems.
The game updates itself. At start-up it looks for a newer release, and asks if you want to install it. Refer to "Updates" in port/linux/README.md.
Each build of the main branch that passes on all three platforms is a new
release. The Releases
page keeps the last five releases. If the latest build has a problem, get
an older build from that page.
The port does not include the game data. Download an Xbox disc image
(.xiso or .iso) of Halo: Combat Evolved. All versions of the game
operate. The maps of the European (PAL) version were made for a slower
console. The port changes them to play as the North American (NTSC) maps do,
so players of the two versions can play together.
maps/ folder. Then the game starts.On Linux and Windows, the game puts maps/ next to the executable. On
Android, copy the disc image to the phone first. The app puts maps/ in its
data folder. Refer to port/android/README.md.
Each platform has its own instructions:
| Platform | Instructions |
|---|---|
| Linux (32-bit x86 executable, OpenGL 4.5, SDL3) | port/linux/README.md |
| Windows (32-bit x86 executable, OpenGL 4.5, SDL3) | port/windows/README.md |
| Android (arm64 app, OpenGL ES 3, SDL3) | port/android/README.md |
The Linux README also gives the controls, the settings and the multiplayer functions. These are almost the same on all platforms.
The game can play system link games on a local network and on the internet:
You do not need the Xbox SDK. The port supplies the SDK declarations that the game uses. Refer to port/include/xdk.
To build the game:
python configure.py.ninja with the target for the platform:| Target | Result |
|---|---|
ninja linux | build/linux/halo |
ninja windows (on Windows) | build/windows/halo.exe and SDL3.dll |
ninja android_apk | port/android/app/build/outputs/apk/debug/app-debug.apk |
If you enter ninja without a target, ninja builds the game for the
computer that you use.
tools/ci_build.py makes the same builds as GitHub Actions. For example,
enter python tools/ci_build.py linux release.
Give these options to configure.py:
| Option | Result |
|---|---|
| (none) | A debug build. A failed assertion stops the game. |
--release | A release build. The game does not examine assertions, as in the retail game. |
--portable | The Linux and Windows builds operate on all x86-64 processors. Use this option for builds that you give to other persons. |
--lto=thin, --lto=off | Less link-time optimization. The link is faster. |
--pgo=off | No profile-guided optimization. |
--pgo=train | Records a new optimization profile. Refer to "Optimization profiles". |
Without --portable, the Linux and Windows builds use all the instructions
of the processor that builds them (-march=native). Such a build does not
always start on a different computer.
The builds use profiles of the game to optimize the code:
pgo/halo_linux.profdata for Linux and Android.pgo/halo_windows.profdata for Windows.The profiles need clang 22 or later. With an older clang, the builds do not use the profiles.
To record a new profile:
python configure.py --pgo=train.ninja linux or ninja windows.The build then plays the main menu and the first minute of each campaign
level. This procedure continues for approximately 15 minutes. The game
data must be in assets/.
Halo: Combat Evolved (for original Xbox) ported to Windows, Linux and Android
C
1,014
750 commits
updated Oct 7, 2026
This project is a port of the Halo: Combat Evolved decompilation to Linux,
Windows and Android. The decompilation is of the Xbox build 2342
(cachebeta.exe, SHA-256
4cc87b45f721270392a96f1674ed2b5cd4a7bb4355faeab4531d1cf1884d9520).
The port starts from the decompilation of bnunu/halo-1. That project is a fork of punpckhdq/halo.
GitHub Actions builds the game for each commit. These links download the builds of the latest release:
| Platform | Release | Debug |
|---|---|---|
| Linux | halo-linux-release.zip | halo-linux-debug.zip |
| Windows | halo-windows-release.zip | halo-windows-debug.zip |
| Android | halo-android-release.zip | halo-android-debug.zip |
Use the release build to play. The debug build stops at the first failed assertion and writes it to the log. Use the debug build to find and report problems.
The game updates itself. At start-up it looks for a newer release, and asks if you want to install it. Refer to "Updates" in port/linux/README.md.
Each build of the main branch that passes on all three platforms is a new
release. The Releases
page keeps the last five releases. If the latest build has a problem, get
an older build from that page.
The port does not include the game data. Download an Xbox disc image
(.xiso or .iso) of Halo: Combat Evolved. All versions of the game
operate. The maps of the European (PAL) version were made for a slower
console. The port changes them to play as the North American (NTSC) maps do,
so players of the two versions can play together.
maps/ folder. Then the game starts.On Linux and Windows, the game puts maps/ next to the executable. On
Android, copy the disc image to the phone first. The app puts maps/ in its
data folder. Refer to port/android/README.md.
Each platform has its own instructions:
| Platform | Instructions |
|---|---|
| Linux (32-bit x86 executable, OpenGL 4.5, SDL3) | port/linux/README.md |
| Windows (32-bit x86 executable, OpenGL 4.5, SDL3) | port/windows/README.md |
| Android (arm64 app, OpenGL ES 3, SDL3) | port/android/README.md |
The Linux README also gives the controls, the settings and the multiplayer functions. These are almost the same on all platforms.
The game can play system link games on a local network and on the internet:
You do not need the Xbox SDK. The port supplies the SDK declarations that the game uses. Refer to port/include/xdk.
To build the game:
python configure.py.ninja with the target for the platform:| Target | Result |
|---|---|
ninja linux | build/linux/halo |
ninja windows (on Windows) | build/windows/halo.exe and SDL3.dll |
ninja android_apk | port/android/app/build/outputs/apk/debug/app-debug.apk |
If you enter ninja without a target, ninja builds the game for the
computer that you use.
tools/ci_build.py makes the same builds as GitHub Actions. For example,
enter python tools/ci_build.py linux release.
Give these options to configure.py:
| Option | Result |
|---|---|
| (none) | A debug build. A failed assertion stops the game. |
--release | A release build. The game does not examine assertions, as in the retail game. |
--portable | The Linux and Windows builds operate on all x86-64 processors. Use this option for builds that you give to other persons. |
--lto=thin, --lto=off | Less link-time optimization. The link is faster. |
--pgo=off | No profile-guided optimization. |
--pgo=train | Records a new optimization profile. Refer to "Optimization profiles". |
Without --portable, the Linux and Windows builds use all the instructions
of the processor that builds them (-march=native). Such a build does not
always start on a different computer.
The builds use profiles of the game to optimize the code:
pgo/halo_linux.profdata for Linux and Android.pgo/halo_windows.profdata for Windows.The profiles need clang 22 or later. With an older clang, the builds do not use the profiles.
To record a new profile:
python configure.py --pgo=train.ninja linux or ninja windows.The build then plays the main menu and the first minute of each campaign
level. This procedure continues for approximately 15 minutes. The game
data must be in assets/.