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
Game is playable, with upscaled resolution, high FPS, and widescreen (including HUD)
support across all race modes. The headline of this release is N64 Rumble Pak
support: the ROM's per-frame PWM rumble engine now drives SDL pad rumble at the
moments ares rumbles (with the Controller Pak save flow intact in the same session).
Two follow-up fixes round out this release — an outdated Intel GPU driver guard
that turns a silent black screen into a popup with the exact fix, and a 3P
multiplayer pop-in fix that draws the per-segment far-scenery layer in 2P-4P the
way 1P already did. There's still glitches so please report issues you find.
Closed since v0.4.0:
Rumble
- #101 / PR #108 — N64 Rumble Pak now rumbles the SDL controller in a real race.
The ROM issues raw SI motor frames through a custom start/stop pair (audit in
#102 / PR #107 — the ROM carries a complete per-frame PWM engine with per-channel
intensity, every link in the chain is emitted and reachable). The port now forces
the rumble-present flag and runs nativeosMotorStart/osMotorStopstubs that
catch the writes and drive SDL directly — Controller Pak saving continues to
work in the same session with no user pak-prompt interaction required.
LAMBO_PAK_TRACE=1logs[pak] MOTOR START/STOP ch=Nfor end-to-end verification
(a 1P arcade run logged 79 motor-start / 2395 motor-stop events on ch0 alongside
26 controller-pak write frames and a 32 KB .mpk flush). See
docs/rumble-triggers.md for the trigger map.
Stability / driver compatibility
- #109 / PR #110 — Outdated Intel GPU drivers no longer black-screen silently.
On Intel Iris Xe at or below RT64's known-broken driver threshold (31.0.101.2115)
running on Vulkan, RT64's old-Intel workaround was forcing the renderer onto a
Vulkan path that immediately lost the device (VK_ERROR_DEVICE_LOST) — leaving
the user staring at a black window with a console full ofvkQueueSubmit failed.
v0.4.1 reads the live device description at startup and, if it sees the broken
combo, raises an SDL popup naming the exact driver version (decoded from the
packed value) and showing both fixes: update the driver, or set
"api_option": "D3D12"ingraphics.json(full path shown). An accompanying
patch (0010) makes the escape hatch real — RT64's Intel workaround was
unconditional and was overriding an explicitapi_option: "D3D12", so even
users who tried the fix got the same black screen. The workaround is now gated
on the API choice being automatic (same pattern RT64 already uses for its
NVIDIA and AMD RDNA3 workarounds).LAMBO_FAKE_GPU="8086,1e00000065057c"
replays a reported machine's device on any box for testing.
Widescreen / multiplayer
- #87, #91 / PR #112 — 3P multiplayer pop-in / short draw distance is fixed.
The scene DL builder draws each track segment as up to three sub-DLs (road,
walls, far scenery — distant canyon relief, trees, trackside structures); a
players < 2gate in the segment loop and the camera's own segment was
silently skipping the scenery emit in 2P-4P. With the v0.4.0 fog-match widening
the near-black variant-2 fog, the missing distance became visible as the
scenery simply never drawing. v0.4.1 adds agraphics.jsonkeyno_lod
(default true,LAMBO_NO_LOD=0/1env override) and two[[patches.hook]]
branch guards that route the gate through a native helper so every mode takes
the branch the way 1P does.LAMBO_NO_LOD=0produces a frame pixel-identical
to the v0.4.0 binary (clean off-switch, and proves the hook is the only
behavioural change). 4P warp-race shows scenery in all quadrants with no DL
corruption.docs/no_lod_audit.mdaddendum records the audit's corrected
classification of the builder.
Developer tooling
- #87 follow-up —
LAMBO_RACE_DL_DUMP_AT="n1,n2,..."dumps the walked frame DL- RDRAM at exact send_dl counts (pairs with
LAMBO_STATE_LOADfor deterministic
around-the-pop diffs). This is what surfaced the missing scenery DLs in the
first place.
- RDRAM at exact send_dl counts (pairs with
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.
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:
1f489fb(main, 2026-07-11) - Workflow run: #29198294316 (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.