release: v0.4.0 site/README consistency + Web 1.0 re-skin

- Docs site: drop jekyll-theme-cayman for a hand-rolled _layouts/default.html
  (masthead band + middot text nav + footer with last-updated stamp and legal
  line; head re-plumbed with {% seo %}, viewport, favicon); head-custom.html
  fully rewritten to the chosen design tokens - charcoal/off-white/amber,
  Libre Baskerville headings over system sans, square corners, 1px borders,
  flat (no gradients/shadows), mermaid wrapper re-skinned.
- docs/index.md: v0.4.0 status (native widescreen, aim system, rebinding,
  crosshair, rumble, rebuilt overlay); Honest status replaced by the v0.4.0
  release-notes known issues; body anchor-nav line; legal footer moved to
  layout.
- security-and-fidelity-status.md: front matter so {% seo %} titles it.
- README.md: v0.4.0 truth pass (status, Working/Known issues, Deck preset
  2x MSAA / 250% per code, background stats 981 commits / 283 findings,
  comparison table, GEPD-default controls paragraph, earlier builds) plus
  markdown-native motifs matching the site: top anchor-nav line, --- section
  rules, last-updated footer stamp, license badge in the amber accent.
- release-notes: SFTP sideload mention (leftover from the Deck session).
This commit is contained in:
James Dansereau committed 2026-09-28 01:32:13 -04:00
1 parent ad20cf210a
commit 64913054ce
7 files changed
+307 -249

No files matched your search

