Free Riders Recompiled
Free Riders Recompiled is an unofficial port of the Xbox 360 version of Sonic Free Riders for Windows, Linux and Android, built through static recompilation. Play with a controller or keyboard, use Kinect / Kinect v2 or webcam motion controls on Windows, and bring your own VRM model to the in-game AVATAR rider. Kinect v2 support is experimental and still needs hardware validation.
- Type: PC port
- Game: Sonic Free Riders
- Runs on Windows, Linux, macOS, Android and iOS
- By YuutaTsubasa
- Latest release v0.10.58, 2026-11-12
- Source: https://github.com/YuutaTsubasa/Free-Riders-Recompiled
README
Free Riders Recompiled
Free Riders Recompiled is an unofficial port of the Xbox 360 version of Sonic Free Riders for Windows, Linux and Android, built through static recompilation. Play with a controller or keyboard, use Kinect / Kinect v2 or webcam motion controls on Windows, and bring your own VRM model to the in-game AVATAR rider. Kinect v2 support is experimental and still needs hardware validation.
The game's PowerPC code is translated to C++ with XenonRecomp and its Xenos shaders with XenosRecomp, then runs on a native runtime that stands in for the console's kernel, graphics, audio, input and Kinect.
How it was made, step by step, with the numbers behind each step: the Recompiled Handbook (English and Traditional Chinese; its source is site/index.html).
This project does not include any game assets. You need your own legally acquired copy of the game (the USA/Europe disc) to play it: the launcher installs the game's data from your disc image. Prebuilt versions are on the Releases page; to build it yourself, see Building.
Important
This is a work in progress. The game boots, its menus work and races can be played, but many parts of it are untested and it may stop or misbehave.

