The main menu, drawn from the Trial's own ui.map: the ring, the space sky, the logo and the title theme.
![]() |
![]() |
| Blood Gulch in first person. The assault rifle's model, animations, ammo counter, shield and motion tracker all come from the Trial's tags. | Team Slayer. Bots in red and blue armour, coloured through the cyborg shader's own change-colour mask. |
![]() |
![]() |
| Capture the Flag. A red bot runs blue's flag home, with a Warthog and a Ghost behind. | The flag stand. The pole comes from the flag's model and the cloth from its widget tag, on the stand the map defines. |
![]() |
![]() |
| The Warthog. Driver, gunner and passenger seats, with the chaingun spinning up. | The Ghost. All 28 of Blood Gulch's vehicles: Warthogs, Ghosts, Scorpions and Banshees. |
htamenu, htaview, htamatch) from the owner's Trial data.
## Features
| | |
|---|---|
| 🎮 **Game types** | Slayer, Team Slayer and Capture the Flag against 0–7 bots, with the Trial's announcer ("Red team has the flag!") |
| 🚙 **Vehicles** | Warthog (driver, gunner, passenger), Scorpion, Ghost, Banshee: every seat and every gun; destructible hulls, momentum, blasts that throw them; bots drive the Warthog, Ghost and Scorpion on paths wide enough for each, steer round parked cars, and crew each other's guns |
| 🔫 **Weapons** | Nine weapons (assault rifle, pistol, shotgun, sniper, rocket launcher, flamethrower, plasma rifle, plasma pistol, needler) with their first-person models, animations, sounds, HUD and tracers; grenades; powerups; dropped guns |
| 🤖 **Bots** | They walk a navigation grid built from the map's collision, pick up weapons, fight, attack and defend flags, and chase the carrier |
| 🌐 **Multiplayer** | LAN discovery and direct-IP play (Slayer, Team Slayer, CTF), host-authoritative over UDP |
| 🖥️ **Menus** | The Trial's own main menu and its words, with a touch overlay for match settings |
| 🎨 **Rendering** | Lightmaps, detail maps, the real multi-layer sky, team colours, flag cloth, contrails, decals, particles |
**Still to come:** Oddball, King of the Hill, Race, bots that fly the Banshee, and the
campaign. See [`docs/HANDOFF.md`](docs/HANDOFF.md) for the full picture.
## Play it
You need an **ARM64 Android phone with Vulkan** (Android 8.0 or later) and a PC to unpack the
Trial installer.
1. **Get the Trial's maps.** The installer (`HaloTrialSetup.exe`, sometimes named
`lotrialsetup1.exe`) is a cabinet archive, so you don't need to install anything. Extract four
files with [7-Zip](https://www.7-zip.org/):
```sh
7z e lotrialsetup1.exe maps/bloodgulch.map maps/bitmaps.map maps/sounds.map maps/ui.map
```
On Windows, open the installer in 7-Zip and drag those four files out of its `maps` folder.
2. **Copy the four maps to your phone**, for example into `Download`.
3. **Install the APK:** [`halo-trial-guest.apk` from the latest release](https://github.com/madpai/open-halo-project/releases/latest).
It contains no Halo data.
4. **Open the app and pick each file** in the setup screen: `bloodgulch.map`, `bitmaps.map`
(textures), `sounds.map` (audio) and `ui.map` (the main menu). You only do this once.
## Build it
On Linux (the project is developed on Arch); macOS should work the same way.
```sh
# host tools
sudo pacman -S --needed cmake ninja clang git python jdk17-openjdk unzip # or your distro's equivalents
# Android SDK pieces (sdkmanager from Android's command-line tools)
sdkmanager --sdk_root=$HOME/android/sdk \
"platform-tools" "platforms;android-35" "build-tools;35.0.0" \
"ndk;28.0.13004108" "cmake;3.31.5"
export ANDROID_HOME=$HOME/android/sdk
# the APK -- the Gradle wrapper downloads Gradle 8.9 itself
cd android && ./gradlew assembleDebug
# -> android/app/build/outputs/apk/debug/app-debug.apk
```
The desktop build runs the tests and the offscreen tools (`htaview`,
`htamatch`, `htamenu`). The tests that need real data take your own map:
```sh
cmake -S . -B build-host -G Ninja && cmake --build build-host
./build-host/test_game /path/to/your/maps/bloodgulch.map
HTA_MAP=/path/to/your/maps/bloodgulch.map scripts/verify.sh # the full gate
```
Exact toolchain versions are in
[`docs/BUILD_ENVIRONMENT.md`](docs/BUILD_ENVIRONMENT.md).
## Working on it
**Start with [`docs/HANDOFF.md`](docs/HANDOFF.md).** It covers the build and test
loop, what works, what's next, how to read Halo's tags, and the traps that
have already cost a session. [`docs/JOURNAL.md`](docs/JOURNAL.md) is the
session history. Search it by symptom.
## Legal
- **No Halo assets, executables or DLLs are ever committed here**, and no
APK built from this repository carries any. Every player supplies their
own Trial copy. `verify.sh` checks that the shareable APK contains no maps.
- This project does **not** use the December 2024 Halo "Digsite" leak
material that the current upstream Demon depends on.
- No DRM is involved and none is circumvented.
- The screenshots above are hosted on a release, not in git, so the repository's
history carries no Halo imagery either.
- Our code is [GPLv3](LICENSE) (compatible with Invader and Demon).
## Docs
| Doc | Contents |
|---|---|
| [HANDOFF.md](docs/HANDOFF.md) | **Start here.** Current state, the loop, tag discipline, traps, invented constants |
| [JOURNAL.md](docs/JOURNAL.md) | Every session, newest first. The *why*. Search it by symptom |
| [BUILD_ENVIRONMENT.md](docs/BUILD_ENVIRONMENT.md) | Exact toolchain versions |
| [BLOOD_GULCH_ASSETS.md](docs/BLOOD_GULCH_ASSETS.md) | What is in the map |
| [INVADER_ASSET_PIPELINE.md](docs/INVADER_ASSET_PIPELINE.md) | How Invader's tag definitions are used |
| [ANDROID_PORT_INVESTIGATION.md](docs/ANDROID_PORT_INVESTIGATION.md) | The original feasibility study |
| [NETWORK_ARCHITECTURE.md](docs/NETWORK_ARCHITECTURE.md) | Engine audit and native multiplayer design |
| [NETWORK_PROGRESS.md](docs/NETWORK_PROGRESS.md) | Verified LAN slice, commands and remaining tests |
| [PROGRESS.md](docs/PROGRESS.md) | Early milestone log |
---