+1 -1
View File
@@ -282,7 +282,7 @@ to install.
`prepare-assets/ge007-convert` inside the bundle; you can also run it
manually; it prints what it's doing.)
**Steam Deck:** sideload the unpacked folder (USB or a file manager), do
**Steam Deck:** sideload the unpacked folder (SFTP, USB or a file manager), do
steps 2–3, then add the executable to Games → *Add Game* as a non-Steam
game. The first launch in Game Mode picks up the Deck preset (native
1280×800, 2× MSAA, vsync) automatically if no config exists yet.
+67 -27
View File
@@ -1,7 +1,9 @@
# GoldenEye 007 PC Port
[![CI](https://github.com/jkdansereau/goldeneye-pc-port/actions/workflows/ci.yml/badge.svg)](https://github.com/jkdansereau/goldeneye-pc-port/actions/workflows/ci.yml)
![license](https://img.shields.io/badge/license-MIT-green)
![license](https://img.shields.io/badge/license-MIT-ffb454)
[Download](#download) · [Status](#status) · [Roadmap](#roadmap) · [Building](#building) · [Docs](#documentation) · [Legal](#legal)
A native PC port of _GoldenEye 007_ (Rare, 1997, Nintendo 64), compiled from
the [GoldenEye 007 decompilation](https://github.com/n64decomp/007): the
@@ -12,7 +14,7 @@ in a dedicated `port/` layer, following the architecture of the
[Perfect Dark PC port](https://github.com/fgsfdsfgs/perfect_dark), the same
Rare "Indy" engine family, one hardware generation apart.
**v0.3.0** is out for Windows and Linux (including Steam Deck, where the
**v0.4.0** is out for Windows and Linux (including Steam Deck, where the
Linux bundle sideloads as-is) and runs the full campaign at a steady 60 fps
with known rough edges ([Status](#status)). Free to download, build on and
modify (you bring the ROM).
@@ -44,6 +46,8 @@ account of what worked and what didn't.
from live v0.3.0 play sessions.</em>
</p>
---
## Download
| Platform | Bundle | Notes |
@@ -53,8 +57,8 @@ account of what worked and what didn't.
Both bundles contain **no ROM and no game assets**: you supply your own
(see [Requirements](#requirements)), which keeps the release legal to
distribute. Earlier builds: v0.2.2, v0.2.1, v0.2.0, and v0.1.0 alpha, same
page. You can also build it yourself; see [Building](#building).
distribute. Earlier builds: v0.3.0, v0.2.2, v0.2.1, v0.2.0, and v0.1.0
alpha, same page. You can also build it yourself; see [Building](#building).
### Quick start
@@ -67,12 +71,14 @@ included or distributed. Then:
2. Make a `data/` folder next to the executable and drop the ROM in as `ge007.ntsc-final.z64`.
3. Launch the executable from that folder. The first run takes a few extra seconds: it detects the ROM and generates the derived asset folders once (no Python or other tooling needed).
Read the [Status](#status) caveats first: v0.3.0 has known rough edges,
Read the [Status](#status) caveats first: v0.4.0 has known rough edges,
listed plainly there.
---
## Status
**v0.3.0 - playable, with known rough edges.** The full single-player
**v0.4.0 - playable, with known rough edges.** The full single-player
campaign is completable end to end (all 20 missions, Agent difficulty,
playtested), at a steady 60 fps; all 20 solo missions — plus the
end-of-campaign credits sequence — load, render and run crash-free, verified
@@ -87,15 +93,19 @@ game's logic: [Security & fidelity status](docs/security-and-fidelity-status.md)
start), front-end menu navigation on the left stick to match the F10 overlay
(D282); all 20 solo missions load, render and are crash-free (full campaign
playtested end to end at Agent difficulty, including the ending sequence); steady 60 fps
(software RSP off the presentation critical path); full audio: in-level music and SFX; keyboard + mouse (click-to-lock, proportional aim mode, a single
simplified sensitivity control) and a modern dual-stick controller layout;
native widescreen at any aspect ratio (undistorted world, HUD anchored to the
screen edges, 4:3 menus pillarboxed); Bond is fixed in cutscenes (no more
(software RSP off the presentation critical path); full audio: in-level music and SFX; keyboard + mouse (click-to-lock, an aim style of your
choice — N64 or centred FPS-style — with per-device sensitivity) and a modern
dual-stick controller layout (use/reload/weapon-cycle on A/X/Y, rumble-pak
vibration on supported pads); native widescreen at any aspect ratio
(undistorted world, HUD anchored to the screen edges, 4:3 menus pillarboxed);
in-game key rebinding (keyboard/mouse) with a GEPD-style default layout;
crosshair customization (opt-in); Bond is fixed in cutscenes (no more
floating or spin-glitching) and his third-person model positioning generally
is right the large majority of the time now, at most a small drift when off; file-backed saves; faithful N64 progression
by default (F10 → *All unlocked* opens every level, 007 mode and the full
cheat menu); F10 in-game options overlay (resolution, frame cap, MSAA,
filtering, FOV, sensitivity); Windows and Linux, including Steam Deck.
cheat menu); F10 in-game options overlay (display, audio, gameplay, HUD;
resolution, frame cap, MSAA, filtering, FOV, sensitivity); Windows and
Linux, including Steam Deck.
**Known issues:**
@@ -103,10 +113,10 @@ filtering, FOV, sensitivity); Windows and Linux, including Steam Deck.
~10 s before resuming the scripted shootout — a latent race that exists in
the N64 original too (where it softlocks permanently); the port detects and
auto-recovers it (D318).
- **Native widescreen is new in v0.4.0**: the world renders undistorted at
your display's aspect (wider view, same vertical FOV) and the HUD keeps its
shape; front-end menus are shown 4:3 with side bars. The F10 *Native
widescreen* toggle restores the old stretched frame.
- With native widescreen on, the F10 options overlay stretches with the
window instead of pillarboxing like the front-end menus (legible; cosmetic;
the F10 *Native widescreen* toggle restores the old stretched frame
throughout). The world/HUD widescreen rendering itself is correct (D335b).
- The Rareware front-end logo shows a subtle texture-filtering artifact
(Nintendo logo and legal page are clean). Cosmetic only (D75).
- This release ships NTSC (US) assets; PAL/JP ROMs are not supported in this
@@ -118,7 +128,8 @@ filtering, FOV, sensitivity); Windows and Linux, including Steam Deck.
original progression you need to preserve.
- Assorted further cosmetic defects are tracked in
[`docs/dev/GRAPHICS-BACKLOG.md`](docs/dev/GRAPHICS-BACKLOG.md).
- No macOS or ARM support; no controller rebinding UI.
- No macOS or ARM support. Keyboard/mouse rebinding shipped in v0.4.0;
controller-button rebinding is not supported yet.
Root causes and fix status for every item: the [release notes](https://github.com/jkdansereau/goldeneye-pc-port/releases)
and the finding log in [`docs/dev/findings.md`](docs/dev/findings.md).
@@ -130,8 +141,8 @@ it straight from the [releases page](https://github.com/jkdansereau/goldeneye-pc
unzip, drop your ROM in `data/`, launch it once (the first run generates the
derived assets), and add the executable as a non-Steam game. SDL2 is bundled, so no dependencies need
installing. On SteamOS the first launch seeds `ge007.ini` with Deck-friendly
defaults: native 1280×800 fullscreen, VSync, MSAA 4, and 150% draw/LOD
distance (the authored N64 fade distances read short on the close-up panel);
defaults: native 1280×800 fullscreen, VSync, 2× MSAA, and 250% draw/LOD
distance (the N64-authored fade distances read short on the close-up 7" panel);
everything is changeable in the options overlay and persists afterwards.
**Do that first launch in Game Mode, not Desktop Mode** — an ini created by
an earlier Desktop Mode launch (e.g. while testing before adding it as a
@@ -152,6 +163,8 @@ options, **A** steps the selected option forward, **B** steps it back, and
filtering cycle, sliders step in increments. With a keyboard attached the same
overlay is `F10` + arrows/Enter.
---
## Roadmap
No fixed timeline or committed feature list — this is spare-time work — but
@@ -160,7 +173,8 @@ directionally, on the way to v1.0:
- Working through the [known issues](#status) above and the fuller list in
[`docs/dev/findings.md`](docs/dev/findings.md).
- **PAL and JP ROM support** ([issue #85](https://github.com/jkdansereau/goldeneye-pc-port/issues/85)); NTSC-U is the only supported region today.
- **Controller rebinding UI**, and macOS/ARM builds.
- **Controller (pad) button rebinding UI** (keyboard/mouse rebinding shipped
in v0.4.0), and macOS/ARM builds.
- **LAN multiplayer**: reviving GoldenEye's original split-screen/deathmatch
netplay across multiple PCs on a local network. Genuinely under
consideration, but early and not started; no ETA.
@@ -171,11 +185,14 @@ Not currently planned: new game modes GE never shipped (e.g. co-op), online (non
multiplayer, ray tracing. If any of these matter to you, open an issue —
it helps prioritize.
---
## Beyond playing
- **Tweak it**: `ge007.ini` and the F10 in-game overlay expose resolution,
frame cap, MSAA, texture filtering, FOV/draw distance and mouse feel;
launch with `-fresh` for a clean-slate run.
frame cap, MSAA, texture filtering, FOV/draw distance, mouse feel, key
rebinding, crosshair and vibration; launch with `-fresh` for a clean-slate
run.
- **Read it**: [`docs/internals.md`](docs/internals.md) maps the
architecture and the software RSP; [`docs/porting-notes.md`](docs/porting-notes.md)
is the catalogue of N64→PC bug classes hit along the way. Game logic in
@@ -186,6 +203,8 @@ it helps prioritize.
the ground rules for getting changes in, and [`docs/dev/`](docs/dev/) is
the raw engineering record behind every fix.
---
## Background
The port was built by two coding agents, a local open-weight model
@@ -195,8 +214,8 @@ asset pipeline, first frames), and **Claude Code** (Sonnet 5, Opus 5 for the
hardest bugs) joining for the collaborative phase (the 21-level sweep, the
ABI finding catalog, SDL input, front end), handing work back and forth
through shared written notes, directed by one person part-time. In short:
36 days (16 Aug – 20 Sep), ~835 commits, 199 findings root-caused and
logged (`D1`–`D321`).
43 days (16 Aug – 28 Sep), 981 commits, 283 findings root-caused and
logged (`D1`–`D405`).
The full write-up (timeline, handoff mechanism, effort breakdown, an honest
"what worked / what didn't"): [`docs/dev/agentic-development.md`](docs/dev/agentic-development.md).
@@ -204,6 +223,8 @@ The workflow itself: [`docs/dev-process.md`](docs/dev-process.md). To cite the
project or its findings: [`CITATION.cff`](CITATION.cff) (GitHub's "Cite this
repository" menu).
---
## How this differs from the other GoldenEye PC projects
This is a native port of the original 1997 Nintendo 64 game, built from its
@@ -219,13 +240,15 @@ code with this one.
| **How** | Decompilation-based source port: human-reconstructed C, compiled for the host; game logic runs as written | Static binary recompilation: the shipped machine code is auto-translated to C; no source-level understanding |
| **Lineage** | [GoldenEye 007 decompilation](https://github.com/n64decomp/007) + [Perfect Dark PC port](https://github.com/fgsfdsfgs/perfect_dark) engine family | Xbox 360 "…Recompiled" static-recompilation family |
| **Renderer** | Software RSP → OpenGL | Hardware (Vulkan) |
| **Status** | v0.3.0 public release; full campaign playable at 60 fps (see [Status](#status)) | Playable full game |
| **Status** | v0.4.0 public release; full campaign playable at 60 fps (see [Status](#status)) | Playable full game |
| **Why it exists** | To run the *original* N64 game from source, and as a [case study in AI-agent collaboration](#background) on a hard low-level codebase | To get a playable PC release of the remaster |
They answer a different question: how to get the *remaster* onto PC by
machine translation. This project answers how to get the *original 1997
game* onto PC, running from its reconstructed source.
---
## Requirements
You need a GoldenEye 007 (Nintendo 64) ROM that you legally own, in
@@ -245,6 +268,8 @@ The port also relies on the decompilation's asset-extraction step, which pulls
the level, model, texture and music data out of your ROM at build time. That
step, too, requires your ROM and is part of [Building](#building).
---
## Building
Prerequisites: CMake >= 3.16, a C/C++ toolchain, SDL2, zlib, OpenGL, Python 3,
@@ -284,6 +309,8 @@ cd goldeneye-pc-port
The executable is written to `build-pc/ge007.x86_64` (on Windows,
`build-pc/ge007.x86_64.exe`).
---
## Running
1. Create a `data/` directory in the repo root.
@@ -323,12 +350,15 @@ accepts and B cancels. RB's *updated graphics* toggle cannot be provided by
the original N64 port (no remastered assets); it is reserved. Back opens PC
options rather than Xbox's *view scores*; exact menu parity is not claimed.
The other Xbox schemes (1.2 Christmas, 1.3 Frost, 1.4 Elektra) are planned,
not yet selectable. Input → Bindings → Movement/Actions edits **keyboard/mouse
not yet selectable. Keyboard → Bindings edits **keyboard/mouse
only**; a controller can navigate those pages and use B to go back, but
controller-button rebinding is not supported yet.
Mouse sensitivity, Y-inversion and the aim/turn split are tunable in the
`[Input]` section of `ge007.ini`.
F10 overlay (*Keyboard → Sensitivity*) or the `[Input]` section of
`ge007.ini`.
---
## How it works
@@ -361,6 +391,8 @@ tools_pc/ PC-port helper + analysis scripts
docs/ see below
```
---
## Documentation
Key docs are also published as a site:
@@ -376,6 +408,8 @@ Key docs are also published as a site:
| [`docs/dev/`](docs/dev/) | The raw engineering record: the full finding log, per-level status, graphics backlog, playtest matrices, and [`docs/dev/game-behavior-reference.md`](docs/dev/game-behavior-reference.md) (a secondary-sourced playtest reference for how the retail game is meant to behave; repo-only, code is ground truth). |
| [`docs/SetupGuide.md`](docs/SetupGuide.md), [`docs/StyleGuide.md`](docs/StyleGuide.md) | Inherited from the decompilation this repo forks. |
---
## Credits
This port is a thin layer on a large amount of other people's work.
@@ -433,6 +467,8 @@ This port is a thin layer on a large amount of other people's work.
- [pi](https://pi.dev/): the local coding-agent harness.
- [Claude / Claude Code](https://claude.com/claude-code) (Anthropic).
---
## Legal
This is a non-commercial fan preservation/research project, in the same
@@ -465,3 +501,7 @@ The original work in this repository, the port layer (`port/`), the PC build
system, `tools_pc/`, and the documentation, is released under the MIT License;
see [`LICENSE`](LICENSE). Everything inherited from the upstream decompilation
is covered by [`NOTICE`](NOTICE), not by that license.
---
*Last updated 2026-09-28 — v0.4.0.*
+3 -1
View File
@@ -7,7 +7,9 @@ title: GoldenEye 007 PC Port
# tagline on every page. Per-page meta/og descriptions come from each page's
# front matter `description:` (see index.md), not from here.
description: N64 GoldenEye 007, decompiled for PC.
theme: jekyll-theme-cayman
# No GitHub theme: the site uses a hand-rolled _layouts/default.html plus the
# design in _includes/head-custom.html (charcoal/off-white/amber, square and
# flat.)
show_downloads: false
# Canonical site location - used by jekyll-seo-tag (canonical URLs, og: tags)
+146 -172
View File
@@ -3,267 +3,242 @@
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Libre+Baskerville:ital,wght@0,400;0,700;1,400&display=swap" rel="stylesheet">
<style>
/* ----------------------------------------------------------------------
Design pass over the stock Cayman theme.
Restrained "spy-tech" palette: near-black, slate, a single amber accent.
Loaded after the theme stylesheet, so these rules win without !important.
Hand-rolled site theme (replaces jekyll-theme-cayman, 2026-09-28).
Look: committed charcoal/off-white/amber "night desk" — flat and square,
serif display type (Libre Baskerville) over a system sans body, thin
amber rules between sections, text navigation separated by middots.
No gradients, no shadows, no rounded corners, no theme switcher.
--------------------------------------------------------------------- */
:root {
color-scheme: light dark;
--ink: #14171c;
--ink-soft: #3d444d;
--ink-mute: #626b76;
--line: #e4e6e9;
--bg: #ffffff;
--bg-soft: #f7f8fa;
--accent: #b7791f;
--accent-ink: #8a5a12;
--header-1: #0d1117;
--header-2: #1c2530;
--radius: 8px;
--bg: #1b1b1d; /* charcoal page */
--bg-soft: #232326; /* code / alt rows */
--bg-deep: #141416; /* code blocks, masthead */
--ink: #e8e6e3; /* off-white body text */
--ink-soft: #b5b1a9; /* secondary text */
--ink-mute: #8d897f; /* captions, footer */
--line: #3a3a3e; /* 1px borders */
--accent: #ffb454; /* amber/gold */
--accent-hi: #ffd08a; /* link hover */
--measure: 44rem;
}
@media (prefers-color-scheme: dark) {
:root {
--ink: #e7eaee;
--ink-soft: #b9c0c9;
--ink-mute: #8b939e;
--line: #2a2f37;
--bg: #0f1216;
--bg-soft: #171b21;
--accent: #e0a94a;
--accent-ink: #f0c274;
--header-1: #0a0d11;
--header-2: #161d27;
}
}
html { background: var(--bg); }
body {
font-family: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
"Helvetica Neue", Arial, sans-serif;
font-size: 16.5px;
line-height: 1.7;
color: var(--ink);
background: var(--bg);
font-size: 17px;
line-height: 1.7;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
}
/* ---- Header --------------------------------------------------------- */
.page-header {
position: relative;
isolation: isolate;
text-align: center;
padding: 4rem 1rem 3.75rem;
background: linear-gradient(135deg, var(--header-1), var(--header-2));
border-bottom: 1px solid rgba(224, 169, 74, 0.28);
/* ---- Masthead -------------------------------------------------------- */
.site-masthead {
background: var(--bg-deep);
border-bottom: 1px solid var(--accent);
}
.page-header::before {
content: "";
position: absolute;
inset: 0;
z-index: -1;
background-image: url("{{ '/img/attract-bunker1.png' | relative_url }}");
background-size: cover;
background-position: center 38%;
opacity: 0.16;
filter: grayscale(0.35) contrast(1.05);
}
.page-header::after {
content: "";
position: absolute;
inset: 0;
z-index: -1;
background: linear-gradient(180deg, rgba(13,17,23,0.35), rgba(13,17,23,0.82));
}
.project-name {
font-weight: 700;
letter-spacing: -0.02em;
font-size: 2.4rem;
margin: 0 0 0.4rem;
color: #fff;
text-shadow: 0 1px 24px rgba(0,0,0,0.5);
}
.project-tagline {
font-weight: 400;
font-size: 1.12rem;
line-height: 1.55;
color: #d3d9e0;
opacity: 1;
max-width: 42rem;
margin: 0 auto 1.6rem;
}
.page-header .btn {
display: inline-block;
padding: 0.5rem 1.1rem;
margin: 0.3rem 0.25rem 0;
font-size: 0.9rem;
font-weight: 500;
letter-spacing: 0.01em;
color: #f3f5f7;
background: rgba(255,255,255,0.06);
border: 1px solid rgba(255,255,255,0.22);
border-radius: var(--radius);
transition: background 0.15s ease, border-color 0.15s ease, transform 0.15s ease;
}
.page-header .btn:hover {
background: rgba(224,169,74,0.16);
border-color: var(--accent);
text-decoration: none;
transform: translateY(-1px);
}
/* ---- Body ---------------------------------------------------------- */
.main-content {
.masthead-inner {
max-width: 52rem;
margin: 0 auto;
padding: 3rem 1.5rem 1rem;
color: var(--ink);
font-size: 17px;
padding: 2.6rem 1.5rem 1.6rem;
text-align: center;
}
.main-content p,
.main-content ul,
.main-content ol,
.main-content blockquote { max-width: var(--measure); }
.masthead-title {
display: inline-block;
font-family: "Libre Baskerville", Georgia, "Times New Roman", serif;
font-weight: 700;
font-size: 2.1rem;
line-height: 1.25;
color: var(--ink);
text-decoration: none;
letter-spacing: 0.01em;
}
.masthead-title:hover { color: var(--accent); }
.masthead-tagline {
margin-top: 0.5rem;
color: var(--ink-mute);
font-size: 0.95rem;
}
.masthead-nav {
margin-top: 1.3rem;
font-size: 0.9rem;
}
.masthead-nav a {
color: var(--accent);
text-decoration: none;
padding: 0.1rem 0.15rem;
}
.masthead-nav a:hover { color: var(--accent-hi); text-decoration: underline; }
.nav-sep { color: var(--ink-mute); padding: 0 0.35rem; }
.main-content h1,
.main-content h2,
.main-content h3,
.main-content h4 {
/* ---- Content ---------------------------------------------------------- */
.doc-content {
max-width: 52rem;
margin: 0 auto;
padding: 2.5rem 1.5rem 1rem;
}
.doc-content p,
.doc-content ul,
.doc-content ol,
.doc-content blockquote { max-width: var(--measure); }
.doc-content h1,
.doc-content h2,
.doc-content h3,
.doc-content h4 {
font-family: "Libre Baskerville", Georgia, "Times New Roman", serif;
font-weight: 700;
line-height: 1.35;
color: var(--ink);
font-weight: 600;
letter-spacing: -0.015em;
line-height: 1.3;
margin-top: 2.4rem;
margin-bottom: 0.9rem;
}
.main-content h1 { font-size: 1.9rem; }
.main-content h2 {
font-size: 1.4rem;
padding-bottom: 0.35rem;
border-bottom: 1px solid var(--line);
}
.main-content h3 { font-size: 1.15rem; }
.main-content > h1:first-child { margin-top: 0.5rem; }
.doc-content h1 { font-size: 1.75rem; }
.doc-content h2 { font-size: 1.35rem; }
.doc-content h3 { font-size: 1.1rem; }
.doc-content > h1:first-child { margin-top: 0.5rem; }
.main-content a {
color: var(--accent-ink);
.doc-content a {
color: var(--accent);
text-decoration: underline;
text-decoration-color: rgba(183,121,31,0.4);
text-decoration-color: rgba(255, 180, 84, 0.45);
text-underline-offset: 2px;
}
.main-content a:hover {
color: var(--accent);
.doc-content a:hover {
color: var(--accent-hi);
text-decoration-color: currentColor;
}
@media (prefers-color-scheme: dark) {
.main-content a { color: var(--accent); }
.doc-content hr {
border: 0;
height: 1px;
background: var(--accent);
opacity: 0.5;
margin: 2.5rem 0;
}
.main-content blockquote {
color: var(--ink-mute);
.doc-content blockquote {
color: var(--ink-soft);
border-left: 3px solid var(--accent);
padding: 0.2rem 0 0.2rem 1.1rem;
margin-left: 0;
font-style: normal;
}
.main-content hr {
height: 1px;
background: var(--line);
border: 0;
margin: 2.5rem 0;
}
/* Lead paragraph on doc pages (the italic summary under the H1) */
.main-content > p > em:only-child {
.doc-content > p > em:only-child {
font-style: normal;
color: var(--ink-soft);
font-size: 1.05rem;
}
/* ---- Code --------------------------------------------------------- */
.main-content code {
font-family: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
/* ---- Code ------------------------------------------------------------ */
.doc-content code {
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
font-size: 0.86em;
background: var(--bg-soft);
border: 1px solid var(--line);
border-radius: 4px;
padding: 0.12em 0.4em;
color: var(--ink);
}
.main-content pre {
background: var(--header-1);
.doc-content pre {
background: var(--bg-deep);
border: 1px solid var(--line);
border-radius: var(--radius);
padding: 1rem 1.15rem;
max-width: var(--measure);
overflow-x: auto;
line-height: 1.55;
}
.main-content pre code {
.doc-content pre code {
background: transparent;
border: 0;
padding: 0;
color: #e6edf3;
color: var(--ink);
font-size: 0.84rem;
}
/* ---- Tables ------------------------------------------------------- */
.main-content table {
/* ---- Tables ----------------------------------------------------------- */
.doc-content table {
border-collapse: collapse;
display: table;
width: 100%;
max-width: var(--measure);
margin: 1.5rem 0;
font-size: 0.92rem;
}
.main-content table th,
.main-content table td {
.doc-content table th,
.doc-content table td {
border: 1px solid var(--line);
padding: 0.5rem 0.75rem;
text-align: left;
}
.main-content table th { background: var(--bg-soft); font-weight: 600; }
.main-content table tr { background: transparent; }
.main-content table tr:nth-child(2n) { background: var(--bg-soft); }
.doc-content table th { background: var(--bg-soft); font-weight: 600; }
.doc-content table tr:nth-child(2n) { background: #1f1f22; }
.main-content img {
border-radius: var(--radius);
/* ---- Images & gallery -------------------------------------------------- */
.doc-content img {
border: 1px solid var(--line);
border-radius: 0;
max-width: 100%;
}
/* ---- Footer ------------------------------------------------------- */
.doc-content details {
max-width: var(--measure);
border: 1px solid var(--line);
background: var(--bg-soft);
padding: 0.6rem 0.9rem;
margin: 1.5rem 0;
}
.doc-content summary { cursor: pointer; color: var(--accent); }
/* ---- Footer ------------------------------------------------------------- */
.site-footer {
max-width: 52rem;
margin: 3rem auto 0;
padding: 1.5rem 1.5rem 2.5rem;
border-top: 1px solid var(--line);
color: var(--ink-mute);
font-size: 0.86rem;
}
.site-footer a { color: var(--accent-ink); }
@media (prefers-color-scheme: dark) { .site-footer a { color: var(--accent); } }
.footer-inner { max-width: var(--measure); }
.footer-stamp {
color: var(--ink-soft);
font-size: 0.88rem;
margin: 0 0 0.8rem;
}
.footer-stamp a { color: var(--accent); text-decoration: none; }
.footer-stamp a:hover { color: var(--accent-hi); text-decoration: underline; }
.footer-legal {
color: var(--ink-mute);
font-size: 0.8rem;
line-height: 1.6;
margin: 0;
}
@media (max-width: 42rem) {
.project-name { font-size: 1.9rem; }
.page-header { padding: 3rem 1rem 2.75rem; }
.main-content { padding-top: 2rem; }
.masthead-title { font-size: 1.7rem; }
.masthead-inner { padding: 2rem 1rem 1.2rem; }
.doc-content { padding-top: 1.8rem; }
}
/* ---- Mermaid diagrams ------------------------------------------------ */
/* ---- Mermaid diagrams ---------------------------------------------------- */
/* Kramdown renders ```mermaid fences as <pre><code class="language-mermaid">.
The script below hands their text to mermaid and swaps in the SVG. Keep
the pre unstyled (no dark code background) while it waits to render. */
.main-content pre.mermaid,
.main-content pre > code.language-mermaid {
the pre unstyled (no code-block background) while it waits to render. */
.doc-content pre.mermaid,
.doc-content pre > code.language-mermaid {
background: transparent;
border: 0;
color: var(--ink);
padding: 0;
}
.main-content pre.mermaid { text-align: center; overflow-x: auto; }
.main-content pre.mermaid:not([data-processed]) { visibility: hidden; }
.doc-content pre.mermaid { text-align: center; overflow-x: auto; }
.doc-content pre.mermaid:not([data-processed]) { visibility: hidden; }
</style>
<script type="module">
@@ -271,7 +246,6 @@
// Move each ```mermaid code block's text into a <pre class="mermaid"> that
// mermaid.run() recognises.
const dark = window.matchMedia("(prefers-color-scheme: dark)").matches;
document.querySelectorAll("pre > code.language-mermaid").forEach((code) => {
const pre = document.createElement("pre");
pre.className = "mermaid";
@@ -282,7 +256,7 @@
mermaid.initialize({
startOnLoad: false,
securityLevel: "loose", // our own docs; needed for <br/> in node labels
theme: dark ? "dark" : "neutral",
theme: "dark",
});
mermaid.run({ querySelector: "pre.mermaid" });
</script>
+48
View File
@@ -0,0 +1,48 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="{{ '/img/attract-bunker1.png' | relative_url }}">
{%- seo -%}
{%- include head-custom.html -%}
</head>
<body>
<header class="site-masthead">
<div class="masthead-inner">
<a class="masthead-title" href="{{ '/' | relative_url }}">{{ site.title }}</a>
<div class="masthead-tagline">{{ site.description }}</div>
<nav class="masthead-nav">
<a href="{{ '/' | relative_url }}">Home</a><span class="nav-sep">·</span>
<a href="{{ '/internals' | relative_url }}">Internals</a><span class="nav-sep">·</span>
<a href="{{ '/porting-notes' | relative_url }}">Porting notes</a><span class="nav-sep">·</span>
<a href="{{ '/building' | relative_url }}">Building</a><span class="nav-sep">·</span>
<a href="{{ '/dev-process' | relative_url }}">Dev process</a><span class="nav-sep">·</span>
<a href="{{ '/dev/agentic-development' | relative_url }}">Two-agent study</a>
</nav>
</div>
</header>
<main class="doc-content">
{{ content }}
</main>
<footer class="site-footer">
<div class="footer-inner">
<p class="footer-stamp">
Last updated 2026-09-28 — v0.4.0
<span class="nav-sep">·</span>
<a href="https://github.com/jkdansereau/goldeneye-pc-port">GitHub</a>
<span class="nav-sep">·</span>
<a href="https://github.com/jkdansereau/goldeneye-pc-port/releases">Releases</a>
</p>
<p class="footer-legal">
Non-commercial fan preservation/research project. No ROM or game assets
are distributed; you supply a ROM you already own. Not affiliated with
or endorsed by Nintendo, Rare, Microsoft, MGM, Danjaq, or EON
Productions.
</p>
</div>
</footer>
</body>
</html>
+36 -48
View File
@@ -1,36 +1,39 @@
---
title: GoldenEye 007 PC Port
# v0.3.0: status bumped from v0.2.1; Honest-status bullets synced with the
# README's v0.3.0 known issues (D255/D282/F10-dup/overscan items removed as
# fixed). Description kept at 133 chars (Bing's 160 limit).
# v0.4.0: status bumped from v0.3.0; Honest status replaced by the v0.4.0
# release-notes known issues (rainbow/water/z-fight/cameras/trees/muzzle/
# stretched-widescreen/gunshot items all fixed; D335b F10-overlay stretch is
# the new widescreen residual). Description kept short (Bing's 160 limit).
description: >-
A native PC port of the 1997 N64 classic, built from decompiled source with
a software RSP. v0.3.0 for Windows, Linux and Steam Deck.
a software RSP. v0.4.0 for Windows, Linux and Steam Deck.
---
<!-- v0.2.1 (Bing SEO): the "# GoldenEye 007 PC Port" h1 was removed here --
the Cayman masthead already renders the site title as an <h1>, so the page
was emitting two h1 tags. -->
A native PC port of the original 1997 Nintendo 64 _GoldenEye 007_, compiled
from the game's [decompiled source](https://github.com/n64decomp/007) with the
N64's graphics coprocessor (RSP) running in software, the same architecture
as the [Perfect Dark PC port](https://github.com/fgsfdsfgs/perfect_dark), the
same Rare "Indy" engine family, one hardware generation apart.
**Status: v0.3.0.** The full single-player campaign runs at a steady 60 fps
and is completable end to end (all 20 missions playtested); all 20 missions
load and run clean on Windows, Linux and Steam Deck, and audio (music + SFX)
plays throughout. The known rough edges — mostly cosmetic rendering defects,
stretched-not-native widescreen, and missing features — are listed plainly
under [Honest status](#honest-status).
[Download](#download) · [See it running](#see-it-running) · [Honest status](#honest-status) · [Documentation](#documentation)
**Status: v0.4.0.** The full single-player campaign runs at a rock-stable
60 fps and is completable end to end (all 20 missions playtested on Windows
and Steam Deck). This release adds **native widescreen** (on by default —
undistorted world at your display's aspect, 4:3 menus pillarboxed), a
**complete aim system** (N64 or centred PC style, for mouse *and*
controller), **in-game key rebinding** with a GEPD-style default layout,
**crosshair customization**, real **rumble-pak haptics** on supported
gamepads, and a **rebuilt options overlay** with fine-tuning rows (frame cap,
MSAA, draw/LOD distance, HUD scale). The remaining rough edges are few and
mostly cosmetic — listed plainly under [Honest status](#honest-status).
**This is a pre-1.0 release, not a finished product** — v1.0 is the target
for a polished, feature-complete build; expect rough edges and missing
features until then. See the
[README's Roadmap section](https://github.com/jkdansereau/goldeneye-pc-port#roadmap)
for direction (PAL/JP support, real widescreen, LAN multiplayer under
consideration, and more).
for direction (PAL/JP support, controller-button rebinding, LAN multiplayer
under consideration, and more).
<p align="center">
<img src="media/goldeneye-gh-preview.gif" width="70%"
@@ -190,34 +193,25 @@ catalogue: [Porting notes](porting-notes.md).
## Honest status
- **Particle colours** can still drift through a rainbow palette
intermittently: one genuine cause is fixed this release, a second hasn't
been found yet (D252).
- **Some muzzle flashes draw an extra erroneous long flash** straight up from
the gun, on top of the correct one. Cosmetic only (D303).
- Water levels show a moving seam between two water patterns (D245);
occasional z-fighting on some geometry (D308); in-level security-camera
props can occasionally face backwards (D307). Minor and cosmetic.
- **The front-end Nintendo logo renders as two white blobs** and the Rareware
logo's texture filtering looks off (D75).
- Surface 1's 2D billboard trees render as a solid wall of tree texture
instead of discrete sprites; under active investigation (D236).
- **Widescreen is stretched, not native**: 16:9 stretches the 4:3 frame to
fill the display; automatic FOV scaling keeps the framing comfortable and
gameplay is unaffected, but a distortion-free native widescreen render is
still on the roadmap. Distant geometry can also drop out on the biggest
open levels (D249).
- **Gunshot SFX can sound off during sustained/rapid fire** (D240/D241).
- **`All unlocked` is highly experimental** — don't enable it until you have
at least one save written, or it can break audio and mouse aim
(D257/D259/D281).
- Bond's cutscene positioning is fixed and right the large majority of the
time now; on the rare occasion he's off it's a small drift — no more
floating or spin-glitching (D173/D292/D243).
- No macOS/ARM support; no controller rebinding UI yet.
- On Facility, if gas leaks during Ourumov's monologue he can pause for up to
~10 s before resuming the scripted shootout — a latent race that exists in
the N64 original too (where it softlocks permanently); the port detects and
auto-recovers it. (D318)
- With native widescreen on, the F10 options overlay stretches with the
window instead of pillarboxing like the front-end menus (legible; cosmetic;
the F10 *Native widescreen* toggle restores the old stretched frame
throughout). The world/HUD widescreen rendering itself is correct. (D335b)
- The front-end Rareware logo shows a subtle texture-filtering artifact
(the Nintendo logo and legal page are clean). Cosmetic only. (D75)
- **`All unlocked` is experimental**: the fresh-install corruption case is
fixed, but saves made while it is on are not guaranteed recoverable by
switching it off — complete a level normally first, and back up
`data/ge007.eep` before enabling it. (D387)
- No macOS or ARM support. Keyboard/mouse rebinding shipped in v0.4.0;
controller-button rebinding is not supported yet.
The full list, with root causes and fix status: the
[README's Status section](https://github.com/jkdansereau/goldeneye-pc-port#status)
[release notes](https://github.com/jkdansereau/goldeneye-pc-port/releases)
and the [finding log](https://github.com/jkdansereau/goldeneye-pc-port/tree/main/docs/dev).
## Documentation
@@ -227,9 +221,3 @@ and the [finding log](https://github.com/jkdansereau/goldeneye-pc-port/tree/main
- [Internals](internals.md): architecture, the software RSP-emulation approach, GoldenEye-vs-Perfect-Dark engine differences, the phased plan.
- [Porting notes](porting-notes.md): the recurring Nintendo 64 → PC bug classes hit during the port, with fixes.
- [Building](building.md): full build and asset-extraction guide.
---
<small>Non-commercial fan preservation/research project. No ROM or game assets
are distributed; you supply a ROM you already own. Not affiliated with or
endorsed by Nintendo, Rare, Microsoft, MGM, Danjaq, or EON Productions.</small>
+6
View File
@@ -1,3 +1,9 @@
---
title: Security & fidelity status
description: What a release actually installs (no networking, no telemetry, no ROM or assets)
and how faithfully the port tracks the original N64 game's logic.
---
# Security & fidelity status
This page answers two questions plainly: *what does installing this put on