From cdf43d0140097909b54ddb18449c63dd72a9445e Mon Sep 17 00:00:00 2001 From: James Dansereau <106631954+jkdansereau@users.noreply.github.com> Date: Tue, 13 Oct 2026 09:58:48 -0400 Subject: [PATCH] v0.6.0: license texts in every download; README/NOTICE wording pass - The Windows and Linux bundles shipped without the GCC runtime and SDL2 license texts when the build machine lacked them (CI's MSYS2 has no share/licenses/gcc-libs; CI's Linux image has no dpkg). bundle-win.sh, bundle-linux.sh and package-macos.sh now fall back to in-tree copies: tools_pc/dist/GPL-3.0.txt, GCC-RUNTIME-EXCEPTION.txt, SDL2-LICENSE.txt. - NOTICE / README: say the repository and downloads carry no ROM data or original assets and that the C source is a reconstruction (not "no Nintendo code"); describe the license-text sources. - README: "What this port offers"; split-screen for up to 4 players; the few game-code changes keep N64 behavior or are opt-in; neutral wording for the comparison with the XBLA recompilation projects (rows about their status and motives removed); verification approach stated; release notes drop the 165/240 testing caveat. --- .github/release-notes.md | 3 +- NOTICE | 17 ++++-- README.md | 60 ++++++++++---------- docs/index.md | 4 +- scripts/package-macos.sh | 8 +-- tools_pc/bundle-linux.sh | 2 + tools_pc/bundle-win.sh | 12 ++++ tools_pc/dist/GCC-RUNTIME-EXCEPTION.txt | 73 +++++++++++++++++++++++++ tools_pc/dist/SDL2-LICENSE.txt | 18 ++++++ 9 files changed, 151 insertions(+), 46 deletions(-) create mode 100644 tools_pc/dist/GCC-RUNTIME-EXCEPTION.txt create mode 100644 tools_pc/dist/SDL2-LICENSE.txt diff --git a/.github/release-notes.md b/.github/release-notes.md index 671179ad..d6861cf8 100644 --- a/.github/release-notes.md +++ b/.github/release-notes.md @@ -16,8 +16,7 @@ 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; 165 and 240 have had less testing than - 90 to 144). Auto is the default on fresh installs; an existing + 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* diff --git a/NOTICE b/NOTICE index c93f978a..563e316b 100644 --- a/NOTICE +++ b/NOTICE @@ -29,8 +29,11 @@ their own licenses; each license text ships in the download's licenses/ folder: * Windows: the MinGW-w64 runtime (libwinpthread, libgcc, libstdc++). * macOS: the GCC runtime (libgcc_s, libstdc++) - GPL-3.0 with the GCC Runtime Library Exception 3.1. The GPL-3.0 text the macOS package ships - is tools_pc/dist/GPL-3.0.txt (the Homebrew gcc keg carries only the - exception text and GPL-2.0). + is tools_pc/dist/GPL-3.0.txt. + +The license texts the downloads carry come from the build environment where +it provides them, otherwise from tools_pc/dist/ (GPL-3.0.txt, +GCC-RUNTIME-EXCEPTION.txt, SDL2-LICENSE.txt). Vendored build tooling keeps its own license (none of it is compiled or linked into the PC port; it belongs to the N64 decompilation build): @@ -61,11 +64,13 @@ It does NOT cover: assets -- textures, audio, models, level geometry, in-game text -- are NOT included and are extracted from your own ROM at build time. -NO NINTENDO / RARE CONTENT IS DISTRIBUTED HERE ---------------------------------------------- +NO ROM DATA OR ORIGINAL ASSETS ARE DISTRIBUTED HERE +-------------------------------------------------- -This repository contains NO copyrighted ROM data, game assets (textures, -models, levels, audio, text), or Nintendo/Rare code. Building a playable +This repository contains NO ROM data and none of the original game assets +(textures, models, levels, audio, text), and no original Nintendo/Rare +binaries. The C source under src/ is the decompilation community's +reconstruction of the game's code (see above). Building a playable executable requires a GoldenEye 007 Nintendo 64 ROM that you legally own; the build extracts the required assets from that ROM on your own machine. diff --git a/README.md b/README.md index 77d460ba..5271ba2a 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ **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), 2–4 player split-screen, mouse and keyboard or a modern controller, rebindable controls +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 @@ -17,11 +17,12 @@ for your PC and running from your own ROM. **[Download the latest release](https://github.com/jkdansereau/goldeneye-pc-port/releases)**, then follow the [Quick start](#quick-start). -[Quick start](#quick-start) · [Why this port](#why-play-this-port) · [Controls](#controls) · [Features](#features) · [Settings and files](#settings-and-files) · [Troubleshooting](#troubleshooting) · [Roadmap](#roadmap) · [Building](#building-from-source) · [Legal](#legal) +[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) > [!IMPORTANT] > **You must supply your own GoldenEye 007 ROM.** This repository and its -> downloads contain no Nintendo code or assets, and no ROM. See +> 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 @@ -85,8 +86,8 @@ project is as much a study of that process as it is a port. See - **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: - - **2–4 player split-screen multiplayer** on every multiplayer map, each - player with their own pad, controls and aim settings. + - **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 @@ -246,10 +247,7 @@ left/right adjusts the selected value, **A** opens a page or toggles a row, again) closes. With a keyboard, use `F10`, the arrow keys, Enter and Backspace. -## Why play this port - -The questions people ask most about playing GoldenEye today, and how this -port answers them: +## What this port offers - **Real 60 fps, not a speed hack.** The game's logic counts time in 60 Hz ticks. On the N64 it only drew a frame every 2–3 ticks (20–30 fps); here it @@ -272,25 +270,26 @@ port answers them: presets. If you want the N64 exactly, the **Original** control style turns the pad into a strict virtual N64 controller. - **The whole game.** All 20 solo missions and the credits, with every - difficulty, 007 mode and the cheats, plus 2–4 player split-screen on every - multiplayer map. Your emulator saves (1964, Project64) load directly. + difficulty, 007 mode and the cheats, plus split-screen multiplayer for up to + 4 players. Your emulator saves (1964, Project64) load directly. - **Faithful by construction.** It is the game's own reconstructed source compiled natively, not an emulator and not a remake, so levels, guards and - weapons behave the way the N64 cartridge does. The **Original N64** display - preset switches every visual improvement off at once. + weapons behave the way the N64 cartridge does. The few changes to game code + either keep that N64 behavior where the PC would otherwise differ (frame + rate, widescreen, compiler) or are opt-in extras, and the **Original N64** + display preset switches every visual improvement off at once. - **Modern display options:** native widescreen at any aspect ratio, high resolutions, MSAA, adjustable FOV and draw distance, and HUD scaling. - **Windows, Linux, Steam Deck and (experimental) macOS** from one download page, with an in-game options menu on F10 or the pad's Select button. -What it doesn't do (yet): bots, online play, new or enlarged multiplayer maps, -mod support, and PAL/JP ROMs are not part of this release. See the +Bots, online play, mod support and PAL/JP ROMs are on the [Roadmap](#roadmap). ## Features -- **2–4 player split-screen multiplayer** on every MP map, with the N64's own - setup flow and per-player HUD. +- **Split-screen multiplayer for up to 4 players**, 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 @@ -299,7 +298,7 @@ mod support, and PAL/JP ROMs are not part of this release. See the 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. + the low-end GPUs I test on. - **Frame rates above 60:** 90, 120, 144, 165 or 240 fps, or **Auto** to match your display (up to 240). Extra frames are blended between game ticks (the game still runs at its original rate), at the cost of one tick of latency. It has no effect on @@ -536,7 +535,9 @@ the 21-level sweep, the ABI finding catalog, SDL input, front end. The two handed work back and forth through shared written notes. Up to v0.5.0: 51 days (16 Aug – 6 Oct), 1,537 commits (the public history squashes the v0.4.1–v0.5.0 work into 17), and 419 findings root-caused and logged -(`D1`–`D564`). +(`D1`–`D564`). Every change is checked by comparing captured frames from all +21 solo levels against reference images, crash sweeps on Windows, Linux, +Steam Deck and macOS, and play-testing; there is no unit-test suite. 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). @@ -547,20 +548,17 @@ 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 -actual reconstructed source code, the same lineage as the Perfect Dark PC -port. The other well-known "GoldenEye on PC" projects are something -different: they machine-translate the shipped binary of the *unreleased Xbox -360 XBLA remaster*, a different game on a different codebase with no shared -code with this one. +reconstructed source code, the same lineage as the Perfect Dark PC port. +Other GoldenEye PC projects take a different approach: they statically +recompile the Xbox 360 XBLA remaster, a separate version of the game with its +own codebase. The two don't share code, and they target different versions +of the game. -| | This project | The other well-known "GoldenEye on PC" recompilation projects (and their Steam Deck builds) | +| | This project | The XBLA recompilation projects | |---|---|---| -| **What it ports** | The original **Nintendo 64** game (1997) | The **Xbox 360 XBLA** HD remaster (built ~2007, never released) | -| **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; the source is machine-generated | -| **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** | Pre-1.0 releases; full campaign and split-screen playable at 60 fps or higher (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](#how-it-was-made) on a hard low-level codebase | To get a playable PC release of the remaster | +| **What it ports** | The original **Nintendo 64** game (1997) | The **Xbox 360 XBLA** remaster | +| **How** | Decompilation-based source port: reconstructed C, compiled for the host | Static recompilation of the Xbox 360 executable | +| **Lineage** | [GoldenEye 007 decompilation](https://github.com/n64decomp/007) + [Perfect Dark PC port](https://github.com/fgsfdsfgs/perfect_dark) engine family | The Xbox 360 static-recompilation family | --- diff --git a/docs/index.md b/docs/index.md index acb654f2..fc5575da 100644 --- a/docs/index.md +++ b/docs/index.md @@ -57,8 +57,8 @@ Rare "Indy" engine family, one hardware generation apart.
-- **2–4 player split-screen multiplayer** on every multiplayer map, each - player with their own pad, controls and aim settings. +- **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 diff --git a/scripts/package-macos.sh b/scripts/package-macos.sh index ef8a2af9..7bedf6c8 100755 --- a/scripts/package-macos.sh +++ b/scripts/package-macos.sh @@ -177,12 +177,10 @@ for d in /opt/homebrew/opt/sdl3/LICENSE.txt /opt/homebrew/opt/sdl3/share/license if [ -f "$d" ]; then cp "$d" "$OUT/licenses/SDL3.txt"; break; fi done # The bundled libgcc_s / libstdc++ are GPL-3.0 with the GCC Runtime Library -# Exception. The Homebrew gcc keg carries COPYING.RUNTIME but only GPL-2.0 as -# COPYING, so the GPL-3.0 text ships from the tree. +# Exception. The Homebrew gcc keg carries only GPL-2.0 as COPYING, so both +# texts ship from the tree. cp tools_pc/dist/GPL-3.0.txt "$OUT/licenses/gcc-COPYING3.txt" -if [ -f /opt/homebrew/opt/gcc/COPYING.RUNTIME ]; then - cp /opt/homebrew/opt/gcc/COPYING.RUNTIME "$OUT/licenses/gcc-COPYING.RUNTIME.txt" -fi +cp tools_pc/dist/GCC-RUNTIME-EXCEPTION.txt "$OUT/licenses/gcc-COPYING.RUNTIME.txt" ls "$OUT/licenses" # --- save converter + asset-prep tool (same assembly as bundle-linux.sh) --- diff --git a/tools_pc/bundle-linux.sh b/tools_pc/bundle-linux.sh index 5e58e71c..92305c72 100755 --- a/tools_pc/bundle-linux.sh +++ b/tools_pc/bundle-linux.sh @@ -95,6 +95,8 @@ cp LICENSE "$OUT/licenses/LICENSE-port-MIT.txt" # it exists (Debian/Ubuntu), skip silently elsewhere. SDL2_LIC="$(dpkg -L libsdl2-2.0-0 2>/dev/null | grep -m1 '/copyright$' || true)" [ -n "$SDL2_LIC" ] && [ -f "$SDL2_LIC" ] && cp "$SDL2_LIC" "$OUT/licenses/SDL2.txt" +# No dpkg (CI's build image): ship the zlib text from the tree. +if [ ! -f "$OUT/licenses/SDL2.txt" ]; then cp tools_pc/dist/SDL2-LICENSE.txt "$OUT/licenses/SDL2.txt"; fi # --- save converter (D492): emulator .eep <-> port .eep, stdlib-only ----- mkdir -p "$OUT/tools" diff --git a/tools_pc/bundle-win.sh b/tools_pc/bundle-win.sh index 0964e081..3696974f 100755 --- a/tools_pc/bundle-win.sh +++ b/tools_pc/bundle-win.sh @@ -89,6 +89,18 @@ cp LICENSE "$OUT/licenses/LICENSE-port-MIT.txt" for l in SDL2 zlib gcc-libs libwinpthread mingw-w64; do [ -d "$MINGW/share/licenses/$l" ] && cp -r "$MINGW/share/licenses/$l" "$OUT/licenses/$l" done +# Some MSYS2 installs (CI's) have no share/licenses dir for gcc-libs or SDL2; +# the bundled libstdc++/libgcc_s (GPL-3.0 + GCC Runtime Library Exception) and +# SDL2 (zlib) still carry their texts, from the tree. +if [ ! -d "$OUT/licenses/gcc-libs" ]; then + mkdir -p "$OUT/licenses/gcc-libs" + cp tools_pc/dist/GPL-3.0.txt "$OUT/licenses/gcc-libs/COPYING3" + cp tools_pc/dist/GCC-RUNTIME-EXCEPTION.txt "$OUT/licenses/gcc-libs/COPYING.RUNTIME" +fi +if [ ! -d "$OUT/licenses/SDL2" ]; then + mkdir -p "$OUT/licenses/SDL2" + cp tools_pc/dist/SDL2-LICENSE.txt "$OUT/licenses/SDL2/LICENSE.txt" +fi # --- save converter (D492): emulator .eep <-> port .eep, stdlib-only ----- mkdir -p "$OUT/tools" diff --git a/tools_pc/dist/GCC-RUNTIME-EXCEPTION.txt b/tools_pc/dist/GCC-RUNTIME-EXCEPTION.txt new file mode 100644 index 00000000..e1b3c69c --- /dev/null +++ b/tools_pc/dist/GCC-RUNTIME-EXCEPTION.txt @@ -0,0 +1,73 @@ +GCC RUNTIME LIBRARY EXCEPTION + +Version 3.1, 31 March 2009 + +Copyright (C) 2009 Free Software Foundation, Inc. + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + +This GCC Runtime Library Exception ("Exception") is an additional +permission under section 7 of the GNU General Public License, version +3 ("GPLv3"). It applies to a given file (the "Runtime Library") that +bears a notice placed by the copyright holder of the file stating that +the file is governed by GPLv3 along with this Exception. + +When you use GCC to compile a program, GCC may combine portions of +certain GCC header files and runtime libraries with the compiled +program. The purpose of this Exception is to allow compilation of +non-GPL (including proprietary) programs to use, in this way, the +header files and runtime libraries covered by this Exception. + +0. Definitions. + +A file is an "Independent Module" if it either requires the Runtime +Library for execution after a Compilation Process, or makes use of an +interface provided by the Runtime Library, but is not otherwise based +on the Runtime Library. + +"GCC" means a version of the GNU Compiler Collection, with or without +modifications, governed by version 3 (or a specified later version) of +the GNU General Public License (GPL) with the option of using any +subsequent versions published by the FSF. + +"GPL-compatible Software" is software whose conditions of propagation, +modification and use would permit combination with GCC in accord with +the license of GCC. + +"Target Code" refers to output from any compiler for a real or virtual +target processor architecture, in executable form or suitable for +input to an assembler, loader, linker and/or execution +phase. Notwithstanding that, Target Code does not include data in any +format that is used as a compiler intermediate representation, or used +for producing a compiler intermediate representation. + +The "Compilation Process" transforms code entirely represented in +non-intermediate languages designed for human-written code, and/or in +Java Virtual Machine byte code, into Target Code. Thus, for example, +use of source code generators and preprocessors need not be considered +part of the Compilation Process, since the Compilation Process can be +understood as starting with the output of the generators or +preprocessors. + +A Compilation Process is "Eligible" if it is done using GCC, alone or +with other GPL-compatible software, or if it is done without using any +work based on GCC. For example, using non-GPL-compatible Software to +optimize any GCC intermediate representations would not qualify as an +Eligible Compilation Process. + +1. Grant of Additional Permission. + +You have permission to propagate a work of Target Code formed by +combining the Runtime Library with Independent Modules, even if such +propagation would otherwise violate the terms of GPLv3, provided that +all Target Code was generated by Eligible Compilation Processes. You +may then convey such a combination under terms of your choice, +consistent with the licensing of the Independent Modules. + +2. No Weakening of GCC Copyleft. + +The availability of this Exception does not imply any general +presumption that third-party software is unaffected by the copyleft +requirements of the license of GCC. + diff --git a/tools_pc/dist/SDL2-LICENSE.txt b/tools_pc/dist/SDL2-LICENSE.txt new file mode 100644 index 00000000..23abb73f --- /dev/null +++ b/tools_pc/dist/SDL2-LICENSE.txt @@ -0,0 +1,18 @@ +Copyright (C) 1997-2025 Sam Lantinga + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +