github alondero/automobililamborghini-recomp v0.4.1
Automobili Lamborghini Recompiled v0.4.1

latest releases: v0.5.0, v0.4.2
one month ago

Pre-release quality. Built from main for 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:

  1. Extract the archive for your platform into its own folder.
  2. Drop Automobili Lamborghini (USA).z64 into that folder.
  3. 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 native osMotorStart / osMotorStop stubs 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=1 logs [pak] MOTOR START/STOP ch=N for 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 of vkQueueSubmit 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" in graphics.json (full path shown). An accompanying
    patch (0010) makes the escape hatch real — RT64's Intel workaround was
    unconditional and was overriding an explicit api_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 < 2 gate 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 a graphics.json key no_lod
    (default true, LAMBO_NO_LOD=0/1 env 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=0 produces 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.md addendum records the audit's corrected
    classification of the builder.

Developer tooling

  • #87 follow-upLAMBO_RACE_DL_DUMP_AT="n1,n2,..." dumps the walked frame DL
    • RDRAM at exact send_dl counts (pairs with LAMBO_STATE_LOAD for deterministic
      around-the-pop diffs). This is what surfaced the missing scenery DLs in the
      first place.

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-*.txt dump 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_modern

Requires 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-latest with gcc / cmake / ninja /
    libsdl2-dev / libvulkan-dev. Windows build on windows-latest with
    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.

Don't miss a new automobililamborghini-recomp release

NewReleases is sending notifications on new releases.