Skip to content

Releases: alondero/automobililamborghini-recomp

Automobili Lamborghini Recompiled v0.6.2

Choose a tag to compare

@github-actions github-actions released this 27 Aug 13:05
8fa0b23

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

Note: see the v0.6.0 release notes
for full information on what's in this release line — the new launcher, chase-camera
controls, FOV boost, and analogue throttle/brake. Those features are unchanged here.

This is a small follow-up to v0.6.1
with two changes: the window came up oversized on Windows machines running with display
scaling (the 175% panel-scaling case in particular), and Alt+F4 could hang the game
on shutdown. Both are fixed here — if 0.6.0 or 0.6.1 wouldn't start, or wouldn't quit
cleanly, 0.6.2 should
. There's still glitches so please report issues you find.

Closed since v0.6.1:

Stability / Windows compatibility

  • #161 / PR #162 — The game window now opens at the correct size on Windows machines
    running with display scaling. The process had no DPI-awareness declaration anywhere
    (no manifest, no SetProcessDpiAwareness* call), so DWM bitmap-stretched the
    windowed-mode window by the system scale factor — at 175% scaling the default
    1600×900 window rendered at ~2800×1575 physical pixels and overflowed a 1080p
    display; only Alt+Enter (fullscreen-desktop) recovered. The build now embeds an
    application manifest declaring PerMonitorV2 DPI awareness (with the legacy
    True/PM fallback for pre-Win10-1703), wired in via src/app.manifest,
    src/lambo_manifest.rc, and a Windows-only windres step in CMakeLists.txt.
    No code changes; non-Windows builds are untouched. Empirically verified via
    GetWindowDpiAwarenessContext — awareness level now reads 2 = PerMonitorV2
    (was 0 = Unaware before this change).

Stability / shutdown

  • #163 / PR #164Alt+F4 (and the window-close button) now shut the game down
    cleanly. The previous path tore down RmlUi from the SDL quit handler while RT64
    could still render it, producing the freeze seen in #163. The shutdown order is
    now sequenced so the UI bridge is dropped before the SDL quit handler runs, and
    immediate process termination is retained for the live runtime thread model. A
    regression guard (tests/test_quit_path.py) exercises both the SDL quit and
    window-close routes and is wired into the CI test set.

Automobili Lamborghini v0.6.1

Choose a tag to compare

@github-actions github-actions released this 25 Aug 17:50
1fc671c

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

Note see the v0.6.0 release notes for more details on this release.

This is a small follow-up to v0.6.0 with two changes: v0.6.0 failed to start on some
Windows machines, and that's fixed here — if 0.6 wouldn't launch for you, 0.6.1 should.
The other change is quality-of-life: Player 1's name now persists across launches.
There's still glitches so please report issues you find.

Closed since v0.6.0:

Stability / Windows compatibility

  • #158 / PR #159 — Fixes the "Failed to allocate memory!" startup crash reported on
    Windows (v0.6.0 only; v0.5 was unaffected). The runtime asked Windows for the full 4 GiB
    guest address range with MEM_COMMIT | MEM_RESERVE, which consumes pagefile commit budget
    even though only 512 MiB is ever touched — machines with ample RAM but a constrained
    commit limit failed at launch. The range is now reserved without eager commitment, and
    only the accessible prefix is committed. A regression test runs under a 1 GiB process
    commit limit as part of the Windows release build flow.

Quality of life

  • PR #160 — Player 1's confirmed name from the name-entry screen is now saved to
    player.json and re-seeded when the name editor opens next launch, instead of starting
    blank every run. Covered by focused save/reload tests hooked in at the verified
    name-editor seams.

Automobili Lamborghini Recompiled v0.6.0

Choose a tag to compare

@github-actions github-actions released this 24 Aug 21:29

What's in this release

This release focused on some quality of life improvements.

Menu and Configuration Overlay

Configuration options can now be modified from the menu bar directly, or pressing the 'Options'/'Select' button on a game controller brings you into a (very basic!) controller controlled config overlay. Most options will take effect immediately

New Chase Cam view

The original game had a poor feeling of speed, some new configuration options introduced in this version allow you to modify the position of the camera and increase the Field of View to show a wider perspective. Together this should make a big difference to your adrenaline!

After (v0.6.0 enhancements) Before (stock ROM)
race 5 — stock camera and fog race 5 — chase camera closer + lower, FOV +15°, fog x1.4

Reduced Pop-In

There was occasional pop-in and in previous versions caused by an increase of view cone generally from widescreen. This should now be fixed. Feel free to try out the 'increased draw distance' and 'track draw' options - these do introduce scenery that wasn't intended by the developers to be seen however.

Analogue Acceleration and Braking

Configurable through the controls overlay you can turn on analogue acceleration and braking by mapping this to controller axes.

Stability and quality of life around the existing systems:

  • PR #146 closes #145 — Championship season-end save was looping on "Controller Pak changed" because the SI bridge was forcing the guest Rumble Pak-present flag on every frame while also presenting a valid Controller Pak. The flag is now kept truthful; rumble runs through native overrides of the game's own request path, so the save flow completes and in-game rumble still works.

There are still glitches (some are listed under "What's not done yet" below)


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, widescreen (including HUD) support
across all race modes, N64 Rumble Pak support, and the in-game configuration overlay.

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).

For v0.6.0's new knobs: press the controller Menu / Back / Guide button, or
Esc / F1 on the keyboard, to open the in-game configuration overlay and try the
Visual Enhancements presets:

  • Chase camera distance (default 1.0; suggested 0.65 – 0.75)
  • Chase camera height (default 1.0; suggested 0.66)
  • Field of view boost (default 0°; suggested +10°)

Suggested starting point (matches what this release was tested against):
distance 0.7, height 0.66, fov_add +10. The same knobs live under
graphics.json (camera_distance_scale, camera_height_scale,
camera_fov_add) and accept env-var overrides (LAMBO_CAMERA_DISTANCE_SCALE,
LAMBO_CAMERA_HEIGHT_SCALE, LAMBO_CAMERA_FOV_ADD).

The v0.5.0 pop-in knobs (draw_distance, draw_distance_circuit[6],
no_lod_circuit[6], fog_scale, fog_scale_circuit) are still there — turn
fog_scale up to match a wider FOV if the periphery starts to dissolve.

Build provenance

  • Commit: 487d545 (main, 2026-08-24)
  • Workflow run: see this release's commit status (CI dispatched from this SHA)
  • Toolchain: Linux build on ubuntu-latest with gcc / cmake / ninja /
    libsdl2-dev / libvulkan-dev / libfreetype-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.

Automobili Lamborghini Recompiled v0.5.0

Choose a tag to compare

