-Platforms: **Windows x86-64** and **Linux x86-64 (including Steam Deck)**, plus
-an **experimental macOS Apple Silicon** download (not notarized; see
-[Running it](#running-it)). Region: **NTSC-U (US) only**. See [Known issues](#known-issues).
+> [!NOTE]
+> **Updating?** Your progress and settings carry over. Unpack the new version
+> into a new folder and copy your ROM, `ge007.eep` and `ge007.ini` into its
+> `data/` folder. Leave the old `pcmodels-*` and `pccg-*` folders behind; the
+> new version makes its own.
+
+> [!NOTE]
+> The downloads aren't code-signed. On Windows, if SmartScreen appears, click
+> **More info**, then **Run anyway**. On macOS, see [Getting started](#getting-started).
## Highlights
-This release is v0.5.0 plus frame rates above 60, an experimental macOS port
-and a batch of fixes.
-
-- **Frame rates above 60.** The *Frame rate cap* (`Video.FpsCap`) now offers
- **90, 120, 144, 165 and 240**, and an **Auto** setting that matches your
- display's refresh rate (up to 240). Auto is the default on fresh installs; an existing
- `ge007.ini` keeps its value. Extra frames are blended between game ticks, so
- the game still simulates at its original rate. It costs one game tick of
- extra latency, does nothing on a 60 Hz display, and the *Original N64*
- display mode caps at 60. This is my rework of f1zz1ec0ke's #137.
-- **macOS on Apple Silicon (experimental).** There is now a
- `macos-arm64` download (or build from source; see `docs/building.md`). Based
- on danturn's #95. A 21-level campaign sweep and live sessions ran without
- crashes on one M3 Mac, but it has not had the wider testing the Windows and
- Linux builds have, and the download is not notarized. Test reports are very
+- **Frame rates above 60.** Pick 90, 120, 144, 165 or 240, or **Auto** to
+ match your display (up to 240). The game still runs at its original speed;
+ the extra frames are blended between its ticks. A rework of f1zz1ec0ke's
+ #137.
+- **macOS on Apple Silicon (experimental).** A new download for M1 and later
+ Macs, based on danturn's #95. Tested on one M3 Mac so far; reports are
welcome.
-- **Fixes you can see:** geometry vanishing when you stand against a wall
- (#150), the Cradle catwalk shadow flicker, stale pixels beside the
- native-widescreen picture on front-end screens, and the first launch opening
- on the wrong monitor (#151).
-- **Crash fixes:** the Linux end-credits crash (#152) and a crash when a guard
- spawned wearing a hat (#153, #156).
- **Original controls are now original (#145, #149).** With *Control style*
- set to Original, a gamepad behaves as an N64 controller: South is A, West is
- B, and the game decides what each button does, so B opens a door or reloads
- (not both), A changes weapon, and B goes back in menus. *Invert look* works in
- every original style and stays in sync with the watch's *Look up/down*.
-- **Mission timer (#144)**, the file-select crest drawing on a dark square
+ set to Original, your pad behaves as an N64 controller, and *Invert look*
+ works in every original style.
+- **Fixes:** geometry vanishing up close (#150), the first launch opening on
+ the wrong monitor (#151), the Linux end-credits crash (#152) and a crash when
+ a guard spawns with a hat (#153, #156).
+- **Also:** an optional mission timer (#144), the file-select crest fixed
(#146), and a fix for a Windows exit crash.
-Checked on PC at 120 Hz with VSync on a G-Sync display, and on the Steam Deck
-at 90 fps.
-
----
-
-## What's new
-
-### Frame rate
-
-- **Auto, 90, 120, 144, 165 and 240** join 30 and 60 in the F10 *Frame rate cap* row.
- Above 60 the port draws extra frames between game ticks by blending the
- previous and current frame. It only applies when the display is faster than
- 60 Hz; on a 60 Hz display nothing changes.
-- A fresh install uses **Auto**, so a 90 Hz screen runs at 90, a 144 Hz
- monitor at 144 and a 240 Hz monitor at 240 (faster displays hold at 240).
- The *Original N64* display mode sets the cap to 60.
-- A fast camera turn, or a large change in what is on screen, falls back to a
- full frame instead of a blend.
-- The Steam Deck at 90 is good on most levels (see the known issues).
-
-### macOS (Apple Silicon, experimental)
-
-- On arm64 macOS the N64 address window sits at a high host base (set
- automatically by CMake). The 64-bit address fixes this needed (textures,
- input, animation and multiplayer crashes) are in the shared code and have no
- effect at base 0 on Windows and Linux.
-- There is a `macos-arm64` download, or build from source with Homebrew's
- GNU `gcc`. The x86_64 macOS code (Julio C. Rocha's #88) is in the tree but was never
- verified on Intel hardware.
-
-### Controls
-
-- **Original control style = an N64 controller** (D643). Every press sends the
- real N64 button in levels, menus, the watch and the tank; no port-only
- actions are added. Default layout: South = A, West = B, right trigger = Z,
- left trigger / RB = R, LB = L, right stick = C-buttons, D-pad and Start as
- is. Each N64 button can be moved per player in `ge007.ini`
- (`Input.N64Pad.A = a`, `Input.N64Pad2.B = x`, ...). `Input.N64StickFeel = 1`
- (default in Original) gives the N64's linear stick range; 0 keeps the
- previous feel. The Modern style and keyboard/mouse are unchanged.
-- **Invert look** reaches every original style (D605) and, in Original, is the
- same setting as the watch's *Look up/down* (D645).
-
-### Settings and diagnostics
-
-- **Mission timer** (D606, #144): an optional always-visible timer, off by
- default (F10).
-- F10 dropdowns stay inside the settings box instead of covering the help
- text (D646).
-- Windows: per-monitor DPI awareness, so fullscreen on a scaled 4K display is
- native resolution (D626); exclusive fullscreen uses the desktop mode (D639).
-
-- The old front-end **Velocity** pointer mode is removed; the retired ini keys
- are ignored quietly (D574).
-- The Linux/macOS **update check** no longer fails on a response over 64 KB
- (D575).
-- Every log line is also written to **`ge007.log`** next to the ini; the
- previous run is kept as `ge007.prev.log` (D576).
-- F10 slider labels no longer end in ".." at HUD scale 150 (D577).
-- The crosshair look (colour, size, style, alpha, health colour) is your
- preference and is no longer reset by the *Display mode* presets (D440).
-- The sound-effect and text-bank pointer guards check the real address range,
- so they work at any address base (D573, #108 with italoarruda).
-
----
-
-## Install and upgrade
-
-### Downloads
+## Downloads
| File | Platform |
|---|---|
-| `goldeneye-pc-port--win64.zip` | Windows x86-64 |
-| `goldeneye-pc-port--linux-x86_64.tar.gz` | Linux x86-64 (incl. Steam Deck) |
-| `goldeneye-pc-port--macos-arm64.tar.gz` | macOS Apple Silicon, experimental |
+| `goldeneye-pc-port--win64.zip` | Windows 10/11, 64-bit |
+| `goldeneye-pc-port--linux-x86_64.tar.gz` | Linux x86-64 (glibc 2.31+), including Steam Deck |
+| `goldeneye-pc-port--macos-arm64.tar.gz` | macOS 14+ on Apple Silicon (experimental) |
-Each contains the engine executable, a README, license texts, and the
-one-time asset tool. **No ROM, no game assets.** The Windows bundle carries
-its runtime DLLs and the Linux bundle carries SDL2, so nothing needs to be
-installed first. The Linux bundle runs on glibc 2.31 or newer (Ubuntu 20.04+,
-Debian 11+, SteamOS). The macOS bundle carries SDL2 and the C++ runtime and
-needs an M1 or later Mac on macOS 14 or newer.
+Each download is ready to run: it carries its runtime libraries, a README,
+the license texts and the one-time asset tool. **No ROM and no game assets
+are included; you need your own US GoldenEye 007 ROM.**
-### Running it
+## Getting started
-You need your own **GoldenEye 007 N64 ROM** (US version, `.z64`).
-
-1. Unpack the archive.
-2. Make a `data/` folder next to the executable and put the ROM in it, named
+1. Unpack the download.
+2. Make a `data/` folder next to the executable and put your ROM in it as
`ge007.ntsc-final.z64`.
-3. Run the executable from that folder. The first start takes a few extra
- seconds while it generates its asset files from your ROM.
+3. Start the game. The first start takes a few extra seconds while it prepares
+ the game files from your ROM. **F10** (controller: **Select**) opens the
+ options menu.
-**Updating from an earlier version:** unpack into a new folder and copy your
-ROM, `ge007.eep` (your progress) and `ge007.ini` (your settings) into its
-`data/` folder. Don't copy the old `pcmodels-*` / `pccg-*` folders: the new
-version makes its own.
+**Steam Deck:** do the steps on the Deck, then add the executable as a
+non-Steam game.
-**macOS (experimental):** the app is not signed with a Developer ID or
-notarized, so Gatekeeper blocks a downloaded copy. After unpacking and before the
-first launch, run this once in Terminal, then start `./ge007.aarch64` from
-the folder:
+**macOS:** the app isn't notarized, so run this once in Terminal before the
+first launch, then start `./ge007.aarch64` from the folder. If the window ever
+stays black on the first start, close it and start it again.
```
xattr -dr com.apple.quarantine goldeneye-pc-port--macos-arm64
```
-Or download it in Terminal, which skips the block entirely (`curl` does not
-mark the file for Gatekeeper):
+Or download it in Terminal, which skips that step:
```
curl -L https://github.com/jkdansereau/goldeneye-pc-port/releases/download/v/goldeneye-pc-port--macos-arm64.tar.gz | tar xz
```
-Without Terminal: after the first launch is blocked, open System Settings →
+Without Terminal: after macOS blocks the first launch, open System Settings →
Privacy & Security and click **Open Anyway** next to the `ge007.aarch64`
message.
-I have only run it on one M3 Mac, so please report what Mac and macOS you
-tried and what happened.
+The [user guide](https://github.com/jkdansereau/goldeneye-pc-port/blob/release/v0.6.0/docs/user-guide.md)
+covers controls, settings, emulator saves and troubleshooting.
-**Steam Deck:** do the steps above on the Deck, then add the executable as a
-non-Steam game. The options overlay opens with **Select** and is fully
-controller-driven.
+## What's new
-Full steps, controls and troubleshooting are in the bundled `README.md`.
+### Added
----
+- **Frame rate cap:** Auto, 90, 120, 144, 165 and 240 join 30 and 60 (F10 →
+ *Video*). Auto is the default on fresh installs; an existing `ge007.ini`
+ keeps its value. Above 60 the extra frames are blended between game ticks
+ (no effect on a 60 Hz display), which adds one tick of latency; a fast camera turn or a big change on screen
+ shows a full frame instead. The *Original N64* display mode keeps 60.
+- **macOS Apple Silicon download** (experimental), plus source builds with
+ Homebrew's GNU `gcc`.
+- **Original control style as an N64 controller:** every press sends the real
+ N64 button in levels, menus, the watch and the tank. Default layout: South =
+ A, West = B, right trigger = Z, left trigger / RB = R, LB = L, right stick =
+ C-buttons. Each button can be moved per player in `ge007.ini`
+ (`Input.N64Pad.A = a`, ...), and `Input.N64StickFeel` picks the N64's linear
+ stick range.
+- **Mission timer** (#144): an optional always-visible timer, off by default.
+- **`ge007.log`:** every run is logged next to the ini; the previous run is
+ kept as `ge007.prev.log`.
+
+### Fixed
+
+- Geometry vanishing when you stand against a wall (#150).
+- The first launch opening on the wrong monitor (#151).
+- A Linux crash during the end credits (#152).
+- A crash when a guard spawns wearing a hat (#153, #156).
+- The file-select crest drawing on a dark square (#146).
+- *Invert look* now works in every original control style and stays in sync
+ with the watch's *Look up/down* (#145).
+- A crash on exit on some Windows GPUs.
+- The Cradle catwalk shadow flicker, and stale pixels beside the widescreen
+ picture on front-end screens.
+- Sound and text pointer checks that rejected valid pointers (#108, with
+ italoarruda).
+- The Linux/macOS update check failing on a large response.
+- F10 slider labels being cut off at HUD scale 150.
+
+### Changed
+
+- Windows: per-monitor DPI awareness, so fullscreen on a scaled 4K display is
+ native resolution; exclusive fullscreen uses the desktop mode.
+- F10 dropdowns stay inside the settings box.
+- The crosshair look (colour, size, style) is no longer reset by the *Display
+ mode* presets.
+- The old front-end *Velocity* pointer mode is removed.
## Known issues
-| Issue | Impact | Workaround |
-|---|---|---|
-| On the Steam Deck at 90 fps, firefights in the centre of Bunker 1 and 2 can drop several fps | Performance, Deck only | Set the frame cap to 60 for those levels |
-| Jungle can feel slightly less smooth at 90 fps than other levels | Feel | Frame cap 60 |
-| Cradle's turret explosions may draw wrongly | Cosmetic; reported, not yet investigated | None |
-| After alt-tabbing away, the picture can look hazy until it settles; fast repeated alt-tab is wonkier and takes longer | Cosmetic, Windows | It recovers on its own; alt-tab again or give it a couple of seconds |
-| macOS: the end credits may crash | Ending only, macOS only | Your progress is already saved by then |
-| macOS (Apple Silicon) is experimental, tested on one Mac, and not notarized | Platform | Run `xattr -dr com.apple.quarantine ` before the first launch; reports welcome |
-| PAL and JP ROMs aren't supported in release packages | NTSC-U only | Use an NTSC-U ROM. Both regions convert, build and boot from source; packaging is still open |
-| Changing aspect ratio inside a level can briefly glitch the gun/hand model, rarely | Cosmetic, one-off | Change the ratio from the front-end PC Options, or accept it |
-| Saves from v0.4.0 and earlier can hold fake unlocks from `All unlocked` | Save data | Not repaired automatically. Since v0.5.0 the option never writes the save; keep a backup of `data/ge007.eep` from before you used it |
-| The first frame of a level takes a little longer while its textures upload | Brief FPS-counter dip | None needed |
-| Far objects almost fully in fog are now hidden as on the N64, except in widescreen where a faint distant building edge can still show (e.g. Surface's dish from the start area); 4:3 matches the N64 | Cosmetic | Higher Draw/LOD distance shows more |
+| Issue | Workaround |
+|---|---|
+| On the Steam Deck at 90 fps, firefights in the centre of Bunker 1 and 2 can drop a few fps, and Jungle can feel slightly less smooth | Set the frame cap to 60 for those levels |
+| Cradle's turret explosions may draw wrongly | None yet |
+| On Windows, the picture can look hazy for a moment after alt-tabbing back | It settles on its own |
+| macOS: the end credits may crash | Your progress is already saved by then |
+| PAL and JP ROMs aren't supported yet | Use the US (NTSC-U) ROM |
+| Saves from v0.4.0 and earlier can hold fake unlocks from *All unlocked* | Keep a backup of `data/ge007.eep` from before you used it |
-Faithful original-game quirks are not port bugs. The full list, with
-workarounds, is the
+The full list is the
[known-issues table](https://github.com/jkdansereau/goldeneye-pc-port/blob/main/docs/ROADMAP.md#known-issues).
----
+## Tested on
-## Fixes and changes, with finding labels
-
-- **Frame interpolation above 60 fps** (D578, rework of #137). 120 fps with
- VSync on G-Sync/VRR: black frames and OLED flicker fixed (D583). Steam Deck
- 90 Hz pacing (D583).
-- **#150 geometry disappearing when too close to a wall:** the near-plane clip
- now cuts at the camera plane (D579).
-- **Cradle catwalk shadow flicker:** a D579 regression, fixed (D584).
-- **Native-widescreen stale pixels** on front-end screens: the canvas sides are
- cleared (D579 follow-up).
-- **#151** the first launch opens on the primary monitor (D581).
-- **#152** Linux end-credits crash: a garbage text pointer is rejected (D582).
-- **#153, #156** hat-spawn crash: the object record type and the end-of-list
- marker were read from the wrong byte on a little-endian machine, so the search
- could run past the end of the list (D580).
-- **#108** SFX / text-bank pointer guards (D573).
-- **#145 / #149** Original control style as an N64 controller (D643); Invert
- look in the original styles (D605, D645).
-- **#144** mission timer (D606).
-- **#146** file-select crest on a dark square: 4-bit IA textures now decode as
- the N64 does (D644).
-- **Exit crash (BSOD 0x119) on some Windows GPUs:** the GL context and window
- are released before the process exits (D632).
-- Windows DPI awareness (D626), exclusive fullscreen mode (D639), F10 dropdown
- placement (D646).
-- Velocity removal, update-check fix, `ge007.log`, HUD-150 sliders, preset
- scope (D574-D577, D440).
-- **macOS arm64:** one address-model header, the 64-bit pointer fixes and a
- display-locked tick (D586, D591, D594, D595, D599-D604, D607-D613).
-
-## Verification
-
-Windows: the 21-level reference-frame sweep passes (Streets sits at the edge of
-its tolerance and flips run to run with or without this release's changes).
-Steam Deck and macOS: all 21 levels load, play and quit without a crash (their
-reference frames are not yet comparable, so no pixel check). The fixes above
-were also checked by playing on Windows, with the original controls compared
-against the issue reports rather than an N64 pad.
+The release downloads themselves, from a fresh folder with only the ROM: all
+21 solo levels on Windows (at 120 fps), the Steam Deck (Desktop and Game
+Mode, at 90), macOS on Apple Silicon, and a 2011 Linux laptop with Intel HD
+3000 graphics (at 60).
## Thanks
f1zz1ec0ke (#137, the frame-interpolation design this release reworks),
danturn (#95, macOS), Julio C. Rocha (#88, the first macOS groundwork),
-italoarruda (#108), dolent (#120-#123, already in v0.5.0), plus reporter
-credits on the issue numbers named above.
+italoarruda (#108), and everyone who reported the issues above.
## Verify the download
@@ -244,16 +158,13 @@ credits on the issue numbers named above.
sha256sum -c goldeneye-pc-port--win64.zip.sha256
sha256sum -c goldeneye-pc-port--linux-x86_64.tar.gz.sha256
shasum -a 256 -c goldeneye-pc-port--macos-arm64.tar.gz.sha256 # macOS
+gh attestation verify --repo jkdansereau/goldeneye-pc-port # build provenance
```
-## Source & docs
+---
-, built on the
-[GoldenEye 007 decompilation](https://github.com/n64decomp/007), with its
-architecture modelled on the [Perfect Dark PC port](https://github.com/fgsfdsfgs/perfect_dark).
-Non-commercial fan preservation/research project; not affiliated with any
-rights holder. **AI disclosure:** built through agentic AI coding (Claude
-Code + a local open-weight model), directed by one person in their spare
-time. See the README's
-[How it was made](https://github.com/jkdansereau/goldeneye-pc-port#how-it-was-made)
-section for the full account.
+Built on the [GoldenEye 007 decompilation](https://github.com/n64decomp/007)
+and modelled on the [Perfect Dark PC port](https://github.com/fgsfdsfgs/perfect_dark).
+A non-commercial fan project, not affiliated with any rights holder. Developed
+with AI coding agents directed by one maintainer; see
+[About the project](https://github.com/jkdansereau/goldeneye-pc-port/blob/release/v0.6.0/docs/about.md#how-it-was-made).
diff --git a/README.md b/README.md
index 5271ba2a..0032f2d5 100644
--- a/README.md
+++ b/README.md
@@ -1,177 +1,86 @@
-# GoldenEye 007 PC Port
+
-**GoldenEye 007 (Nintendo 64, 1997) as a native PC game for Windows, Linux
-and Steam Deck.** Native widescreen, 60 fps or higher (up to 240 on fast
-displays), split-screen for up to 4 players, 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](https://github.com/n64decomp/007), compiled
-for your PC and running from your own ROM.
+
+ The original Nintendo 64 GoldenEye 007 (1997) as a native game for Windows,
+ Linux, Steam Deck and macOS.
+
-**[Download the latest release](https://github.com/jkdansereau/goldeneye-pc-port/releases)**,
-then follow the [Quick start](#quick-start).
+The GoldenEye 007 PC Port is a native port built from the game's own
+reconstructed source code (the [GoldenEye 007 decompilation](https://github.com/n64decomp/007)),
+in the same family as the [Perfect Dark PC port](https://github.com/fgsfdsfgs/perfect_dark).
+It is not an emulator: the game is compiled for your PC and runs from your own
+ROM, with native widescreen, 60 fps or more (up to 240 on fast displays),
+mouse and keyboard or a modern controller, split-screen for up to 4 players,
+and an in-game options menu.
-[Quick start](#quick-start) · [What it offers](#what-this-port-offers) · [Controls](#controls) · [Features](#features) · [Settings and files](#settings-and-files) · [Troubleshooting](#troubleshooting) · [Roadmap](#roadmap) · [Building](#building-from-source) · [Legal](#legal)
+### [Download the latest release](https://github.com/jkdansereau/goldeneye-pc-port/releases/latest)
-> [!IMPORTANT]
-> **You must supply your own GoldenEye 007 ROM.** This repository and its
-> downloads contain no ROM data and none of the original assets; the C source
-> is the community's reconstruction of the game's code (see `NOTICE`). See
-> [What's a ROM?](#whats-a-rom) and [Legal](#legal).
-
-**v0.6.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, a notarized macOS build) 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](#how-it-was-made).
+**This repository and its downloads contain no ROM data and none of the
+original game assets. You need your own GoldenEye 007 ROM (US version) to play.**
- 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
+ alt="A short gameplay montage recorded in the port">
+ Recorded in the port: the Facility intro, the Archives, the Dam
+ sniper rifle, Silo, a 2-player match and the Dam ending.
----
+## Table of contents
-## News
+- [Requirements](#requirements)
+- [Quick start](#quick-start)
+- [Controls](#controls)
+- [What this port offers](#what-this-port-offers)
+- [FAQ](#faq)
+- [Status](#status)
+- [Roadmap](#roadmap)
+- [Building from source](#building-from-source)
+- [Documentation](#documentation)
+- [Contributing and forking](#contributing-and-forking)
+- [Credits](#credits)
+- [Legal](#legal)
-- **2026-10-13** — **v0.6.0** ([release notes](https://github.com/jkdansereau/goldeneye-pc-port/releases/tag/v0.6.0)):
- - **Frame rates above 60.** `Video.FpsCap` now offers 90, 120, 144, 165 and
- 240, and an **Auto** setting (the new default on fresh installs) that
- matches your display's refresh rate, up to 240. Frames between game ticks are blended from the
- previous and current frame; the game still simulates at its original
- rate. It costs one game tick of extra latency, does nothing on a 60 Hz
- display, and the *Original N64* preset caps at 60. This is a rework of
- f1zz1ec0ke's #137. I checked 120 Hz with VSync on a G-Sync display
- on PC and 90 fps on the Steam Deck.
- - **macOS on Apple Silicon (experimental).** There is now a `macos-arm64`
- download (or build from source; see [Building](docs/building.md)). Based
- on danturn's #95 (with Julio C. Rocha's earlier Intel groundwork in
- #88). A campaign sweep and live sessions ran without crashes on one M3
- Mac; the download is not notarized, so see [macOS](#macos-apple-silicon-experimental)
- for the one-line unblock. Test reports are very welcome.
- - **Fixes:** geometry vanishing when you press against a wall (#150),
- the first launch opening on the wrong monitor (#151), a Linux crash in the
- end credits (#152), a crash when a guard spawns with a hat (#153, #156), a
- sound/text pointer check that rejected valid pointers (#108), a Cradle
- catwalk shadow flicker, and stale watch pixels in native widescreen.
- - **Original controls (#145, #149):** with *Control style* set to Original,
- a gamepad now behaves as an N64 controller (South = A, West = B, the game
- decides what each does), and *Invert look* works in every original style.
- Also an optional mission timer (#144), the file-select crest no longer
- drawing on a dark square (#146), and a Windows exit-crash fix.
- - **Smaller changes:** the legacy front-end Velocity pointer mode is gone,
- the Linux/macOS update check no longer fails on a large response, every
- run is also logged to `ge007.log` next to the ini, and F10 slider labels
- fit at HUD 150.
- - **Known issues on the Steam Deck at 90 fps:** firefights in the centre of
- Bunker 1 and 2 can drop several fps, and Jungle can feel slightly less
- smooth than other levels. Cradle's turret explosions may draw wrongly
- (reported, not yet investigated).
-- **2026-10-07** — **v0.5.0** ([release notes](https://github.com/jkdansereau/goldeneye-pc-port/releases/tag/v0.5.0)), the first release
- since v0.4.0; it includes the v0.4.1 work, which was never published on
- its own:
- - **Split-screen multiplayer for up to 4 players**, 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.eep` and 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](https://github.com/jkdansereau/goldeneye-pc-port/releases/tag/v0.4.0).
-- **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](https://github.com/jkdansereau/goldeneye-pc-port/releases/tag/v0.3.0).
-- **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.
+## Requirements
----
-
-## 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.
-
-**macOS (Apple Silicon, experimental):** an M1 or later Mac on macOS 14 or newer, using the `macos-arm64` download (nothing to install; it is not notarized, so see [macOS](#macos-apple-silicon-experimental) for the one-line unblock) or a [source build](#building-from-source). **Not yet:** ARM Linux and Windows 7 are on the [roadmap](#roadmap).
+- **Windows:** Windows 10 or 11, 64-bit. Nothing to install: the download
+ carries its own runtime libraries and the one-time asset tool.
+- **Linux and Steam Deck:** 64-bit x86 Linux with glibc 2.31 or newer (Ubuntu
+ 20.04+, Debian 11+, Fedora 32+, SteamOS). SDL2 is bundled.
+- **macOS (experimental):** an Apple Silicon Mac (M1 or later) on macOS 14 or
+ newer.
+- **Graphics:** OpenGL 3.0 (practically any PC GPU from the last fifteen
+ years). A 2011 laptop with Intel HD 3000 graphics holds 60 fps.
+- **Input:** keyboard and mouse, or an Xbox, PlayStation, Switch or other
+ SDL-supported controller; split-screen needs one controller per extra player.
## Quick start
-1. From [Releases](https://github.com/jkdansereau/goldeneye-pc-port/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.
+1. Download the build for your system from
+ [Releases](https://github.com/jkdansereau/goldeneye-pc-port/releases/latest)
+ and extract it. On Windows, don't run the exe from inside the zip.
2. Make a `data/` folder next to the executable and put your ROM in it as
- `ge007.ntsc-final.z64`. Only the **US (NTSC-U)** ROM works today; see
- [What's a ROM?](#whats-a-rom) to check yours.
-3. 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**.
-4. The first start takes a few extra seconds: the port reads your ROM and
- generates its asset files once. After that it starts normally.
-5. Play. **F10** (pad: **Select**) opens the options overlay; on the file-select
- screen the *PC Options* entry opens the same overlay. The
- [Controls](#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*.
-
----
+ `ge007.ntsc-final.z64` (US version; [check your ROM](docs/user-guide.md#whats-a-rom)).
+3. Launch the game. The first start takes a few extra seconds while it
+ prepares the game files from your ROM.
+ - **Windows:** if SmartScreen appears (the exe isn't code-signed), click
+ **More info**, then **Run anyway**.
+ - **Steam Deck:** add the executable as a non-Steam game. It starts in
+ native 1280x800 fullscreen.
+ - **macOS:** run `xattr -dr com.apple.quarantine ` once in
+ Terminal, then start `./ge007.aarch64`
+ ([details](docs/user-guide.md#macos-apple-silicon-experimental)).
+4. Play. **F10** (controller: **Select**) opens the options menu.
## Controls
| Action | Keyboard / mouse | Controller |
|---------------------|--------------------------|---------------|
| Move / strafe | `W` `A` `S` `D` | Left stick (or D-pad) |
-| Move / turn | Arrow keys | — |
+| Move / turn | Arrow keys | - |
| Aim / look | Mouse | Right stick |
| Fire | Left mouse | Right trigger |
| Aim mode | Right mouse / `LShift` | Left trigger / LB |
@@ -180,72 +89,14 @@ resolution is wrong, set it under F10 → *Video → Resolution*.
| 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 | — |
+| Previous weapon | Mouse wheel up | - |
| Start | `Enter` / `Tab` | Start |
-| Options overlay | `F10` | Select |
+| Options menu | `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.
-
-In the Original control style the pad is a strict virtual N64 controller in
-every context (stage, menus, watch, tank): each press sends the native N64
-button and the game decides what it means (so *B* uses a door or reloads, as
-on the console). Default layout, remappable per player in the ini
-(`Input.N64Pad.