GOAT H1

Native port · Built from the decompiled Xbox source

Welcome back,soldier.

The original, recompiled for Mac, Windows, Linux, Android, VR, 4K and 128 players.

The 2001 game, compiled natively from its decompiled source. It plays exactly as it shipped, and new Vulkan and Metal renderers make it look the way you remember.

Plays exactly like the original. Looks the way you remember.

  • 4K
  • 144Hz
  • Ultrawide 21:9
128

Players in one game

Online and on the LAN, with up to 4 in split screen on each machine.

Co-op

The campaign, online

Play the story with friends over the internet. No servers to set up.

VR

A native Steam Frame build

The game in stereo, with your hands doing what the buttons did.

64bit

Native everywhere

Windows, Mac, Linux and Android: a 64-bit program on every one.

Vulkan

A modern renderer

On Windows, Linux, Android and the Steam Frame; Metal on the Mac.

Metal

A native Apple renderer

Built for the Mac and Apple silicon.

3D

Audio all around you

On headphones, every sound comes from its direction, muffled by walls, in the room's echo.

01 · Dynamic lights

The glow lights the room.

The original lit a whole wall at once. GOAT H1 lights every pixel by how far it is from the blast, so light pools near the fire and fades into the dark. Drag across the shot.

GOAT H1
Original
  1. The light pools around the blast and fades with distance.
  2. The far walls and the ceiling stay in shadow.
  3. Each surface keeps its own colour instead of turning yellow.

Real capture, the same run twice · Rat Race, a frag grenade · Original: the Classic preset at the Xbox's 640 × 480, a frame a tick · GOAT H1: Enhanced, frames between ticks

02 · Anti-aliasing

No more stairs.

The original drew every edge in jagged steps. GOAT H1 smooths them with SMAA, and draws the HUD after, pin-sharp. Move the lens along the cliffs.

Original
Around the lens: OriginalInside the lens: GOAT H1, SMAA

Real capture, the same run twice, enlarged 4× so the pixels show · Blood Gulch, a slow strafe · Original: the Classic preset at the Xbox's 640 × 480 · GOAT H1: Enhanced, SMAA

03 · The plasma glow

Plasma that glows.

The original drew a plasma bolt as a flat flare. GOAT H1 gives every bolt in flight a soft glow, and lets it light the walls, the floor and the gun in your hands.

Original
GOAT H1
  1. The bolt glows as it flies.
  2. It lights the floor and the walls on its way.
  3. Your weapon catches the light.

Real capture, the same run twice · Rat Race, the plasma rifle · Original: the Classic preset at the Xbox's 640 × 480, a frame a tick · GOAT H1: Enhanced, frames between ticks

04 · Smooth at any refresh rate

Same game. Every frame.

The world still runs at 30 ticks a second, exactly as it shipped. GOAT H1 draws every frame in between at your display's rate: the camera, every object, every light, the motion tracker.

Original 30 fps
GOAT H1 60 fps
Same 30 Hz gameSame inputShown at 60 fps

Real capture, the same run twice, Rat Race: Original, one frame a tick · GOAT H1, frames between ticks · 120 and 240 Hz displays get a frame for every refresh

05 · Ambient occlusion

Everything sits in the world.

Vehicles, players and objects get a soft shadow where they touch the ground and in their creases, so a Warthog looks parked on the sand instead of hovering over it. The level's own lighting stays as it shipped. Optional, and off by default while we polish it. Drag across the shot.

A Warthog parked on the sand by a base, ambient occlusion off: the ground under it is lit as evenly as the open sand, so it seems to float a little
The same frame with ambient occlusion on: soft shade under the Warthog where its wheels meet the sand, and in its wheel wells and seats On
Off
  1. Soft shade under the Warthog, where its wheels meet the sand.
  2. Its wheel wells, seats and gun get depth in their creases.
  3. The sand, the rocks and the base keep the level's own lighting.
Settings › Video › Advanced Graphics › Ambient OcclusionOff by default

Real capture, the same frame twice · Blood Gulch, a parked Warthog · Enhanced, ambient occlusion off, then Strong · Vulkan and Metal

06 · Wide field of view

See more, without the stretch.