@github-actions github-actions released this 24 Jul 07:37
2446cb3

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, plus N64 Rumble Pak support. The headline of this release
is distance pop-in is gone: a four-PR series (#119#122#123#124) traced the
remaining world pop-in to two mechanisms the earlier audits missed — the per-circuit
N64 fill-rate radius cull (worst on the city track: a whole city block popping in at the
35000-unit edge) and a camera-segment visibility list that silently dropped entries
past the first -1 hole. New graphics.json knobs let you tune the radius (draw_distance,
default 1.5× authored; draw_distance_circuit[6] per-track multiplier), the per-track
synth (no_lod_circuit[6], with pro tracks shipping off by default to preserve the
N64-authored look), and fog density (fog_scale, fog_scale_circuit). There's still
glitches so please report issues you find.

Closed since v0.4.2:

Distance pop-in (no_lod series)

  • #87 follow-up / PR #119 — The remaining city-track distance pop-in is fixed. The
    scene builder func_8000A6C0 was distance-culling every PVS entry against a
    per-circuit radius table at 0x80088FD0 — the city track's 35000-unit budget was
    authored shortest, so segment 31 sat ~51k units down a long street and popped in at
    the edge. A per-frame [[patches.hook]] on 0x8000CD3C rewrites the 30 radii to
    1e9 (per-frame because savestate restore brings the ROM values back). Authored
    visibility lists are untouched — segments the game already streamed just stop being
    hidden. New offline audit: tools/pvs_distance_audit.py (replays the builder's exact
    test arithmetic from a LAMBO_RACE_DL_DUMP snapshot).
  • PR #122 — Even with the radii lifted, segments not in the camera's authored
    10-slot visibility row never drew. Two data-model fixes: PVS rows are 10 fixed slots
    with -1 holes (not terminators), and the segment count is (header+0x8 − header+0x4) / 20 — circuit 5 has 55 segments, not 42. Three patches.hooks widen
    the existing walk to synthesise an all-segments row (authored entries first). New
    fog_scale / fog_scale_circuit ride the existing #83 fog DL-walker to scale fog
    alpha without moving its authored onset distance.
  • PR #123draw_distance becomes a dial, not a switch. Default is 1.5× the
    authored per-circuit radii (the worst measured pop needs ≥1.46×); 0 reverts to
    the old unlimited behaviour, 1.0 reproduces N64 distances. Per-circuit
    draw_distance_circuit[6] multiplies with the global. Multiplier-not-absolute
    preserves the authored per-mode budget ratios (1P radii stay longer than 2-4P).
    LAMBO_DRAW_DISTANCE env override for capture.
  • PR #124 — Ship-safe default: no_lod_circuit[6] adds a per-circuit PVS-synth
    gate. Pro tracks (3-5) ship with the synth off to preserve N64-authored back-
    of-buildings / floating geometry the radius cull was hiding; basic tracks (0-2)
    ship with the modern pop-in fix. Radius cull and 2P+ scenery sub-DL stay gated on
    the global no_lod() so distance culling and 2P scenery work on all 6 tracks.
    New docs/TRACK_INDEX.md is the authoritative 0-based / 1-based / F-key / basic-
    pro map.

Stability

  • PR #118 — Pit-stop flicker is fixed, and so is the related cold-load crash from
    LAMBO_STATE_LOAD straight into a pit-stop savestate. The widescreen HUD bracket
    reset hooks sat on recompiled branch labels that run on every incoming path;
    the pit-stop screen bnes straight past the draw and its pin, so every pit frame
    emitted an unpaired G_EX_POPSCISSOR (scissor-stack corruption) and ran the matrix
    walker over a stale span (needle/arrow shift toggled shifted/unshifted per frame —
    the flicker). Cold-load with bracket_start=0 crashed patch_load_mtx_dx 8/8.
    One module-wide bracket flag now arms on every pin and disarms on every reset; the
    quad-text bracket pair (pin_leftquad_text_end) keeps its existing pairing.
    Covered by tests/test_hud_bracket_pairing.c (cold-start reset no-op, paired
    needle shift still exact, pit-path unpaired resets leave scene matrices untouched).
  • #116 / PR #117 — The Championship-standings "Done" button and the second
    button of the pak/records confirm dialogs are no longer dead. The menu system
    dispatches per-screen actions via function pointers in static per-screen element
    tables (0x801EB320, handler at record+0x4); because they're never jal'd, splat
    truncations produced silent no-ops instead of build errors. Whole-ROM sweep for
    data pointers landing on empty-bodied recompiled functions found exactly these
    two — the class is now closed. Standard SPLIT_MERGES + UNSTUB fix (func_80041538
    and func_8004EF0C); absorbed tails have zero independent jal/data callers. PR
    also fixed a generator-sync drift: PATCH_BLOCKS and NATIVE_OVERRIDES now carry the
    hand-edits to lamborghini.us.toml so regeneration is byte-clean (the #78 quad-
    HUD hooks + the PR #108 rumble ignored entries).

Developer tooling

  • PR #120 — Default boot is silent. The same lines that used to print one per
    VI heartbeat (and several on each transition) now only emit when the binary is
    started with --lambo-debug. 99 fprintf sites converted across 7 files behind
    a lambo_log_enabled bool in src/lambo_log.h; the [rt64] and [gfx]
    heartbeats wrap their whole if-blocks so the VI-reg read + interpolatedMutex
    lock also short-circuit on a default boot (not just the inner fprintf). Crash
    dumps ([crash] tag) and the opt-in env-var features (LAMBO_PAK_TRACE,
    LAMBO_DL_INSPECT, ...) are NOT routed through the gate — they were already
    opt-in via env var or only fire on actual signal/SEH. In a 1800-VI headless run:
    default boot = 2 lines, --lambo-debug = 69 lines. main.cpp skips argv entries
    starting with - when finding the ROM path so lamborghini_modern --lambo-debug path/to/rom.z64 works.
  • PR #115 — A new /release slash command (.claude/skills/release/)
    captures the tag → dispatch → wait → verify → ship-notes flow with five
    deterministic bash scripts (list-changes, tag-and-dispatch, wait-for-build,
    verify-release, update-notes) and three reference docs (gotchas, prior-release-
    format, release-notes-template). disable-model-invocation: true keeps the agent
    from auto-triggering — releases stay deliberate.

CI / build

  • PR #121 — Fresh CMake configures were failing during the directx-headers
    FetchContent step (git.exe: add_item failed, errno 1; Git_VERSION=''). Root
    cause: devkitPro's MSYS2 git.exe sat ahead of Git for Windows on PATH and its
    Cygwin heap can fatal outside its own shell. build.ps1's toolchain-PATH step
    now auto-discovers native Git for Windows and prepends it; verifies git.exe
    in the [tools] check and warns if git still resolves to MSYS/Cygwin.

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 follow-ups carried over from prior releases:

  • #26 epic / Widescreen HUD residual gaps — quad-mode skybox / fog / minimap
    pinning is solid in 2P-4P; a few residual cases (the needle/arrow scale keyed off
    the effective rect-pin aspect can over-scale at extreme ultrawide) are tracked.
  • #88 / #91 — lights-match in 3P+ viewports still open from the no_lod audit;
    pop-in is gone but 3P+ scene lighting doesn't always match the 1P baseline.
  • Texture tooling PRs (#99, #66) still open — xBRZ HD-pack batch tooling and
    font upscale / vector re-render tools are staged but not yet merged.

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).

For the new pop-in / fog knobs: edit graphics.json (created on first run) and look
for draw_distance, draw_distance_circuit, no_lod_circuit, fog_scale,
fog_scale_circuit. The shipped defaults match what...

Read more

Automobili Lamborghini Recompiled v0.4.2

Choose a tag to compare

@github-actions github-actions released this 12 Jul 18:42
03e533a

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, plus N64 Rumble Pak support. This is a small follow-up
to the v0.4.1 Intel driver advisory (#110): where v0.4.1 shipped a manual escape hatch
that required editing graphics.json, v0.4.2 makes the fix automatic for modern
Intel
— affected users no longer need to take any action. There's still glitches so
please report issues you find.

Closed since v0.4.1:

Stability / driver compatibility

  • #109 follow-up / PR #113 — Modern Intel GPUs (Iris Xe / Arc) now stay on D3D12
    automatically — no graphics.json edit needed. v0.4.1's patch 0010 only worked
    when the user manually set "api_option": "D3D12"; two more users hit the silent
    black-screen wall before finding the workaround, so this makes it the default. The
    Intel force-Vulkan fallback in RT64 was originally written for 6th-gen HD Graphics
    (which device-remove on D3D12), but it was wrongly catching Gen12 Xe / Arc
    (where D3D12 works fine and it's Vulkan that loses the device). Patch 0010 is
    narrowed to exclude any device whose name contains Xe or Arc — they now keep
    D3D12 by default. Genuine 6th-gen parts still get the Vulkan fallback so there's
    no regression. Two smaller companion changes:

    • Setup-retry: if the renderer was started with an explicit api_option and
      that backend fails to initialise, RT64 now tries the other Windows backend
      once before giving up (it already self-retried for Auto).
    • Name-aware advisory severity: the GPU advisory popup is now device-name
      aware. Modern Intel stuck on Vulkan raises the SEVERE popup (the #109 black
      screen); a 6th-gen part correctly on Vulkan is INFO — no scary popup for a
      case that's actually working.

    LAMBO_FAKE_GPU still works for end-to-end testing without an Intel box.
    README troubleshooting reflects the new automatic behaviour.

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 follow-up: a user who explicitly sets "api_option":"Vulkan" on an
old-driver Iris Xe still hits runtime device-loss (setup succeeds, then
vkQueueSubmit fails mid-render). The default-config path is fully covered by the
narrowing, and that explicit-Vulkan combo still gets the SEVERE advisory popup
instead of a silent black screen — but a full fix needs deeper RT64
present-queue surgery. Tracked in #114.

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: 03e533a (main, 2026-07-12)
  • Workflow run: #29203966918 (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.

Automobili Lamborghini Recompiled v0.4.1

Choose a tag to compare

@alondero alondero released this 12 Jul 15:58
1f489fb

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.

Automobili Lamborghini Recompiled v0.4.0

Choose a tag to compare

@github-actions github-actions released this 10 Jul 09:20
5e07da1

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. The headline of this release is 3- and 4-player split-screen: the 2×2
quadrant views used to be pillarboxed with dark side bars, and now each quarter fills
its slice of a wide monitor — with the per-quadrant HUD text, minimap, fog, and sky all
tracking the wide frame. This release also fixes a boot crash that stopped the game
launching at all on some machines (see #80 below). There's still glitches so please
report issues you find.

Closed since v0.3.0:

Widescreen — 3P/4P split screen

  • PR #79 — 3P/4P multiplayer split now renders as full-width quadrant viewports.
    RT64's Expand only widens a viewport that spans the whole framebuffer, so each
    quarter previously stayed 4:3 and the composite was pillarboxed with dark side bars;
    the quadrants are now tagged so each fills its output quarter with a Hor+ widened FOV.
  • #78 / PR #94 — Per-quadrant HUD text (position, lap, time, rank, etc.) is now
    pinned inside its own quarter instead of drifting toward the screen centre.
  • #84 / PR #89 — The sky panorama is now drawn in 3P/4P (the quadrants were
    rendering a flat dark sky instead of the backdrop).
  • #83 / PR #86 — The dense fog band at the 3P/4P split edges is widened to match
    the 1P window and colour.

Widescreen — skybox

  • #3 / PR #77 — Renderer-side rewrite of the widescreen skybox: parallax-free
    backdrops now stretch to fill the wide frame on every presented frame, fixing a hard
    black gap visible at 21:9 when the race is paused. This supersedes the v0.3.0 ROM-hook
    approach, which only ran while the game's frame loop was running (so a frozen/paused
    frame left the sky at 4:3).

Stability

  • #80 / PR #82 — Boot no longer dies on benign exceptions. The native crash handler
    was intercepting harmless first-chance C++ throws and guard-page hits raised by some
    NVIDIA / XInput driver DLLs and force-exiting before the window even appeared. It now
    acts only on genuine fatal CPU faults. If an earlier build refused to launch on your
    machine, try this one.

Release packaging / CI

  • #81 / PR #81 — Release zips now ship lamborghini.syms.toml, so when the crash
    handler catches a fault the report resolves guest addresses to function names instead
    of raw N64 PCs. The Windows packaging step also now fails the build loudly if a
    required runtime DLL (SDL2.dll, dxcompiler.dll, dxil.dll) is missing, instead of
    shipping a zip that crashes on the user's machine at startup.

Project / developer docs

  • PR #76 — Added CONTRIBUTING.md plus issue and pull-request templates.
  • #88 / PR #90 — Developer no-LOD audit documenting which level-of-detail mechanisms
    actually exist in the race scenes (developer-facing; no runtime change).

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: 5e07da1 (main, 2026-07-10)
  • Workflow run: #29082039804 (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.

Automobili Lamborghini Recompiled v0.3.0

Choose a tag to compare

@alondero alondero released this 09 Jul 06:24
9bef7dc

Pre-release. 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. Since v0.1.0 the widescreen treatment has been extended across all race
modes
(1P arcade, 2P split-screen, time trial, alt-dial style), and the skybox,
lens flare, and HUD geometry now track the wide frame across every height-ratio
option (Clamp16x9, Full, Original). There's still glitches so please report
issues you find.

Closed since v0.1.0:

Widescreen graphics

  • #3 / PR #53 — Skybox background frustum now rebuilds its aspect ratio per
    frame (it was hardcoded to 4:3, leaving gaps at the wide edges under
    ar_option: Expand).
  • #40 / PR #65 — Sun lens flare stretches across the full widened frame
    instead of being cropped at the 4:3 boundary.
  • #42 / PR #55 — HUD edge-pinning extended to 2P split-screen (per half),
    time trial, and the alternate dial style.
  • #56 / PR #75 — 2P minimap pinned to each half's left edge under
    widescreen.
  • #67 / PR #70 — HUD geometry (rev needle, minimap player arrow, minimap
    track outline) now tracks the effective rect-pin aspect, so it stays glued
    to the rect pins across Clamp16x9 / Full / Original height-ratio options
    (the previous hardcoded 16:9 magnitudes detached from the rects on ultrawide
    monitors).

Developer tooling (now ships in the binary)

  • #12 / PR #48 — Developer warp menu: F1–F6 jumps to circuits 1–6 from
    anywhere after boot (attract, title, menu, mid-race); LAMBO_WARP= circuit[:laps[:car[:players]]] does the same on cold boot, reaching a race
    in ~2.5 s instead of ~37 s through the attract cycle. These are debug keys —
    ignore them unless you're reproducing a track-specific issue.
  • #22 / PR #59 — Developer save-state: F7 saves / F8 loads a snapshot of
    guest RDRAM for deterministic debug repros (LAMBO_STATE_LOAD=<file> on
    cold boot lands on the exact spot). Heads-up: park and wait for the scene to
    fully load before F7 — a snapshot taken while the asset thread is still
    streaming restores RAM under it mid-job and can crash on load. The normal
    Controller Pak save system is unchanged.

CI / build

  • #61 / PRs #62, #63, #64patches/0007 (savestate thread-context relink,
    required by the save-state above) is now wired into both CI build jobs;
    build.sh / build.ps1 are the single source of truth for the build
    sequence, eliminating drift between local and CI builds.

Texture tooling (developer-facing)

  • #50 / PR #57tools/decode_dump.py: CI4/CI8 textures now decode with
    correct colours and no shear. Root cause was a TLUT byte-order bug — RT64
    stores 32-bit words byte-swapped in RDRAM (A ^ 3), which the decoder now
    honours.

What's not done yet

This is a pre-release — 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: 9bef7dc (main, 2026-07-09)
  • Workflow run: #28996890290 (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.

Automobili Lamborghini Recompiled v0.1.0

Choose a tag to compare

@alondero alondero released this 06 Jul 13:24

Pre-release. 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. There's still glitches so please report issues you find.

Closed since the last release:

  • #30 / PR #34 — Wheels no longer ghost / jump forward under RT64 frame
    interpolation in the face-on replay view.
  • #35 / PR #37 — Controller Pak save records now actually issues a write
    (the whole osPfs file-op layer was force-stubbed; eleven functions un-stubbed).
  • #31 / PR #36 — Controller Pak no longer reports corrupted in-game.
  • #2 / PR #39 — Per-element widescreen HUD pinning (via gEXSetRectAlign).
  • #41 / PR #43 — Minimap (outline, dots, arrow, P1 marker) pinned to the left
    edge in 16:9 instead of being squeezed offscreen.
  • #32 / PR #44 — Menu cursor ring and left/right selection arrows restored on
    the car-select screen.
  • #4 / PR #38 — Texture LOD NOP instruction landed, removing a stub that
    crashed on certain surfaces.
  • #46 / PR #46 — Build tolerates submodule CRLF and Linux build no longer
    attempts to compile the Win32-only path.
  • #47 / PR #47 — Hardcoded alt-stack size (glibc SIGSTKSZ is non-constant
    on some distributions; this keeps the crash handler's stack-overflow recovery
    working).

What's not done yet

This is a pre-release — 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: 6f3e7d9 (main, 2026-07-06)
  • Workflow run: #28778465982 (Build & Release, dispatch #4 for 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.