Forza Horizon 1: ReImagined
[!TIP]
The launcher is out: latest release
(Linux Flatpak for any distro, Windows installer; both experimental). It builds the game
from your own copy, no build steps needed. Announcement
· Website · Discord
The original 2012 Forza Horizon, running natively on PC and rebuilt around the modern Horizon experience: a shared online open world, leaderboards and rivals, high frame rates.
Forza Horizon 1: ReImagined takes Forza Horizon (Xbox 360) and brings it closer to what Horizon is today. The game runs natively on Linux and Windows, made by statically recompiling the original PowerPC executable to C++ with the ReXGlue SDK (the approach of RecompiledHaloReach), and on top of that the project focuses on:
- Better gameplay: 60, 120 or 144 fps with the physics and race timing intact, native
- Online free roam: the Horizon World playlist drops every online player into one
docs/online_vision.md).
- Leaderboards and rivals: times, ghosts and bounties shared between players, Monthly
- Your own servers: Xbox LIVE and Turn 10's services are long gone, so the project
server/), self-hostable, with a public instance to
join.
This repository contains no game code and no game data. You need your own copy of the
game (the Games on Demand package or the disc 1 ISO of the base version, Title ID 4D5309C9). The recompiled
C++ is generated from your copy on your machine; no binaries are published here.
Contents
- Screenshots
- What works
- Known issues
- Requirements
- Install with the launcher
- Building (Linux)
- Windows
- Playing
Screenshots
Captured from the recompiled game running natively on Linux.
| | |
|---|---|
| !Free roam
Free roam | !Circuit race
Circuit race against 7 AI drivers |
| !Prologue drive
Free roam, Colorado mountains | !Horizon World online
Horizon World online playlist: race lobby and races |
What works
- The whole game, single player: the opening drive to the end of the festival has been
tools/play.sh --xenia).
- Title Update 4 (the default), Horizon Rally and the 1000 Club: TU4 is built from your
tools/apply_title_update.py, about 2 s). It adds the **Horizon
Rally** expansion (with a Xenia save that has reached it: the Rally Heats and whole
championships played to the end and saved; the co-driver is not heard yet) and the
1000 Club in the pause menu (signed in to the Forza Live server: its challenges
earn medals that are kept with the career, and the server has the club's leaderboard).
docs/dlc.md
- All 23 DLC packages: every DLC car counts as installed, the Rally Expansion's 15 and
tools/install_dlc.py).
- Keyboard and mouse or controller:
mnk_mode = trueplays the menus, free roam, a
docs/playing.md
- 60, 120 or 144 fps (
frame_rateinforza.toml, any rate up to 240), with physics, the
docs/framerate.md, docs/perf.md):
| frame_rate | Free roam | Race, 7 AI cars (Clear Springs Circuit) |
|---|---|---|
| 60 | 59.9 fps | 59.6 fps |
| 120 | 115.2 fps | 75.7 fps |
| 144 | 111.5 fps | 70.1 fps |
The race is bound by the GPU emulation above 60; the game itself ran its main loop at the target rate in every run. 0 to 100 km/h takes 2.4 s at every rate.
- Online (through the Forza Live server): sign-in as a Gold member, Find Game and races
docs/online_vision.md
and docs/title_services.md.
- Title Update 4 online (tested with two players on a local server): Horizon World (one
docs/dlc.md).
- Your own server: the Forza Live server (
server/, Python 3 standard library only, or
docs/hosting.md), and there is a public
instance to join.
Known issues
- The Auction House exists on the server only; its screens were removed from the game, and
- Throttle, brake and steering on the keyboard are all or nothing (the steering has a ramp),
docs/playing.md).
- Races with many AI cars are GPU-bound: 76 fps at a 120 fps target and 70 at 144 (60 holds).
- Windows builds are cross-compiled from Linux and have only been tried under Proton, not
- The launcher (v0.1.0) is experimental: tested end to end on Linux (Flatpak), not yet on Windows.
- Title Update 4 and base-game players can't play together (separate rooms), and a profile
Requirements
- Linux x86-64 or Windows 10/11 64-bit, with a Vulkan 1.3 GPU, about 4 GB of free RAM (measured:
-j4 and 3.2 GB at -j8, and is not run together with the game) and about 15 GB of disk (7.6 GB of extracted game
files, the SDK 1.6 GB, the build tree about 1 GB, a downloaded compiler 1.1 GB). Windows:
see below.
- Your own copy of Forza Horizon, base version: the Games on Demand package
4D5309C9/00007000/ plus .data/ ), or the retail disc 1 as an ISO (or a
folder with its files; see docs/disc.md). Optional but recommended: the Title Update 4 package
(4D5309C9/000B0000/, update 4000D145) for Horizon Rally and the 1000 Club.
- For the manual build: Clang (tested with 23), CMake >= 3.25, Ninja, Python 3, Git,
tools/xex_image.py only). The launcher downloads what is missing.
- ReXGlue SDK 0.10.0.24 nightly
nightly-20261002-bd833a2a).
Install with the launcher
This is the way to install. The launcher builds the game on your machine from your own files; nothing of the game is ever downloaded or shipped.
- Get the launcher from the latest release:
.tar.gz is the alternative), on Windows an installer. The Flatpak is installed with
flatpak install --user ForzaHorizon1-ReImagined-x86_64.flatpak (it pulls the freedesktop
SDK runtime from Flathub by itself); install the compiler extension once with
flatpak install flathub org.freedesktop.Sdk.Extension.llvm22//26.08 (0.5 GB; without it the
launcher downloads a 2 GB compiler instead and tells you so).
- In Setup, point it at your Games on Demand package or your disc 1 ISO (it is
- Build: it generates the game from your copy and compiles it, downloading a compiler
-j4: a full build with Title
Update 4 takes about 3.6 to 4.6 minutes, peaks near 2 GB of RAM and leaves about 15 GB on
disk. It can be cancelled and resumed, and is repeated only when something changed.
- Play. Every setting of
forza.tomlhas a page in Settings (frame rate, display,
Details: docs/launcher.md. The steps below are the same build by hand.
Building (Linux)
# 1. The ReXGlue SDK nightly, unpacked to ~/rexglue-sdk-nightly/0.10.0.24/linux-amd64
2. The game files, extracted from your Games on Demand package (only read)
python3 tools/xcontent_extract.py /path/to/4D5309C9/00007000/<name> extract extracted/game
3. The patched Xenos GPU plugin and codegen tool (clones the SDK to ~/rexglue-sdk-src-forza,
applies patches/rexglue-sdk/ and installs an overlay at ~/rexglue-sdk-patched-forza;
the stock rexglue's dot products overflow to infinity, Xenon's to QNaN, and free roam
crashes without it)
tools/build_rexglue_sdk.sh
4. Configure (the first configure runs codegen with the overlay's rexglue, about a
minute) and build
cmake -S forza-recomp -B forza-recomp/out/build/linux -G Ninja -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_COMPILER=clang++ -DCMAKE_PREFIX_PATH=$HOME/rexglue-sdk-nightly/0.10.0.24/linux-amd64
ninja -C forza-recomp/out/build/linux
Title Update 4 (needed for Horizon Rally and the 1000 Club; recommended): apply the
update to your default.xex (about 2 s; it writes the patched executable, the two facade
DLLs and the update's media.zip to extracted/tu4/) and build the TU4 version next to the
base one. It has its own hints (hints_tu4/) and generated code (generated_tu4/); a full
build is about 4 minutes at -j4 on 8 cores. git checkout forza-recomp/generated/rexglue.cmake
afterwards if codegen shows it modified.
python3 tools/apply_title_update.py extracted/game/default.xex /path/to/<title update package or zip> extracted/tu4/default.xex
cmake -S forza-recomp -B forza-recomp/out/build/linux-tu4 -G Ninja -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_COMPILER=clang++ -DCMAKE_PREFIX_PATH=$HOME/rexglue-sdk-nightly/0.10.0.24/linux-amd64 \
-DFORZA_TITLE_UPDATE=4
ninja -C forza-recomp/out/build/linux-tu4
The launcher does all of this from the two packages (above).
Windows
The Windows version is cross-compiled from Linux with clang/clang-cl and lld-link, after the
Linux build above (its codegen output in forza-recomp/generated/ is reused, and step 3
checks out the SDK source). tools/build_windows.sh builds the ReXGlue SDK for Windows
from ~/rexglue-sdk-src-forza with this project's patches and the Vulkan backend into
~/rexglue-sdk-patched-forza/0.10.0.24/win-amd64, then the game, and packages it in
forza-recomp/out/dist/windows (--sdk-only and --game-only split the long build):
brew install llvm lld # clang, clang-cl, lld-link
xwin --accept-license splat --output ~/.local/opt/xwin/sdk # MSVC CRT + Windows SDK (Microsoft's license)
tools/build_windows.sh
tools/package_linux.sh # the Linux package, forza-recomp/out/dist/linux
On Windows, extract the package, install the Microsoft Visual C++ 2015-2022 x64
redistributable, extract your game files with python xcontent_extract.py and run
play.bat C:\path\to\extracted\game (--offline for no Xbox LIVE; it starts a local
Forza Live server when Python is installed, or uses FORZA_SERVER / live_server in
forza.toml). Saves, the online identity and the log go to Documents\forza.
Playing
tools/play.sh # play with your own profile (~/.local/share/forza)
tools/play.sh --xenia # continue your Xenia Canary save (a copy)
tools/play.sh --offline # without Xbox LIVE
tools/play.sh --base # the base game instead of Title Update 4
play.sh runs the Title Update 4 build (forza-recomp/out/build/linux-tu4) when it exists
and the base build otherwise. TU4 converts a profile save when it loads it
(ForzaProfile/VersionFlags, a NeedsAA file), and the base build then refuses that
profile ("MISSING TITLE UPDATE"): --base is for profiles that never ran on TU4, and a copy
of the profile folder lets you go back.
Install DLC once with python3 tools/install_dlc.py /path/to/4D5309C9/00000002 (STFS packages, or a Xenia content folder with the DLC extracted; the launcher's DLC step takes both). Controllers,
saves, the Xenia save import and more are in docs/playing.md.
Playing online
play.sh starts a local Forza Live server for the session. To play on the public server,
set in forza.toml next to the binary:
live_server = "forza-reimagined.playit.plus:56677"
(or start with FORZA_SERVER=forza-reimagined.playit.plus:56677). You forward no ports. To run your
own server, see docs/hosting.md.
More documentation
docs/PROJECT.md (status log, findings, debugging recipes),
docs/playing.md, docs/hosting.md,
docs/perf.md, docs/framerate.md,
and the issue tracker
(known bugs and planned work).
Community
Questions, help with setup and online sessions: Discord. Bugs and feature requests: issues (the bug report template asks for your OS, GPU and log).
Legal
Forza Horizon is © Microsoft. This project is not affiliated with, endorsed by or
sponsored by Microsoft, Playground Games or Turn 10 Studios. It contains no game code or
assets; you must own the game. See LICENSE.