Turn your field of view up to see more around you, and a normal view smears everything at the sides like a funhouse mirror. GOAT H1 can keep it in shape: upright edges stay straight, players at the sides keep their real shape, and your aim stays dead center. Few shooters offer it. (It's called Panini projection, after Giovanni Paolo Panini, who painted wide views of buildings.)

A wide view across a canyon to a base, at a field of view of 150 degrees, drawn the normal way: the cliff and the ground at the sides are smeared outward, and the base in the middle looks small and far off Normal 150°
The same view with Panini projection: the cliff's edge stands straight, the ground at the sides keeps its shape, and the base in the middle is drawn larger Panini 150°
  1. The ground and the cliffs at the sides keep their shape instead of smearing outward.
  2. Upright edges, like the cliff's, stay straight.
  3. You see just as far to the sides; the middle is drawn larger.
Settings › Video › First Person › Panini ProjectionOff by default

Real capture, the same frame twice · Blood Gulch · a field of view of 150° across 16:9 · Normal, then Panini projection at strength 1 · HUD hidden; in play it stays flat

07 · Responsive

Built for the fight.

The time from your click to the shot on screen, measured in the game. The view turns the frame you move the mouse, your gun is drawn from the newest moment, and on GOAT H1's own servers your input lands on a step up to 120 times a second instead of 30. Here is one click, slowed down.

8× more responsive than the original.

GOAT H1 fires 6 ms after you click. The original took 48 ms. In a close fight, that's who shoots first. And on GOAT H1's own servers, your input reaches everyone 120 times a second.

A slowed-down race from one click to the shot on screen: GOAT H1 120 Tick shows the shot 5.9 milliseconds after the click, the original 47.7 milliseconds after it. GOAT H1 fired 8 times sooner: 42 milliseconds you would otherwise be waiting. Faint marks behind each lane are its steps: every 33.3 milliseconds for the original, every 8.3 for GOAT H1.

Timed from our measurements

Where the time goes

Pressing fire, stage by stage. The original drew one frame a tick and queued it behind the display; GOAT H1 acts on your press at the next step and shows it in the next frame.

  • Original timingone frame a tick, recreated47.7 ms
  • Legacy 30plays with OpenCE19.7 ms
  • GOAT H1 60 TickGOAT H1's own servers11.1 ms
  • GOAT H1 120 TickGOAT H1's own servers5.9 ms

Measured with the game's own log (debug.latency_log): pressing fire to the frame handed to the screen, median of 21 presses (50 for the original), on a Mac, in a local game with bots. Your display adds its own few milliseconds to both. The original's timing is recreated in GOAT H1 with its improvements switched off: 30 ticks, one frame a tick, no frames between ticks, the view drawn from the last tick. Each stage is its own median. This is a local game: on the Xbox's system link, which ran in lockstep, your own moves also waited a round trip to the other machines.

08 · 3D audio

Hear it behind you.

Put on headphones. Every shot, engine and voice comes from where it is: behind you, above you, through a wall. It's the Xbox's 3D audio, rebuilt for every platform, with cover that muffles and rooms that ring.

  • Around your headA model of a head on headphones, as the Xbox's 3D audio did
  • Walls muffleThe game's obstruction and occlusion, as the Xbox's audio standard means them
  • Rooms echoThe reverb of the room you're standing in
  • Engines bendDoppler that stays steady at 60 and 120 ticks
5.1 surround on surround systems · in VR, your real head

The sound here is your browser's own: Stereo pans it left and right, 3D is the browser's head model, a hint of the idea. In the game it's GOAT H1's own mixer: a model of a head on headphones, the levels' obstruction, occlusion and reverb, Doppler · 5.1 surround on surround systems · in VR, your real head

09 · VR on the Steam Frame

Step inside it.

Made on a Steam Frame and drawn with Vulkan: the game in stereo, your head tracked, and your hands doing what the buttons did. It plays on PC headsets through OpenXR too.

01Reload by handTake a magazine from your hip and push it in.
02Draw from holstersReach over your shoulder or to your hip for the weapon carried there.
03Raise the scopeLift the sniper rifle's or the pistol's scope to your eye and look through it.
04Throw for realGrenades land where you threw them, as hard as you threw.
05Every seat, first personTurn the Warthog's wheel with your hands. Every vehicle seat stays in first person.
06A HUD on your visorCurved on the glass, its parts at their own depths.

10 · Platforms

Wherever you play.

One game, compiled for each machine and drawn by its own renderer. Keyboard and mouse, controllers, touch, or your own two hands.

Mac

A Mac app for Apple silicon, with its own Metal renderer.

Metal · macOS 14.4+

Linux

64-bit x86 and ARM, in a portable folder that updates itself.

Vulkan 1.3

Steam Deck

Fills the screen at its own shape, with Steam Input.

Vulkan · up to 90 Hz

Android

Touch controls with gyro aiming, or a controller.

Vulkan · 64-bit

Steam Frame

The VR build, packaged for the headset.

Vulkan · OpenXR

Windows

64-bit, drawn with Vulkan, on the same code as Linux.

Vulkan 1.3 · 64-bit

11 · Under the hood

For the purists.

What makes it the original, and what it adds. Every line is in the project's documentation.

Code
The Xbox game's decompiled C, compiled natively, with few and marked changesNot emulation. Xbox build 2342.
Simulation
30 ticks a second, as shippedThe same calculations on every machine. The scorecard holds every change bit-identical at 30 Hz, tick by tick.
60 / 120 Hz
Sub-steps for what you feel in your hands, offline and on GOAT H1 60 and 120 Tick serversEvery rate plays exactly as 30 does
Frames
One per refresh of your displayEach frame drawn between the last two ticks; nothing the game calculates changes
Architecture
A 64-bit program, with the game compiled as a 32-bit-pointer guest inside itILP32: arm64_32 on ARM, x32 on x86-64
Renderers
Vulkan 1.3 on Windows, Linux, Android and in VR; Metal on the MacOne command stream into both
Picture
SMAA or FXAA, anisotropic filtering, sharper shadows, per-pixel lightingOne switch: Video Setup › Graphics › Preset, Classic or Enhanced
Lights
Per-pixel, inverse-square, in linear light, with a glow on every boltPlaced where their objects are drawn, between ticks
Display
Any resolution from 640 × 480, a field of view up to 150°, a HUD redrawn at 8×
Network
Legacy games play online with OpenCE players; GOAT H1 60 and 120 Tick games send every sub-step of your inputInternet play needs no servers to set up
Mods
Texture, sound, text and model packs from the game's Mods menu; Custom Edition maps that share themselves
Licence
Free software, AGPL-3.0-or-laterNo game data included

12 · Your copy

Bring your own game.

GOAT H1 contains none of the game's data. You need your own Xbox disc image of the game. Any version works.

  1. Download the game for your machine, below.
  2. Start the game and choose your disc image (.iso or .xiso), or its maps folder, when it asks. How to get your maps.
  3. It copies out its maps once. Then you're in.

13 · Get it

Pick your machine.

Free, and always the latest build. More machines are on the way.

Windows

For any Windows PC.

Download for Windows
  1. Unzip it anywhere, and open halo.exe.
  2. Windows may say it protected your PC. It says that of any app that isn't signed: choose More info, then Run anyway.

Or with Scoop, with no warning:

scoop bucket add openh1 https://github.com/OpenH1/scoop-bucket scoop install openh1
Need your maps?

Steam Deck

And any 64-bit Linux PC with Vulkan.

Download for Steam Deck
  1. In Desktop Mode, download it and unzip it.
  2. Open install.sh in that folder, and choose your game's disc image or maps folder when it asks. Or skip that: put the disc image in Downloads or on your SD card.
  3. Play it from Game Mode. It finds the image.
Need your maps?

Android

64-bit Android 9 or later, with Vulkan 1.3.

Download for Android
  1. Download it on your phone, and open it.
  2. When Android asks, allow your browser to install apps, then choose Install.
  3. Copy your disc image to the phone, open the app and choose it. It copies out its maps once.
Need your maps?

Steam Frame

The VR build, for the headset.

Download for Steam Frame
  1. On the Frame, in Desktop Mode, download it and unzip it.
  2. Open install.sh in that folder, and choose your game's maps folder when it asks.
  3. Start SteamVR, then play it from your Library.
Need your maps?