Table of Contents
- Status
- Release notes
- System Requirements
- How to Install
- Settings
- How to Build
- Controls
- Kinect and Kinect v2
- Camera motion input
- VRM Avatar models
- Online play
- FAQ
- Repository Layout
- Credits
- License
Status
What works today:
- Booting from the title screen through the menus into races: Free Race from start to results, and Grand Prix from its story scenes into the first race.
- Direct3D 12 and Vulkan rendering, with the shaders translated as the game meets them; sound; saving and loading records.
- Playing without Kinect: the Kinect is emulated. Buttons stand in for the voice commands the menus understand, and the pad drives the body a race reads (leaning, jumping, kick dash, grabbing, tricks).
- Physical Kinect and Kinect v2 input on Windows, with sensor skeletons passed to the game. Xbox 360 Kinect has been tested through races; Kinect v2 support is experimental. See setup and requirements.
- A launcher that installs the game from your disc image and keeps its settings, in English or Traditional Chinese, on every platform.
- Linux (Vulkan, SDL2), and Android (arm64-v8a) with on-screen touch controls and tilt steering.
- Optional webcam motion input for 1P on Windows, with estimated 3D body joints, controller handoff and a separate skeleton debug window.
- Experimental custom VRM Avatar models, selected in the launcher, with game-driven animation and hand-held items.
- File-replacement mods in HedgeModManager's format, managed in the launcher's Mods tab (Mods).
Known limits:
- Only the USA/Europe disc is supported.
- Much of the game has not been played through yet; stages and modes beyond those above may stop on something the runtime does not do yet.
- Linux and Android use shaders translated beforehand on Windows
(
shaders.pack, included in the releases). The game creates all of its shaders while it boots; releases include the matching shader pack. - Android has been tried in the emulator, on Pocket S2 Pro (Adreno 750), and on AYN Thor (Adreno 740). The latest Android 10+ build completed a race on Thor at approximately 23–24 FPS with race time matching real time. Intro movies can still play slowly; this does not imply 60 FPS or the same performance on other devices. See Android performance.
Progress notes (mostly in Traditional Chinese) are in docs/, starting with docs/progress.md.
Release notes
- v0.1.0 — First playable preview Released Windows, Linux and Android builds, with playable menus and races, save support, and controller/keyboard gameplay without Kinect. Included an English/Traditional Chinese launcher and Android touch controls and tilt steering.
- v0.1.1 — Early stability and rendering fixes Fixed a Grand Prix loading failure, removed accidentally enabled profiling overhead, and corrected rendering at non-native window sizes. Improved Android texture compatibility and surface recovery, and bundled a complete shader pack.
- v0.1.2 — Race results fix Fixed the game stopping at race results when it attempted to award an achievement. Achievement requests are now handled locally without Xbox Live.
- v0.1.3 — Customizable controls Added desktop settings for player input sources, controller selection and keyboard/gamepad bindings. Improved Vulkan compatibility with display surfaces that lack certain capabilities.
- v0.1.4 — Crouch and jump fixes Fixed controller input conflicts that could cancel crouch charging or jump release, including when holding the left stick down.
- v0.1.5 — Local two-player support Added independent player input routing and split-screen corrections. Fixed Gear selection getting stuck after Player 1 confirmed, reduced repetitive input logging, and removed unnecessary CPU queries.
- v0.2.0 — Webcam motion controls Added optional Windows webcam controls using estimated 3D body movement, a skeleton debug window, and automatic controller/camera handoff. Improved motion gestures and fixed single-player viewport stretching and exposure when 2P was disabled.
- v0.2.1 — Shader and Windows startup fixes Corrected the incompatible shader pack shipped with v0.2.0, which could cause a white screen or Vulkan device loss. Added shader-pack validation and bundled the D3D12 Agility runtime for affected Windows 10 systems.
- v0.3.0 — Custom VRM avatars Added experimental VRM 0.x/1.0 models for the in-game AVATAR rider, with game-driven animation, stance changes and held-item positioning. Models can be selected through the launcher.
- v0.4.0 — Real Kinect support Added physical Kinect input on Windows, sensor previews and Kinect v1 tilt controls. Improved player tracking, webcam handling and Windows graphics compatibility. Xbox 360 Kinect has been tested in races; Kinect v2 remains experimental.
- v0.4.1 — Rendering options and performance work Fixed shader reload failures during scene changes and controller-related rider pose distortion. Added independent internal rendering resolutions from 360p to 1440p and reduced CPU/rendering overhead.
- v0.4.2 — Settings and language selection Reorganized launcher settings, added game language selection, and fixed startup failures caused by unsupported system regions.
- v0.4.3 — Pipeline preparation and handheld improvements Added startup preparation and caching of known graphics pipelines to reduce compilation stalls during gameplay. Improved Windows timing, worker synchronization and CPU overhead, and introduced an optimized Android 10+ APK alongside the Android 9-compatible build.
- v0.4.4 — Android race timing and CPU improvements Improved Android CPU scheduling and guest execution overhead, corrected race simulation timing at lower frame rates, and fixed Vulkan shader compatibility on GPUs without 64-bit integer support. Racing was verified at approximately 23–24 FPS with time matching real seconds on AYN Thor; Intro movies remain slower than expected.
- v0.4.5 — Android Intro playback improvements Reduced ARM64 movie-decoding overhead with faster vector memory operations. On the tested AYN Thor, maximum sampled Intro video delay fell from several seconds to under one second, while race timing remained correct. Some playback delay may remain on other devices.
- v0.4.6 — Course stability and handheld improvements Fixed low-frame-rate traversal failures in Frozen Forest, Final Factory, Metropolis Speedway and Forgotten Tomb, plus loading and long-session stability issues. Improved controller steering and side reach, Android rotation recovery, race UI timing and texture handling. Added Android diagnostic ZIP export and further CPU/rendering optimizations; performance still varies by device.
- v0.4.7 — Windows CPU optimizations and rendering stability Reduced Windows guest checkpoint overhead and added D3D12 draw recording on a render thread. Fixed stale resolved textures when guest memory is reused and improved cleanup after rendering errors. Added isolated benchmark tooling and expanded rendering regression coverage. Vulkan retains synchronous recording by default; Android performance gains are not established by this release.
- v0.5.0 — Unleashed/Marathon-style architecture Moved the runtime to the Unleashed/Marathon Recompiled model: one render target per guest surface with deferred and depth resolves (race shadows now appear), direct guest memory access, a host o1heap for the title's heap and physical memory, every guest thread running in parallel with per-subsystem locks instead of a global lock, the render thread on every backend, and real-time race stepping on every platform. On the tested AYN Thor a race went from about 25 to about 49–50 FPS.
- v0.5.1 — Controller air tricks Fixed air tricks with a controller: turning the left stick in the air now raises a jump's rating, as turning the body does with Kinect. Also integrates a faster guest-memory path for the checked (debugging) build.
- v0.5.2 — Air trick landing fix Spinning the left stick for an air trick no longer leans or accelerates the board, which had carried trick jumps off the side of Rocky Ridge out of the course.
- v0.5.3 — Jump physics and Retry fix Desktop races step one original frame at a time again, so charged jumps off the side of Rocky Ridge land back on the course. Retrying a race from the pause menu no longer brings the confirmation back and leaves it stuck on screen.
- v0.5.4 — Grey flash fix Removed the single frames of flat grey that flashed now and then during races: a HUD sprite the game parks far off screen was sometimes drawn across the whole screen. Added diagnostics for stalls and single-colour frames.
- v0.5.5 — Mali GPU start-up fix Android phones and tablets with a Mali-G57 GPU (Helio G99, such as the Galaxy Tab A9) no longer crash at start-up: the renderer asked for one more descriptor set than these GPUs allow. The log now names each graphics start-up step.
- v0.5.6 — Air tricks on side jumps, touch pause menu Spinning the stick in the air raises a side jump's rating again. On touch screens the on-screen stick turns the pause menu's wheel.
- v0.6.0 — Mod support The game loads file-replacement mods in HedgeModManager's format, the one Unleashed and Marathon Recompiled use. The launcher's new Mods tab switches them on and off and sets their order.
- v0.6.1 — Two players and Relay Race on controllers Each player turns, confirms and backs out of the two-player menus with their own controller, and either can pause; a guest second player no longer adds a 10-second wait. Relay Race works with controllers: A swaps in the next racer. The launcher's settings can all be reached with a controller. 4-core CPUs keep the main thread's core to itself, and frames over 250 ms are logged.
- v0.6.2 — Fewer freezes, START skips story scenes The race and Relay hand-over freezes of up to a few seconds are gone: the main thread no longer spins on a lock other threads hold across system calls. START skips a World Grand Prix story scene, and the results screen's Kinect Guide no longer closes the game.
- v0.6.3 — Any install folder, voices apart from text, steadier sound The game starts from a folder with non-Latin letters on Windows, and full screen works with Vulkan on Linux. Voices can be English or Japanese apart from the text. Sound keeps a short cushion against crackles, and 4-core CPUs no longer pin the main thread. The programs have an icon, and HedgeModManager can find the game and manage its mods.
- v0.6.4 — No more getting stuck at start with Multi-core execution off With the launcher's Multi-core execution turned off the game got stuck at start on every device. The switch is gone: the game's threads always run in parallel, and an old setting that turned it off is ignored.
- v0.6.5 — Index buffers kept on the GPU (test build)
Index buffers the game leaves unchanged stay on the GPU instead of being decoded and copied for every draw, and cached buffers are found without checking memory views each time. A test build for slower CPUs;
SFR_INDEX_CACHE=0turns the new cache off. - v0.6.6 — Crash records in the Android diagnostic ZIP (test build) On Android 11 and later the diagnostic ZIP now says how the game last ended, with the system's crash record (tombstone) when it crashed in native code, so a crash that leaves nothing in the log can be located. Also has v0.6.5's index cache.
- v0.6.7 — Starts on Vulkan 1.1 phones Phones whose GPU driver offers Vulkan 1.1, such as the Snapdragon 8 Gen 1's Adreno 730 on some devices, crashed at the game's first frame; the crash record from v0.6.6 showed why. Includes v0.6.5's index buffers kept on the GPU and v0.6.6's crash records. Its fix did not take effect on those phones; see v0.6.8.
- v0.6.8 — Vulkan 1.1 phones, second fix v0.6.7 still crashed at the first frame on Vulkan 1.1 phones: its check could not see that the driver lacked the function. The function is now asked of the GPU driver itself, under the name that driver's Vulkan version uses.
- v0.6.9 — Faster races on Android On phones with one core faster than the rest, the game's main thread now gets that core: on an AYN Thor a race went from 45 to about 56 fps while racing, and to 60 at the start line.
- v0.6.10 — Less GPU work under Vulkan Vulkan shaders read their constants from uniform buffers instead of through buffer addresses, which phone GPUs can load once per draw: on an AYN Thor the GPU time per frame fell from about 14.8 to 10 ms. Frame rate there is unchanged (the game's CPU side now limits it), but the GPU has more headroom. Shader packs from earlier versions do not work with it.
- v0.6.11 — A race crash on 4-core PCs Part of each race frame runs on the game's job threads, and the game waited only 16 ms for them before going on. On slower 4-core PCs a job could still be reading the racer list when the game moved on, which crashed races (Issue #64). The game now waits for those jobs to finish; the race keeps its frame rate.
- v0.7.0 — Online play The game's Xbox LIVE mode works again, on this project's own server: one player's game hosts, the others join over the network, and players on Windows, Linux and Android race together (three devices tested; the lobby holds eight). See Online play.
- v0.7.1 — Avatars online, and a sign while a model loads An online race with a player using AVATAR closed the games of the others: a game without a custom model had its avatar system off and could not load another player's AVATAR. Online play now always starts the avatar system. A custom VRM model now loads in the background, with "LOADING AVATAR MODEL" and its progress shown in the corner, instead of the game appearing to freeze.
- v0.7.2 — 4K rendering and steadier Kinect v2 Render Size now offers 3840 x 2160 (4K, 300%) beside 360p to 1440p (Issue #94). A Kinect v2's joints are smoothed the way Kinect v1's SDK smooths its own, and the launcher's Kinect settings gain smoothing, lean sensitivity and crouch depth (Issue #97).
- v0.7.3 — Pause gestures, steadier menus, and more from knuckleslee Contributions by knuckleslee: pause a race with the Kinect's Pause Gesture or a Kinect v2's Stop Sign; a steadier menu cursor for motion input; the frame rate in the window title on Windows; adjustment windows when the game asks for the Kinect troubleshooter or Kinect Guide; and a choice of save folder in the launcher.
- v0.8.0 — Ultrawide displays Races fill displays wider than 16:9 (21:9, 32:9 and beyond) with a wider view and the HUD at the screen edges; menus stay centred over a full-width backdrop, and two-player screens keep the original 16:9 picture (knuckleslee's #112–#114). The launcher gains Display Mode (Borderless or Windowed), any window size, and Render Size as a scale of the output, starting at the original 720 lines. Both players holding LT hold hands in a Tag Race, BACK swaps r