mirror of
https://github.com/jkdansereau/goldeneye-pc-port.git
synced 2026-10-23 15:52:42 +02:00
Golden gate: Linux baselines, canonical save, gate hardening (D521-D532)
Linux reference-frame set for all 21 levels and the cross-platform golden rule (D521); golden tooling made non-destructive (D524); the gate pins a canonical in-tree save (D529) and the PRNG seed (D532); the capture tool's per-level re-pin bug fixed and the Linux set re-captured under the canonical save (D530, D531); no-arg verify.sh exits non-zero. README and docs visual/consolidation passes; the 15 MB preview gif replaced by stills. Refs: D521 D523 D524 D525 D526 D527 D528 D529 D530 D531 D532
This commit is contained in:
1 parent
aa5a1b81fe
commit
452fa1025a
203 files changed
+2046
-433995
No files matched your search
+120
-71
@@ -1,12 +1,9 @@
|
||||
---
|
||||
title: GoldenEye 007 PC Port
|
||||
# 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).
|
||||
# v0.5.0: status bumped from v0.4.0. Description kept short (Bing's 160 limit).
|
||||
description: >-
|
||||
A native PC port of GoldenEye 007 (Nintendo 64, 1997), built from
|
||||
decompiled source with a software RSP. v0.4.0 for Windows, Linux and
|
||||
decompiled source with a software RSP. v0.5.0 for Windows, Linux and
|
||||
Steam Deck.
|
||||
---
|
||||
|
||||
@@ -19,39 +16,41 @@ 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.
|
||||
|
||||
[Download](#download) · [News](#news) · [See it running](#see-it-running) · [Honest status](#honest-status) · [Documentation](#documentation)
|
||||
[Download](#download) · [News](#news) · [See it running](#see-it-running) · [Known issues](#known-issues) · [Documentation](#documentation)
|
||||
|
||||
**Status: v0.4.0 (2026-09-28) — fully playable, with a small set of known
|
||||
caveats.** The full single-player campaign runs at a steady 60 fps and is
|
||||
completable end to end (all 20 missions, plus the ending-credits sequence,
|
||||
playtested on Windows, Linux and Steam Deck). It is the most complete release
|
||||
to date: **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**, **rumble-pak
|
||||
haptics** on supported gamepads, and a **rebuilt options overlay** with
|
||||
fine-tuning rows (frame cap, MSAA, draw/LOD distance, HUD scale). The most
|
||||
common defect classes from earlier releases — particle colour drift, water
|
||||
seams, z-fighting, billboard trees, muzzle flashes, the front-end Nintendo
|
||||
logo, gunshot SFX — are fixed in this version; what remains is a short list,
|
||||
under [Honest status](#honest-status).
|
||||
**Status: v0.5.0 (2026-10-05) — fully playable, with a small set of known
|
||||
caveats.** The single-player campaign and the 2–4 player split-screen
|
||||
multiplayer both run at a steady 60 fps. The single-player campaign is
|
||||
completable end to end (all 20 missions plus the ending-credits sequence),
|
||||
and the 2–4 player split-screen campaign is supported on every multiplayer
|
||||
map; both were playtested on Windows, Linux and Steam Deck. This release
|
||||
adds **one
|
||||
options menu** (laid out like the Perfect Dark port's, with plain-English
|
||||
wording, real-unit sliders and a one-line description per option), the game's
|
||||
own **N64 control styles as a per-seat preset**, **direct loading of
|
||||
emulator save files**, a **scalable HUD overlay**, fullscreen and
|
||||
window-centring controls, and a **fidelity round checked frame-by-frame
|
||||
against the N64 game** (fog, aspect-ratio letterboxing, the Watch menu's own
|
||||
settings). What remains is a short list, under
|
||||
[Known issues](#known-issues).
|
||||
|
||||
**This is a pre-1.0 release, not a finished product** — v1.0 is the target
|
||||
for a polished, feature-complete build; expect missing features and the
|
||||
occasional breaking change until then. See the
|
||||
[README's Roadmap section](https://github.com/jkdansereau/goldeneye-pc-port#roadmap)
|
||||
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%"
|
||||
alt="~24 s gameplay montage from live play sessions">
|
||||
<br><em>~24 s gameplay montage from live v0.4.0 play sessions (Runway tank,
|
||||
Dam, Caverns, Aztec, Bunker 2, Surface 2), running in the port.</em>
|
||||
</p>
|
||||
for direction (PAL/JP ROM support, macOS and ARM builds, the remaining small
|
||||
accuracy differences, and post-1.0 opt-in extras).
|
||||
|
||||
## News
|
||||
|
||||
- **2026-10-05** — **v0.5.0**: one options menu with plain-English wording,
|
||||
real-unit sliders and a one-line description per option; the N64 control
|
||||
styles as a per-seat preset; direct emulator-save loading; a scalable HUD
|
||||
overlay; fullscreen and window-centring controls; and a fidelity round
|
||||
checked frame-by-frame against the N64 game. The reference-frame gate was
|
||||
re-based on both platforms (21 levels, 63 frames each).
|
||||
[Release notes](https://github.com/jkdansereau/goldeneye-pc-port/releases/tag/v0.5.0) ·
|
||||
[downloads](#download).
|
||||
- **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
|
||||
@@ -85,10 +84,19 @@ without a ROM you already own.
|
||||
|
||||
## See it running
|
||||
|
||||
<p align="center">
|
||||
<img src="img/shots/shot-28.jpg" width="45%" alt="Streets, rendered by the port (v0.4.0 intro attract)">
|
||||
<img src="img/shots/shot-01.jpg" width="45%" alt="Dam, rendered by the port (v0.4.0 intro attract)">
|
||||
</p>
|
||||
<div class="viewer" id="viewer">
|
||||
<div class="vbar">
|
||||
<span class="dots"><i></i><i></i><i></i></span>
|
||||
<span class="lbl">viewer — in-engine captures, 3072×1728</span>
|
||||
<span class="idx" id="vIdx">1 / 12</span>
|
||||
</div>
|
||||
<div class="vstage">
|
||||
<img id="vImg" src="img/shots/shot-01.jpg" alt="in-engine capture">
|
||||
<button class="vbtn prev" id="vPrev" aria-label="previous capture">‹</button>
|
||||
<button class="vbtn next" id="vNext" aria-label="next capture">›</button>
|
||||
</div>
|
||||
<div class="vcap"><span id="vCap">Dam — v0.4.0 intro attract</span></div>
|
||||
</div>
|
||||
|
||||
<details>
|
||||
<summary><strong>Full gallery</strong>: 12 in-engine captures from a v0.4.0 intro-attract pass (3072×1728 widescreen, Sep 2026)</summary>
|
||||
@@ -163,57 +171,98 @@ More captures may land here as playtesting continues.
|
||||
licensed and yours to extend: new video options, input tweaks, your own
|
||||
asset sidecar. [CONTRIBUTING](https://github.com/jkdansereau/goldeneye-pc-port/blob/main/CONTRIBUTING.md)
|
||||
has the ground rules that keep it faithful to the original game.
|
||||
- **AI disclosure**: development here was agentic — Claude Pro plus a local
|
||||
open-weight model on a single RTX 5090, as of August–September 2026. This
|
||||
project is as much a study of *that process* as it is a port: whether
|
||||
current LLMs can carry a codebase like this, and what actually goes wrong
|
||||
along the way. Game codebases have historically been a rough fit for
|
||||
LLMs — large, stateful, hardware-adjacent, unforgiving of a subtly wrong
|
||||
memory layout — more so for older local models, so this is a useful data
|
||||
point on where that stands now, for better or worse. Judge the result for
|
||||
yourself. I'm one person doing this in my spare time, not a team. See
|
||||
[the full write-up](dev/agentic-development.md) for the setup, timeline,
|
||||
handoff workflow, and an honest assessment of what did and didn't work.
|
||||
- **AI disclosure**: development here used AI coding agents — Claude Code
|
||||
plus a local open-weight model on a single RTX 5090, directed by one person in their
|
||||
spare time. The project is as much a study of that process as it is a
|
||||
port, and the write-up is written to let you judge the result for yourself;
|
||||
it records what happened and takes no position for or against using LLMs
|
||||
on a project like this. See [the full
|
||||
write-up](dev/agentic-development.md) — the setup, timeline, handoff
|
||||
workflow, and an honest account of what did and didn't work.
|
||||
|
||||
## How it works
|
||||
|
||||
The R4300 game code is compiled completely unmodified; the decompilation's
|
||||
control flow is ground truth. The N64's Reality Signal Processor, the graphics
|
||||
The R4300 game code's logic and control flow are the decompilation's, and remain the
|
||||
reference we preserve. The port's changes inside `src/` are few in kind (mostly mechanical 32→64-bit pointer fixes, a couple of approved timing fixes, and the opt-in *All unlocked* hook), each gated behind `#ifdef PORT`. The N64's Reality Signal Processor, the graphics
|
||||
coprocessor that builds and executes each frame's display list, is emulated in
|
||||
software: the port interprets the GBI stream the game emits and translates it
|
||||
software: the port interprets the graphics command stream (GBI) the game emits and translates it
|
||||
to OpenGL, bypassing the RDP entirely. Everything else that would touch N64
|
||||
hardware (video, audio, input, timers, save storage) is shimmed in a small
|
||||
dedicated layer, following the architecture of the Perfect Dark PC port from
|
||||
the same Rare engine family. Full detail: [Internals](internals.md); the bug
|
||||
catalogue: [Porting notes](porting-notes.md).
|
||||
|
||||
## Honest status
|
||||
## Known issues
|
||||
|
||||
- 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
|
||||
Known defects and limitations as of v0.5.0, each with its finding-log
|
||||
reference. The full list, with root causes and fix status: the
|
||||
[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).
|
||||
|
||||
- **Facility — gas leak during Ourumov's monologue (D318).** If gas leaks,
|
||||
he can pause for up to ~10 s before the scripted shootout resumes. The
|
||||
race exists in the N64 original too (where it softlocks permanently);
|
||||
the port detects it and auto-recovers.
|
||||
- **F10 options overlay under native widescreen (D335b).** The overlay
|
||||
stretches with the window instead of pillarboxing like the front-end
|
||||
menus. Legible, cosmetic only; the F10 *Native widescreen* toggle
|
||||
restores the old stretched frame throughout. The world/HUD widescreen
|
||||
rendering itself is correct.
|
||||
- **Front-end Rareware logo (D75).** A subtle texture-filtering artifact;
|
||||
the Nintendo logo and legal page are clean. Cosmetic only.
|
||||
- **`All unlocked` is experimental (D387).** 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.
|
||||
- **No macOS or ARM builds yet** (both are on the
|
||||
[roadmap](https://github.com/jkdansereau/goldeneye-pc-port#roadmap));
|
||||
today the release ships Windows, Linux and Steam Deck. Keyboard, mouse
|
||||
and controller-button rebinding are all supported (defaults in the
|
||||
[README's Controls section](https://github.com/jkdansereau/goldeneye-pc-port#controls)).
|
||||
|
||||
What the release actually installs, and how faithfully it tracks the N64
|
||||
game: [Security & fidelity status](security-and-fidelity-status.md).
|
||||
|
||||
## Documentation
|
||||
|
||||
- [The two-agent development case study](dev/agentic-development.md): goal, setup, timeline, the handoff workflow, and an honest assessment of what did and didn't work.
|
||||
- [Development process](dev-process.md): how work was scoped, partitioned, and budgeted across agents; the finding-log discipline.
|
||||
- [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.
|
||||
The technical docs live under [under the
|
||||
hood](under-the-hood.md) — the architecture, the N64→PC bug catalogue, and
|
||||
how the project is developed. [Building](building.md) covers building and
|
||||
running from source.
|
||||
|
||||
<script>
|
||||
// console-viewer carousel: one media slot, cycle the captures. Vanilla JS.
|
||||
(function () {
|
||||
var slides = [
|
||||
{ src:"img/shots/shot-01.jpg", cap:"Dam — v0.4.0 intro attract" },
|
||||
{ src:"img/shots/shot-03.jpg", cap:"Runway — v0.4.0 intro attract" },
|
||||
{ src:"img/shots/shot-04.jpg", cap:"Surface — v0.4.0 intro attract" },
|
||||
{ src:"img/shots/shot-09.jpg", cap:"Frigate — v0.4.0 intro attract" },
|
||||
{ src:"img/shots/shot-11.jpg", cap:"Surface 2 — v0.4.0 intro attract" },
|
||||
{ src:"img/shots/shot-16.jpg", cap:"Statue — v0.4.0 intro attract" },
|
||||
{ src:"img/shots/shot-20.jpg", cap:"Archives — v0.4.0 intro attract" },
|
||||
{ src:"img/shots/shot-21.jpg", cap:"Cradle — v0.4.0 intro attract" },
|
||||
{ src:"img/shots/shot-24.jpg", cap:"Aztec — v0.4.0 intro attract" },
|
||||
{ src:"img/shots/shot-27.jpg", cap:"Control — v0.4.0 intro attract" },
|
||||
{ src:"img/shots/shot-28.jpg", cap:"Streets — v0.4.0 intro attract" },
|
||||
{ src:"img/shots/shot-29.jpg", cap:"Jungle — v0.4.0 intro attract" }
|
||||
];
|
||||
var img = document.getElementById("vImg"),
|
||||
cap = document.getElementById("vCap"),
|
||||
idx = document.getElementById("vIdx"),
|
||||
i = 0;
|
||||
function show(n) {
|
||||
i = (n + slides.length) % slides.length;
|
||||
img.src = slides[i].src;
|
||||
cap.innerHTML = slides[i].cap;
|
||||
idx.textContent = (i + 1) + " / " + slides.length;
|
||||
}
|
||||
document.getElementById("vPrev").addEventListener("click", function () { show(i - 1); });
|
||||
document.getElementById("vNext").addEventListener("click", function () { show(i + 1); });
|
||||
document.addEventListener("keydown", function (e) {
|
||||
if (e.key === "ArrowLeft") show(i - 1);
|
||||
else if (e.key === "ArrowRight") show(i + 1);
|
||||
});
|
||||
show(0);
|
||||
})();
|
||||
</script>
|
||||
Reference in new issue
Block a user