Pre-release quality. Built from
mainfor early testing and feedback. Expect rough
edges — crashes, audio glitches, and missing native translations are still the rule, not
the exception. Please open issues rather than running off the latest commit silently.
⚠️ You must supply your own ROM
This release contains no game assets or code from the original cartridge. It ships
only the recompiled executable. To play, you must obtain a legal copy of
Automobili Lamborghini (USA).z64 (the North American release is the only one
supported) and place it next to the executable before launching. See BUILDING.md
for the full instructions; in brief:
- Extract the archive for your platform into its own folder.
- Drop
Automobili Lamborghini (USA).z64into that folder. - Launch the binary.
Game saves go alongside the ROM (or under %LOCALAPPDATA%\LamborghiniRecomp on
Windows / ~/.config/LamborghiniRecomp elsewhere — see README.md).
What's working
The headline of this release is the paddock-split main menu: every launch now opens
on a logo/status rail beside Start Engine, Settings, Mods & texture packs, Controls &
players, and Quit, instead of the old window. Alongside it, Android now runs on stock
Vulkan drivers — the Adreno in a normal phone no longer needs a custom Turnip build —
and two new opt-in steering options land on the Driving tab. Nine pull requests merged, adding three new
dependency patches (0031/0032 RecompFrontend, 0033 RT64). There's still glitches so
please report issues you find.
Closed since v0.8.0:
Launcher / main menu
- #288 / PR #289 — the paddock-split launcher is now the startup screen. A logo and
status rail sits beside the menu; Start Engine routes through the startup gate and
only hides the launcher on success, Settings opens the current settings page, Mods
opens the Mods tab, Controls routes to Controls → Assign players, and Quit issues
SDL_QUIT. Redundant promotional copy is gone, the wordmark stays in the logo, and
the version is shown once.
Patch0031also fixes Windows document-source URLs, which removes the RmlUi error
that showed a red debugger beacon without suppressing debugger errors. Layouts checked
at 2560x1440, 1600x900, 800x600 and 600x900 (wrapped rows scroll Quit into view);
captures are in docs/recompfrontend.md. #288 stays open pending
physical-controller acceptance.
Android / driver compatibility
- PR #294 — Android boots on drivers without
VK_EXT_descriptor_indexing, which is
every stock 2020-era Adreno driver. The port previously refused to start unless Turnip
was installed. Patch0033gives RT64's texture table a fixed 8192-slot mode when the
device lacks descriptor indexing: empty, released and last frame's slots point at a
cleared 1x1 placeholder, and oneusesBoundlessRangehelper keeps the live set and
both pipeline-layout sites in agreement so the layouts always match what is bound.
Patch0013now only requires scalar block layout, which RT64's shared buffer layouts
genuinely need. Verified on a Redmi K30 Pro / POCO F2 Pro (Snapdragon 865) with its
stock driver4783c89(Vulkan 1.1.128) — title screen and attract races on three
tracks, ~24-30 fps, with no texture descriptor set errors under the Khronos validation
layer. Turnip still works and is now optional. Details in docs/ANDROID.md and
patches/README.md.
Steering
- #147 (guest side) / PR #295 — two new Driving-tab options, both defaulting to the
game's own behaviour: a configurable game steering deadzone and a direct steering
response. Two hooks in the steering updaterfunc_80019D20replace the ROM's fixed
4-unit trim (deadzone) and its per-difficulty slew limits (direct). With the defaults,
the car trace is
byte-identical to a build without the hooks; with direct mode on it differs in 207 of
591 player-one updates at deadzone 4. Settings are indriving-controls.json, not
graphics.json, andLAMBO_STEERING_DIRECT,LAMBO_STEERING_DEADZONEand
LAMBO_STEERING_TRACEsupport headless runs. Player one only. #147 stays open for the
host-side follow-ons in #140 / #141. Full chain, limits and evidence in
docs/steering.md.
Settings / frontend fixes
- #256 / PR #292 — the settings overlay's Quit and Close buttons are clickable
again. When tab labels were wider than the modal, the header laid the right side past
the modal edge and those buttons could not be reached at all. RecompFrontend patch
0032gives the tab sideflex 1 1 0withmin-width 0, keeps the right side at
flex-shrink 0, and lets tab labels wrap onto further rows. Focus order and tab
switching still follow the tab list, not its rows.
Developer tooling (now ships in the binary)
- #280 / PR #293 —
lambo_frontend_settingsno longer fails when a physical gamepad
is plugged in. The fixture assigned the real pad to player one before attaching its
virtual controllers. Isolation is now set inside the test process beforeSDL_Init
(HIDAPI, RawInput, XInput and DirectInput disabled, plus
SDL_GAMECONTROLLER_IGNORE_DEVICES_EXCEPTfor backends with no disable hint), using
SDL_HINT_OVERRIDEso a developer's own SDL variables cannot re-admit a pad. Game runs
are unaffected; docs/testing.md no longer asks for manual PowerShell setup. - #155 / PR #308 — the vendored zstd benchmark and fuzz tests no longer land in a
defaultctestrun, where four of them timed out.ZSTD_BUILD_TESTSnow defaults to
OFFbefore configuring RT64, with an explicit opt-in still adding exactly those four
tests and reconfiguration preserving the choice. - #228, #229 / PR #309 — the mod smoke checker now accepts
--texture-packageand
validates an RTZ texture pack before launch: it stages the container's bytes
unchanged in an isolated profile and requires the exact mod-load message plus guest
startup. Previously an unregistered texture-pack container could go unnoticed while the
game still booted. The docs now record filename-derived metadata, loose-directory game
IDs, and the difference between direct RT64 loading and mod loading — including that a
readable stored or deflated embedded manifest is parsed, while a zstd-compressed
manifest cannot be extracted by the mod loader and falls back to generated metadata.
Project / developer docs
- #307 / PR #310 — added
.recomp.json, the machine-readable project
description from the recomp.board specification. Lists of recomps read this file
instead of inferring the project from a README, which is how the board row ended up
with an unknown status and no toolchain. Status isreleased; the pre-1.0 state, the
experimental Android target and the USA-only ROM are recorded innotes. - #311 / PR #312 — CONTRIBUTING.md now says that a change which moves a public
claim (a release target, a support limit, the project status) updates.recomp.json
in the same change. The specification holds that a stale file is worse than none,
since it speaks with the project's own authority.
Contributors
This release is the first to include work from a new contributor, and it is most of it.
-
@grahamf-c — five merged pull requests, all in this release: the settings-modal
layout fix (#292), the physical-controller test isolation (#293), the steering deadzone
and direct-response options (#295), the zstd test exclusion from default runs (#308),
and the RTZ texture-pack coverage in the mod checker (#309). Each came with a measured
claim and the commands to reproduce it, and #295's numbers — a byte-identical car trace
at default settings, 207 of 591 updates differing with direct mode on — are the kind of
evidence that makes the next change easier to trust. They also maintain a fork of the
project. Welcome, and thank you. -
@alondero — the paddock-split launcher, the Android descriptor-indexing fallback,
.recomp.json, and the contributor rule above.
What's not done yet
This is still pre-1.0 — plenty of force_stub.txt still includes real game primitives
rather than no-ops. The tracker is the canonical "what's next" list.
Known gaps that this release does not close:
- #140 / #141 — the steering work here is the guest side only. Host-side stick
shaping and smoothing are deliberately left out, and they raise an open design
question: whether these settings belong per controller profile or globally for player
one. Direct mode keeps the game's own curve, so full lock is still 25 (Novice) or 35
(Expert) — the car turns sooner, not harder. - #282 — ray-traced sun shadows are still validated on a narrow slice of the car and
circuit grid; validating cars 1-23 across circuits 2-6 is open. #281 tracks the wider
map and #283 tracks telling the player when the shadows are enabled but inactive. - #291 — the RmlUi debugger beacon is still not gated behind a developer option.
Patch0031removes the error that triggered it, but the gate itself is open. - #288 — launcher physical-controller acceptance is still outstanding; the host tests
cover virtual controller and menu bindings, which does not substitute for a physical
pad check. #290 (making the paddock launcher Android's default start screen) is
also still open.
If you find a crash, please open an issue with lamborghini_crash style notes:
- Output window text (or the
crash-*.txtdump if the native handler caught it) - Commit / build provenance (below)
- Approximate in-game location (title screen / car-select / race lap 2 / etc.)
How to run
Linux
unzip lamborghini-recomp-linux-x64.zip -d lamborghini-recomp
cp "Automobili Lamborghini (USA).z64" lamborghini-recomp/
./lamborghini-recomp/lamborghini_modernRequires libsdl2-2.0-0 and a Vulkan-capable GPU + driver at runtime. Most
desktop distros ship these already.
Windows
Extract lamborghini-recomp-windows-x64.zip anywhere, drop your ROM in the same
folder, and double-click lamborghini_modern.exe. The bundled SDL2.dll,
dxcompiler.dll, and dxil.dll must stay alongside the EXE.
F11 / Alt+Enter toggles fullscreen (and remembers the choice next launch).
Build provenance
- Commit:
cefbde5(main, 2026-10-13) - Workflow run: #38451923452 (Build & Release, dispatch from this SHA)
- Toolchain: Linux build on
ubuntu-latestwith gcc / cmake / ninja /
libsdl2-dev/libvulkan-dev. Windows build onwindows-latestwith
MinGW-w64 GCC + Ninja (PowerShell, not MSYS bash) per the project's toolchain
notes.
If you'd rather build it yourself from source instead of running a pre-built
binary, see BUILDING.md. For graphics settings, see README.md.