GoldenEye 007 PC Port
GoldenEye 007 PC Port is a community source port of GoldenEye 007 that runs on Windows and Linux.
- Type: PC port
- Game: GoldenEye 007
- Runs on Windows and Linux
- By jkdansereau
- Latest release v0.5.0, 2026-10-07
- Source: https://github.com/jkdansereau/goldeneye-pc-port
- Website: https://jkdansereau.github.io/goldeneye-pc-port/
README
GoldenEye 007 PC Port
GoldenEye 007 (Nintendo 64, 1997) as a native PC game for Windows, Linux and Steam Deck. Native widescreen, a steady 60 fps, 2–4 player split-screen, mouse and keyboard or a modern controller, rebindable controls and an in-game options menu. No emulator, and not a binary recompilation: the game's own reconstructed C, rebuilt from the GoldenEye 007 decompilation, compiled for your PC and running from your own ROM.
Download the latest release, then follow the Quick start.
Quick start · Controls · Features · Settings and files · Troubleshooting · Roadmap · Building · Legal
Important
You must supply your own GoldenEye 007 ROM. This repository and its downloads contain no Nintendo code or assets, and no ROM. See What's a ROM? and Legal.
v0.5.0 is the current release. It is a pre-1.0 release, not a finished product: the campaign and split-screen multiplayer play end to end, but expect missing pieces (PAL/JP ROMs, macOS) and the occasional breaking change between versions. v1.0 is the target for a feature-complete build.
AI disclosure: this port was developed using AI coding agents (Claude Code and a local open-weight model), directed by one person in their spare time. The project is as much a study of that process as it is a port. See How it was made.
All in-engine, running in the port: a ~29 s montage from live
v0.5.0 play sessions (the Facility intro, auto-aim in the Archives,
the crosshair options and the Dam sniper rifle, Silo, a 2-player rocket kill,
the Facility bathroom, the Dam ending) ·
14 stills in the project index
News
- 2026-10-07 — v0.5.0 (release notes), the first release
since v0.4.0; it includes the v0.4.1 work, which was never published on
its own:
- 2–4 player split-screen multiplayer on every multiplayer map, each player with their own pad, controls and aim settings.
- One options menu for every setting, laid out like the Perfect Dark port's, with the game's own crosshair as the mouse pointer. Pick the game's own N64 control styles (1.1–2.4) per player, or the Xbox release's presets with per-player pad rebinding; PlayStation and Nintendo pads show their own button names.
- Closer to the N64: fog and haze (Surface 2's ground fog, the sky at the horizon), automatic-weapon fire rate, sniper and camera zoom, Dam and Caverns water, the Jungle boss fight's timing, guard visibility in widescreen, and the Dam ending camera.
- Fewer crashes and glitches: a multiplayer crash with the crouched rifle, rockets passing through the ground, and broken geometry around Aztec's shuttle.
- A steady 60 fps on low-end GPUs (tested on an Intel HD 3000 laptop), with lighter first-launch defaults on Atom/Celeron-class graphics.
- Emulator saves load directly: copy a 1964 or Project64 save in as
data/ge007.eepand it is converted on first launch. - Also: more audio, video and control settings (master volume, audio device, trilinear filtering, draw distance up to 800%, PC-friendly crouch and look-ahead defaults), and controllers are picked up again when replugged.
- 2026-09-28 — v0.4.0: native widescreen, a complete aim system for mouse and controller, in-game key rebinding, crosshair customization, rumble-pak haptics, a rebuilt options overlay, and a broad fidelity-fix pass (water, particles, billboard trees, front-end logo, gunshot SFX, a true stable 60 fps). Release notes.
- 2026-09-20 — v0.3.0: the first release with the complete campaign playable end to end at 60 fps on Windows, Linux, and Steam Deck. Release notes.
- 2026-09-04 → 2026-09-16 — v0.1.0 – v0.2.2: the alpha and beta cycle: build chain, software RSP, first rendered frames, front end, and per-level stabilization across the campaign.
System requirements
Windows: Windows 10 or 11, 64-bit. Nothing else to install: the download carries its own runtime libraries and the one-time asset tool (no Python, no emulator).
Linux / Steam Deck: 64-bit x86 Linux with glibc 2.31 or newer (Ubuntu 20.04+, Debian 11+, Fedora 32+, SteamOS). SDL2 is bundled, so the tarball runs as-is; it sideloads onto a Steam Deck with nothing installed.
Both: a GPU with OpenGL 3.0 drivers (practically any PC GPU from the last fifteen years; keep the driver up to date). A 2011 laptop with Intel HD 3000 graphics holds 60 fps; on very weak integrated GPUs (Atom/Celeron class) the first launch lowers draw distance and anti-aliasing to keep up. A keyboard and mouse, or a controller (Xbox, PlayStation, Switch and most SDL-supported pads); split-screen needs one controller per extra player.
Not yet: macOS, ARM Linux and Windows 7 are on the roadmap.
Quick start
- From Releases, download the win64.zip (Windows) or the linux tarball (Linux and Steam Deck), and extract it. On Windows, never run the exe from inside the zip.
- Make a
data/folder next to the executable and put your ROM in it asge007.ntsc-final.z64. Only the US (NTSC-U) ROM works today; see What's a ROM? to check yours. - Launch the executable from that folder. Windows may show "Windows protected your PC" (SmartScreen, because the exe is not code-signed): click More info, then Run anyway.
- The first start takes a few extra seconds: the port reads your ROM and generates its asset files once. After that it starts normally.
- Play. F10 (pad: Select) opens the options overlay; on the file-select screen the PC Options entry opens the same overlay. The Controls table lists the default keys.
Steam Deck: the Linux tarball is the Deck build. Download it on the Deck
(or copy it over from your PC), extract it, add your ROM to data/, launch
it once, and add the executable as a non-Steam game. On first start it
applies Deck-friendly display defaults (native 1280×800 fullscreen); if the
resolution is wrong, set it under F10 → Video → Resolution.
Controls
| Action | Keyboard / mouse | Controller |
|---|---|---|
| Move / strafe | W A S D | Left stick (or D-pad) |
| Move / turn | Arrow keys | — |
| Aim / look | Mouse | Right stick |
| Fire | Left mouse | Right trigger |
| Aim mode | Right mouse / LShift | Left trigger / LB |
| Use / interact | E | A |
| Reload | R | X |
| Crouch (toggles) | LCtrl | Left or right stick click |
| Cycle owned gadgets | Watch inventory | B |
| Next weapon | Mouse wheel down / Q | Y |
| Previous weapon | Mouse wheel up | — |
| Start | Enter / Tab | Start |
| Options overlay | F10 | Select |
The keyboard defaults are a GEPD-style layout. The controller layout matches Rare's Xbox 1.1 (Jinx) button roles; the other Xbox styles (1.2 Christmas, 1.3 Frost, 1.4 Elektra, which swap the stick roles) are selectable under Controller (pick a player first, then Layout preset). PlayStation and Nintendo controllers show their own button names in the menus.
Control style: Controller → Control style (named after the watch's own setting, with Perfect Dark's "Ext" for the port's controls) picks how the game's controller style (the watch's 1.1–1.4 selector) is treated. Ext (the default) keeps the port's feel and fixes the style itself, so the watch's selector has no effect. Original stops the port from touching the style: pick 1.1, 1.2, 1.3 or 1.4 on the watch (or in the multiplayer setup) and it behaves as on the N64, and the Controller page then offers the game's own styles ("Controller style", 1.1 Honey to 2.4 Goodhead, saved in the Bond file like the watch's) instead of the layout presets, which apply in Ext only. Buttons are passed through as the N64's buttons, so 1.3 and 1.4 move fire and aim exactly as the console does. The 2.x dual-controller styles run faithfully too: the game reads their second stick from the next controller slot, which the port does not map yet (a second pad assigned to that slot should provide it, untested), so with one pad pick a 1.x style. Saves made with earlier builds may hold 1.2 (the port wrote its forced style back into the save), so when you switch to the Original control style, pick your style on the watch once.
Rebinding: Key Bindings in the options overlay rebinds the keyboard and mouse (one list: movement, then actions). Controller buttons are rebindable per controller under Controller (pick a player first): set Layout preset to Custom, select an action and press a pad button (tap B or Esc to cancel, hold B to bind B itself, hold Back to clear; Y clears the selected slot). Each action takes up to two buttons. Menus always keep A/X accept and B/Y cancel, so you can't lock yourself out. There is no warning yet when two actions share a button, and the Xbox release's "left stick aims the crosshair" and "D-pad copies the left stick" behaviors are not reproduced (here the right stick aims and the D-pad strafes, as on the N64).
Split-screen: pick Multiplayer from the main menu. With one controller,
keyboard/mouse is player 1 and the controller is player 2; with two or more
controllers, the controllers take players 1–4 (Input.MPMode in ge007.ini
changes this). A controller unplugged mid-match keeps its player when
plugged back in.
Options overlay with a controller (also how it works on the Deck):
Select opens it, the D-pad or left stick moves between rows and
left/right adjusts the selected value, A opens a page or toggles a row,
B goes back one page (and closes from the top), and Start (or Select
again) closes. With a keyboard, use F10, the arrow keys, Enter and
Backspace.
Features
- 2–4 player split-screen multiplayer on every MP map, with the N64's own setup flow and per-player HUD.
- Native widescreen at any aspect ratio: the world is undistorted, the HUD sits at the screen edges, and 4:3 menus are pillarboxed. FOV and draw/LOD distance are adjustable, and AI behaviour stays as on the N64 whatever you set them to.
- The original look in one click: the Display mode row (F10 → Video) switches between Modern and Original N64 (it reads Custom once you edit a setting it covers), and Aspect ratio → Original shows the exact 4:3 frame.
- A steady 60 fps, with VSync and a frame cap (30 or 60), including on low-end GPUs.
- Graphics options: resolution, borderless or exclusive fullscreen, a Center window action while windowed, MSAA (up to 16×), anisotropic filtering, and nearest, bilinear, trilinear or the N64's own 3-point texture filter.
- Mouse aim in your choice of style (the N64's, or centered FPS-style) with per-device sensitivity, smoothing and Y-inversion.
- Modern controller support: dual-stick layout, deadzones, sensitivity, southpaw, trigger thresholds, rumble-pak vibration, and PlayStation/Nintendo button names.
- Rebindable controls for keyboard, mouse and each controller.
- HUD and crosshair options: HUD scale (also scales the in-game options menu), an optional always-on crosshair, a custom RGB crosshair color with adjustable opacity and a health-based color, and a no-hit-flash option.
- Full audio: in-level music and sound effects, with music, FX and master volume and a choice of output device.
- An in-game options overlay (F10 / pad Select) for all of the above, saved automatically; the game's crosshair is the mouse pointer, and each page has a Reset to defaults row.
- Faithful N64 progression by default. Opt-in extras: Skip intro and All unlocked (every level, 007 mode and the full cheat menu, without touching your save), and Check for updates (off by default; one request to GitHub per launch when on, see Security).
- Saves in a plain file next to the game, so backing up is a file copy; 1964 and Project64 saves load directly (details).
Status
Fully playable, with a small set of known caveats. All 20 solo missions and the end-of-campaign credits load, render and run crash-free. v0.5.0 was played on Windows and Steam Deck (campaign spot-checks, 2–4 player split-screen and controller-only sessions), and every level's reference frames were compared pixel by pixel on Windows, Linux and Steam Deck. The full campaign was last played end to end, at Agent difficulty on all three platforms, for v0.4.0. Split-screen was played live in 2P on every multiplayer map and in 4P on Temple.
Known issues: see the known-issues table (what you'll notice, impact, workarounds). The short version: NTSC-U ROMs only in the release packages, and no macOS/ARM builds yet.
All unlocked never changes your save since v0.5.0: it unlocks every level and cheat in memory only, and switching it off shows your real progress. v0.4.0 and earlier could write fake unlocks into the save, and those are not repaired; if you used it on an older build, keep a backup of
data/ge007.eep.
What a release installs (no networking unless you turn on the opt-in update check, which is off by default and makes one HTTPS request to GitHub per launch; no telemetry, no ROM or game assets)
and how faithfully the port tracks the original game's logic:
Security and fidelity status.
The binaries are not code-signed; from v0.5.0 on each release artifact also
carries a GitHub build-provenance attestation you can check with
gh attestation verify <file> --repo jkdansereau/goldeneye-pc-port
(see SECURITY.md).
Settings and files
Options overlay: press F10 (pad: Select) in game or in the menus.
Changes are saved automatically. Most settings live in ge007.ini; the
ones that come from the game's own watch menu (auto-aim, aim
control, sight, look ahead, ammo on screen, screen size, screen ratio, music
and FX volume) are part of your save, as on the N64. Screen size (Full / Wide /
Cinema) and screen ratio (Normal / 16:9) combine with the PC Aspect ratio
setting: Aspect ratio owns the window shape, while the watch's two options
only change what the game renders inside it.
Where files live: everything stays inside the game's own folder. The port
never writes to %APPDATA%, the registry or any system location.
| File | What it is |
|---|---|
data/ge007.ntsc-final.z64 | Your ROM (you put it there). |
data/ge007.eep | Your game progress (the N64 save). |
data/ge007.ini | Settings, written on first start. |
data/pcmodels-<region>/, data/pccg-<region>/ | Asset files generated from your ROM on first start. Safe to delete: they are made again on the next start. |
data/ge007.shaders | A list of the graphics shaders the game used, compiled at startup to avoid stutter. Safe to delete. |
ge007.crash.log | Written in the folder you launched from if the game crashes. |
Removing ROM-derived content: the only files on your machine that come
from the game are the ROM you put there and the two generated asset folders
(data/pcmodels-<region>/, data/pccg-<region>/). Delete those and every
ROM-derived file is gone; your save (ge007.eep) and settings (ge007.ini)
are separate files, yours to keep or delete.
ge007.ini uses [Section] headers and Key = value lines. A few
common keys and their defaults:
[Video]
Fullscreen = 0
VSync = 1
FpsCap = 60
MSAA = 2
TextureFilter = 1
NativeWidescreen = 1
FovScale = 100
DrawDistance = 200
[Audio]
MasterVolume = 100
Fullscreen 1 is borderless fullscreen; TextureFilter is 0 nearest,
1 bilinear, 2 the N64 3-point filter, 3 trilinear; FovScale and DrawDistance are
percentages of the original (the options overlay shows the field of view in
degrees). On Atom/Celeron-class GPUs the first launch writes lighter values
for draw distance, LOD distance and MSAA. Edit the file with the game
closed: it is rewritten on a clean exit, and comments are dropped.
Launch options: -fresh wipes the save and settings before starting (a
clean-slate run). --version prints the build id.
What's a ROM?
A ROM is a copy of the game cartridge's data, made with a cartridge dumper
from a cartridge you own. This project can't provide or link one. The port
needs the big-endian .z64 format, and supports the US version today:
| Region | ROM filename (in data/) | SHA-1 | Supported |
|---|---|---|---|
| NTSC-U (US) | ge007.ntsc-final.z64 | abe01e4aeb033b6c0836819f549c791b26cfde83 | yes |
| PAL (EU) | ge007.pal-final.z64 | 167c3c433dec1f1eb921736f7d53fac8cb45ee31 | not yet (#85) |
| NTSC-J (JP) | ge007.jpn-final.z64 | 2a5dade32f7fad6c73c659d2026994632c1b3174 | not yet (#85) |
To check which file you have, compute its SHA-1: on Windows,
certutil -hashfile ge007.ntsc-final.z64 SHA1; on Linux,
sha1sum ge007.ntsc-final.z64.
Updating
Extract the new release into a new folder, then copy your ROM, ge007.eep
and ge007.ini from the old data/ folder into the new one. Don't copy the
generated pcmodels-* and pccg-* folders: the new version makes its own on first start, and
stale ones from an older version can cause glitches.
Using an emulator save
Saves from N64 emulators (1964, Project64, …) load directly: with the game
closed, just copy your .eep to data/ge007.eep. On first launch the game
detects the emulator byte order and converts it in place, keeping a backup of
the original file next to it as ge007.eep.emulator.bak (never overwriting an
existing one). Any slot that is corrupt in both formats is left alone and gets
reset by the game, exactly as before. An existing port save is untouched.
To take a save back into an emulator, use the small converter that ships in
the release folder as tools/eep_convert.py
(tools_pc/eep_convert.py in a source checkout; plain Python 3, no
dependencies):
python tools/eep_convert.py pc-to-n64 data/ge007.eep back-to-emulator.eep # port -> emulator
python tools/eep_convert.py verify some-file.eep # wh