From 395c616fc5020b26af243f56ba0d9af9e1d0b53c Mon Sep 17 00:00:00 2001 From: James Dansereau <106631954+jkdansereau@users.noreply.github.com> Date: Mon, 14 Sep 2026 00:48:30 -0400 Subject: [PATCH] docs: cut-content research backlog from TCRF export (first pass) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cross-reference the local TCRF 'cutting room floor' export (scratchpad/backlog-scrape/restore-cut-content-mod, gitignored) against the decomp source and extracted asset tables. Article bodies were lost to a Cloudflare challenge at scrape time; findings rest on the ~170 intact article images + all image filenames, each mapped to ROM object/level evidence: - A: full debug menu (U+D C-hold) decompiled in debugmenu_handler.c — free cam, level switch, ramrom record/replay, screenshot grabs; all compiled into PC build - B: cut weapons (taser/rocket/grenade/P90/spectre/autoshot) have models + stats + SFX; rocket/grenade/P90 grantable via existing cheat codes (cheat.c) - C: 'unused items' page maps 1:1 to file_resource_table entries with use-logic - D: 8 commented-out MP map entries in front.c with dev notes (Citadel/Statue/ Cradle/Aztec/Runway/Dam/Depot/Frigate) - E: per-level unused props + orphaned level geometry (Crypt has bg+briefing but no LEVELID; len/dish/cat/oat/arec/ame/ark/ref dirs beyond shipped set) - F/G/H: unused faces, prerelease comparison pairs, dev-build video embeds Feasibility tiers 0-3 with the port-layer-only constraint called out. --- docs/dev/CUT-CONTENT-BACKLOG.md | 327 ++++++++++++++++++++++++++++++++ 1 file changed, 327 insertions(+) create mode 100644 docs/dev/CUT-CONTENT-BACKLOG.md diff --git a/docs/dev/CUT-CONTENT-BACKLOG.md b/docs/dev/CUT-CONTENT-BACKLOG.md new file mode 100644 index 00000000..d357fcb0 --- /dev/null +++ b/docs/dev/CUT-CONTENT-BACKLOG.md @@ -0,0 +1,327 @@ +# CUT-CONTENT-BACKLOG — TCRF "cutting room floor" findings vs decomp/port + +Research branch: `research/cut-content-backlog`. Source of truth: the local TCRF +export at `scratchpad/backlog-scrape/restore-cut-content-mod/` (gitignored). +Working notes: `docs/dev/notes/cut-content/` (gitignored). + +## 0. Source & limitations + +The export covers six TCRF articles on GoldenEye 007 (N64): + +| Article | Export state | +|---|---| +| GoldenEye 007 (main) | **Body blocked** (Cloudflare challenge page). All ~172 article image *filenames* captured; images themselves are CF stubs. | +| Unused items | **Body blocked**, but all 20 article images captured intact. | +| Unused stuff by level | **Body blocked**, but ~150 article images captured intact (the richest page). | +| Prerelease | **Body blocked**; image filenames + 7 YouTube embeds captured. | +| Bugs / Notes | Body + images blocked; nothing usable. | + +So claims below are derived from (a) the captured image filenames/imagery, which +are descriptive and map 1:1 onto ROM object names, and (b) direct cross-reference +against the decomp source (`src/`) and extracted asset tables (`assets/obseg/`). +Anything not verifiable in code/assets is marked **unverified** — re-scrape the +article bodies (or read TCRF directly) before acting on those. + +Article imagery that *is* intact lives under the export's `*_files/` dirs; image +names carry a per-page suffix (`_KYPp` main, `_LxbF` unused items, `_wAKT` by +level, `_1vt` prerelease). + +## 1. Findings + +### A. Debug menu & dev tools — fully in the ROM, fully compiled into the PC build + +TCRF main page images: `GEDebugMenu`, `GECheatOptions`, `GoldenEye-displayspeed`, +`GoldenEye-moveview`, `GoldenEye-LineMode`, `GoldenEye-testingmanpos`, +`GoldenEye-gunwatchpos`. + +All of these exist in decompiled code: + +- **Debug menu** — `src/game/debugmenu_handler.c` (1202 lines). Opened by holding + **U + D C-buttons** (`debug_menu_processor`, ~line 451; wired into `boss.c:551` + and the main game loop). Full option list at lines 116–185: `move view`, + `stan view`, `bond view`, `level` / `region` / `scale` (level switching), + `play title`, `bond die`, `select anim`, `gun pos`, `flash colour`, + `hit colour`, `music`, `sfx`, `invincible`, `visible`, `collisions`, + `all guns`, `max ammo`, `display speed`, `background`, `props`, + `stan hit` / `stan region` / `stan problems`, `print man pos`, + `port close` / `port inf` / `port approx`, `pr room loads`, + `show mem use` / `show mem bars`, `grab rgb` / `grab jpeg` / `grab task` + (screenshots), `rnd walk`, **`record ramrom` / `replay ramrom` / + `save ramrom` / `load ramrom`** (input recording/replay!), `auto y aim`, + `auto x aim`, `agent` / `all` / `fast` (unlock flags), `objectives`, + `marg top/bot/left/right/reset`, `screen size`, `screen pos`, + `show patrols`, `intro` / `intro edit` / `intro pos`, `world pos`, + `gun key pos`, `vis cvg`. +- **Free camera** — `src/game/debug_camera.c` (the "move view" option). +- **Load-all-models tool** — `src/game/deb_loadallmodels.c` (used by + `initguards.c`; dumps every model — how the TCRF screenshots of unused + models were likely made). +- **Line mode** — `CHEAT_LINEMODE` in `src/game/cheat.c:685` (wireframe toggle, + cheat-menu unlockable; `front.c:1017`). +- Screenshot options (`grab rgb`/`grab jpeg`) call `indyGrabRgb32bit()` / + `indyGrabJpg32bit()` — N64 VI grabs; on PC these are the natural hook for the + port's existing screenshot QoL (see `feat/qol-mute-screenshot` lineage). + +**Status: Tier 0.** Everything compiles into the PC build (`CMakeLists.txt` +`GLOB_RECURSE src/game/*.c`). The debug menu should already work in the PC port +if U+D C-buttons can be produced by `port/src/input.c`. *Verify in-game* (open +menu, toggle `display speed`, use free cam). Mod value: document it; consider a +config/keybind that synthesizes the U+D c-button hold, and mapping `grab rgb` +to the port's screenshot path. + +### B. Cut weapons — fully functional in the ROM, grantable via existing cheat codes + +TCRF images (main + prerelease pages): `GoldenEye-Taser[PR]`, `GoldenEye-KF7[PR]` +(+`KF7Watch`), `GoldenEye-GrenadeLauncher[PR]`, `GoldenEye-RocketLauncher[PR]` +(+`RocketLauncherWatch`), `GoldenEye-RifleLauncher` (+`RifleLauncherCheat`), +`GE64_Shotgun1`, watch variants `MagnumWatchPR`, `PP7WatchPR`, `KlobbWatchPR`, +`TaserWatch`. + +Evidence in code/assets: + +- Model + stat files exist for every cut gun under `assets/obseg/gun/`: + `taser/`, `rocketlaunch/`, `grenadelaunch/`, `fnp90/`, `spectre/`, + `autoshot/`, `ak47/`, `m16/`, `skorpion/` … each with + `gunWeaponStat.inc.c` + `ModelFileHeader.inc.c`. +- `assets/obseg/gun/gunWeaponStats.inc.c`: complete `WeaponStats` for + `taser_stats` (line ~365), `rocketlaunch_stats` (~305), + `grenadelaunch_stats` (~295), plus `watchlaser_stats`, `tank_stats`, + `bombcase_stats`, etc. These are data-driven — the weapon engine + (`src/game/gun.c`, `gunfire.c`) will run them. +- First-person view cases exist: `src/game/bondview_r.c:38` handles + `ITEM_GRENADELAUNCH`, `:41` `ITEM_ROCKETLAUNCH`. +- **Cheat codes grant them**: `src/game/cheat.c` — `CHEAT_2X_ROCKET_LAUNCHER` + (line 711), `CHEAT_2X_GRENADE_LAUNCHER` (712), `CHEAT_2X_RCP90` (713), + plus unlock sequences (`CHEAT_UNLOCK_2XGL/2XRL/2XFNP0`, lines ~695–734) and + the grant logic at lines 1277–1310: `bondinvAddInvItem(ITEM_ROCKETLAUNCH)` / + `give_cur_player_ammo(AMMO_ROCKETS, …)` etc. Note the `#if defined(BUGFIX_R1)` + guards — check which region macros the PC build defines (non-negotiable #3). +- Taser SFX exist: `GUN_TASER_SFX` / `GUN_TASER_LOOP_SFX` (`src/bondconstants.h:2271`). +- `ITEM_TASER` is in the item enum and used as an inventory bound in + `bondinv.c:854` (JP-text-trigger branch) — the taser was closest to shipping. + +**Status: Tier 0/1.** Rocket launcher, grenade launcher and FN P90 are +playable today via the game's own cheat codes (single-player). Taser/Spectre/ +AutoShot have no cheat path but everything needed is in the binary; a +port-layer toggle calling the same `bondinvAddInvItem` + +`give_cur_player_ammo` pair the cheats use would be a clean mod (no game-logic +change — it replicates an existing code path). Watch-mounted variants +(KF7/Magnum/PP7/Taser watch) are *not* in the item enum — likely cut before +data landed; **unverified** whether any model exists beyond what TCRF shows. + +### C. "Unused items" page (intact imagery) — objects with full logic, never placed + +The 20 intact images correspond exactly to ROM object entries +(`assets/obseg/file_resource_table.inc.c`, 781 entries): + +| Image | Resource ID | Notes | +|---|---|---| +| `GE007-AudioTape` | `AUDIOTAPE` / `CHRAUDIOTAPE` (lines 125, 265) | pickup + prop variants | +| `GE007-BombCase` | `BOMBCASE` (129) | has full `bombcase_stats` (throwable explosive) | +| `GE007-Controller` | N64 controller model (`joypad/` dir in gun table) | desk prop | +| `GE007-WatchMagnetRepel` | `ITEM_WATCHMAGNETREPEL` (`bondconstants.h:4190`) | watch function, use-logic present | +| `GEMicroCamera` | `MICROCAMERA` (176) + `AMMO_MICRO_CAMERA` | | +| `GoldenEye-Weapon_Case` | `ITEM_WEAPONCASE` (`gunfire.c:3066` use-case) | | +| `GE007-PolarizedGlasses` | `POLARIZEDGLASSES` (185) + `ITEM_POLARIZEDGLASSES` | `darkglasses/` also present | +| `GoldenEye-Plans` | `PLANS` (183) | `blueprints/` variant too | +| `GoldenEye-Watch_Identifier` | `WATCHIDENTIFIER` (208) + `ITEM_WATCHIDENTIFIER` (`gunfire.c:3076`) | 4th watch function with use-anim, never spawned | +| `GoldenEye-Safecracker` | `SAFECRACKERCASE` (190) | | +| `GoldenEye-Watch_Communicator` / `Watch_Geiger_Counter` | `ITEM_WATCHCOMMUNICATOR` / `ITEM_WATCHGEIGERCOUNTER` (`bondconstants.h:4188-89`) | shown for contrast — these *are* used (Aztec) | +| `GEGasKeyring` | `GASKEYRING` (157) + `ITEM_GASKEYRING` | | + +All have `GUN_ANIM_STATE_USE_ITEM` handling in `gunfire.c:3060-3084` — i.e. the +game can *use* them; level data just never places them. + +**Status: Tier 1/2.** Granting any of these to Bond is a port-layer item-spawn +(same mechanism as §B). Actually *placing* them in levels requires ROM/level-data +editing (a level editor or hand-patched object tables) — Tier 2, out of scope +for this repo but viable as a data mod. + +### D. Cut multiplayer maps — 8 commented-out menu entries with dev notes + +`src/game/front.c:556-573` `multi_stage_setups[]`: the shipped MP list is +Random/Temple/Complex/Caves/Library/Basement/Stack (default) + Facility/Bunker2/ +Archives/Caverns/Egypt (progression-unlocked). Immediately below, **commented +out with in-source dev annotations**: + +```c + //{... LEVELID_CITADEL ...}, //Citadel (old format setup) + //{... LEVELID_FRIGATE ...}, //dest (has xbla setup) + //{... LEVELID_STATUE ...}, //stat (works) + //{... LEVELID_CRADLE ...}, //crad (works) + //{... LEVELID_AZTEC ...}, //azt (needs setup) + //{... LEVELID_RUNWAY ...}, //runway (xbla setup) + //{... LEVELID_DAM ...}, //dam (xbla setup) + //{... LEVELID_DEPOT ...}, //depot (xbla setup) +``` + +TCRF imagery matches: `GECitadel*` (5 screenshots, main page), +`GEStatueMulti`, `GECradleMulti`, the whole Depot image set (`DepotCrateStack`, +`DepotRockets`, `DepotSafeTable`, `DepotSiloPipe[Ed]`, `DepotTrailers`, +`DepotPhoto`), and `GoldenEye-FrigateMap`. + +The port already boots every one of these standalone (`-level_XX`; see +`docs/dev/LEVEL-STATUS.md` — Statue `-level_22`, Train `-level_25`, etc. all +PASS). So the geometry, AI setup and briefings +(`assets/obseg/brief/UbriefdepoZ.c`, `UbrieftraZ.c`, …) are intact; only the MP +menu entry was removed. + +**Status: Tier 3 (mod fork).** Re-enabling = editing a game data table in +`src/game/front.c` — that's a game-logic change, disallowed in this repo +(non-negotiable #2). Viable as a separate mod branch/fork ("8 more MP maps"), +or as a documented cheat-menu route (the debug menu's `level`/`region` options +may already jump to any level ID — verify). + +### E. Per-level unused props & geometry ("Unused stuff by level" page) + +~150 intact screenshots, grouped by level. Cross-referenced against the object +table and level IDs: + +- **Streets** (campaign stage 12; `LEVELID_STREETS`): an entire prop kit was + never placed — `StreetsCars`, `StreetsLamp[Base/Big]`, `StreetsSign[2/3]`, + `StreetsTrafficLight`, `StreetsShovel`, `StreetsCrossing`, plus two cut set + pieces `GE64-StreetsArea1/2` and Ourumov's car driving/crashing + (`StreetsOuruGo`, `StreetsOuruCrash`, `GEOurumovsCar`). Suggests a cut + street-chase scene. +- **Silo**: `SiloVentShaft`, `SiloLadder`, `SiloLaunchDoors`, + `SiloWalkway2Door/Guard`, `SiloMissingHandrail` (a bug/oddity screenshot), + `GoldenEye_UnusedStartingPoint`, and prerelease-only `PRSiloElevator`, + `PRSiloLamps`, `SiloCutWalkway`, **`ThirdSiloEditor`** (editor view of a + third silo that didn't ship). +- **Facility**: PR-vs-final wall sets (`FacilityWalls[Final]`, + `PRFacilityWalls`, `ArchivesWalls`), plus cut rooms: `FacilityBathroom`, + `FacilityConveyor`, `FacilityGasTanks`, `FacilityLabTanks`, + `FacilityWalkway`, `FacilityArmedScientistPR`, `FacilitySatBoxTex`, + `GoldenEye007-FacilityPhoto`. +- **Archives**: `ArchivesOverview`, `ArchivesLamp[Scan]`, `ArchivesPhoto`, + `PRArchivesNoWalls` (wall-less build view). +- **Bunker**: `BunkerExtraMons[Side]` (extra monster/guard spawns), + `BunkerPIP`, PR `BunkerLamp`. +- **Caverns**: `CavernsPursueObj` (a cut "pursue" objective marker), PR + `CavernsWalkway`. +- **Dam**: `DamIsland`, `DamPlatform`, `DamDockDoors`, `DamEndDuct`, + `DamTruckDoor`; region-diff shots `DamCompUS/EU`. +- **Frigate**: `FrigateHarpoonScan` (scan of a harpoon model), + `PRTrainTargetGlass`, `Pdest_harpoonZ[2]`, `Ptorpedo_rack`, + `FrigateMoneypennyPR` (a Moneypenny model in the Frigate PR build!), + region-diff `FrigateIntroUS/JP`. +- **Aztec/Temple**: `AztecConsolePads1-4`, `GE-AztScreen2781/2789`, + `AztExtraMainframe`, `AztDronePadsLabel`, `unused-Aztec-Path` (a whole + unplaced path), `EgyptianRed/WhiteClouds` (two skybox variants), + `TempleSkySolo/Multi`, PR: `AztBlueSuitPR` (cut enemy suit), + `AztHeavyFogPR`, `AztTableScreensPR`. +- **Surface**: `SurfaceBookCrate`, `SurfaceObsPad`, `SurfaceTower`, + `SurfaceJerryCan`, `SurfaceHutTable`, `SurfacePropHut`, PR + `SurfaceOverviewPR`, `SurfaceVent[PR]`, `SurfaceDish[PR]`. +- **Train** (campaign stage 14): `GE007-TrainSecretRoom` (a hidden room), + `TrainTargetGlass`. +- **Misc props/vehicles**: `GEMotorbike`, `GERedTruck`, `GESovietBoat`, + `GEHelicopterPilot`, `GEBiker`, `GoldenEye-moonfemale` (`moonfemale/` chr + model exists), `OurumovKey/Briefcase`, `GEDeskMat`, `GoldenEye-Crypt` + (confirmed orphaned map — see note below), + `GE64-BridgeRooms`, `GEJunglePicture`, `Runwaypicture`, + `Controlicon`, `Cactus`. +- **Orphaned level geometry** — `assets/obseg/bg/` holds per-level dirs for + `ame arch arec ark azt cat cave crad cryp dam depo dest dish len oat ref run + sev sevb sevx silo stat tra`. Notable: `cryp` (Crypt) has full geometry + + briefing (`UbriefcrypZ.c`) but **no `LEVELID_CRYPT` entry** in + `bondconstants.h` — fully orphaned. `len` (Lenin statue area, cf. + `StatueLeninPR`) and `dish`/`cat`/`oat`/`arec`/`ame`/`ark`/`ref` are further + level dirs beyond the shipped set. No `citadel` dir — its geometry was + either removed or shared (TCRF's 5 Citadel screenshots show a finished map, + so it existed in some build). + +**Status: Tier 2.** All models are in the ROM's object table (spot-checked: +`PchrtesttubeZ`, `Pdest_harpoonZ`, `Pdoor_roller1-4Z`, `PhatfurryZ`, +`Pletter_tray1Z`, `Pmissile_rackZ`, `PsilencerZ`, `Psteel_door2[ b]Z`, +`Ptorpedo_rack`). Placing them needs level-data editing (object spawn tables) — +a data-mod / level-editor project, not a port change. The PR-vs-final texture +pairs (`*PR__1vt.jpg`) are interesting for a "pre-release textures" cosmetic mod +via the `tools_pc` asset pipeline — but the PR ROM itself isn't available here, +so source assets would have to come from TCRF's screenshots (low-res) or a +donated PR dump. + +### F. Unused characters & faces + +TCRF main-page imagery: `UnusedFace1/2/3` (each with F/S1/S2 views), +`GE64-FemHead1-4`, `KenFaceUnused/Used`, `Rosika[Compare]`, `SciCompare`, +`FemaleSci`, `GEBonds`, `Terrorists`, `TerroristBiker`, `StPetersburgGuard`, +Bond-suit sets named after actors: `Connery*`, `Dalton*`, `Moore*` (each with +HeadFront/Back/Left/Right + Jacket pieces), `GEArmor[our]`. + +Cross-reference: + +- The MP character table (`front.c:601+` `mp_chr_setup[]`) is huge — ~40 named + entries beyond the 8 selectable, including `ROSIKA`, `KARL`, `MARTIN`, + `MARK`, `DAVE`, `DUNCAN`, … `TERRORIST`, `BIKER`, `STPETERSBURGGUARD`, + `HELICOPTERPILOT` — Brosnan-body + swapped-head combos. The "unused faces" + are almost certainly extra head models in this pool that no body/entry uses. +- Head model dirs exist under `assets/obseg/chr/`: `headken` (the Ken face), + `headbrosnan*` (4 costume variants), `moonfemale`, plus ~30 named heads. + The actor-named suits (Connery/Dalton/Moore) do **not** appear as chr dirs — + likely cut before model export, or embedded in a shared body file. + **Unverified** which exact models the TCRF face shots show. + +**Status: Tier 2/3.** Cosmetic mod (extra MP faces) = asset-level work if the +models are in the ROM; verify by dumping `assets/obseg/chr/*/Model.c` headers. + +### G. Prerelease / dev-build evidence + +Prerelease page (body blocked; filenames + embeds only): + +- PR-vs-final comparison pairs: Taser, KF7, GrenadeLauncher, RocketLauncher + (+watch versions), SurfaceVent/Dish, `StatueLeninPR`, Facility walls/rooms + (§E), ArchivesWalls, CavernsWalkway, SiloCutWalkway, ThirdSiloEditor, + PRSiloElevator, BunkerLamp, OutletConsoles. Pattern: the PR build had more + weapons (watch-mounted guns!) and different Facility/Silo/Aztec geometry. +- **Dev-build videos** (YouTube embeds captured in the export): + - "Goldeneye 007 - Shoshinkai/Space World 1996" + - "Nintendo of America E3 1996 Take Away Video (VHS Rip)" + - "Goldeneye Beta WalMart Video" + - "Goldeneye 007 Promotional Trailer 1996" + - "N64 vous n'en reviendrez pas (VHS RIP 1997)" + - "64History - N64 B-Roll (1995)" + - "Escape (Banjo-Kazooie, GoldenEye 007)" — engine sibling footage. + Useful for dating PR features; not actionable in-repo. + +### H. Misc oddities (main page, unverified) + +- `GoldenEye007MickeyMouse` (by-level page, 2 KB image) — no "mickey" object in + the resource table; likely a texture/model easter egg spotted in a level. +- `Unused_bond_walk.gif` — an unused Bond walk animation (check + `assets/animationtable_entries.c` for orphaned anim IDs). +- `GoldenEye007-MovieLogoUnused` / `-MovieNoLogoUnused` — alternate intro logo + frames (title sequence data; `src/game/brief*`? verify). +- `GE_UnusedAlarm`, `GoldenEye-BloodImpact` / `BoxBlood` / PR `OpaqueBlood` — + blood-effect variants (cf. `src/game/blood_animation.c`). +- `GoldenEye007-BarrelUnused` / `-SmallBarrelUnused` — barrel props never placed. +- `GoldenEye-OddDay`, `Sight[Alt]`, `MountainTex`, `background`, `Pbin1Z`, + `PchrtesttubeZ[Explode]`, `PitonGunBungee`, `Psev_door[3_wind]Z` — props in + the table, placement unverified. +- Bugs & Notes articles: **nothing recoverable from this export** — re-scrape. + +## 2. Feasibility summary + +| Tier | Item | Effort | Where it lands | +|---|---|---|---| +| **0 — already works** | Debug menu (U+D C-hold), free cam, line mode, ramrom record/replay, cheat-grantable rocket/grenade/P90 | verify in-game; document keybinds | docs + maybe `input.c` keybind for U+D c-buttons | +| **1 — port-layer hook** | Grant taser/spectre/autoshot + unused items (watch identifier, bomb case, …) via config toggle replicating the cheat grant path (`bondinvAddInvItem` + `give_cur_player_ammo`) | small; follow F10-toggles pattern (`feat/f10-game-toggles`) | `port/src/` only | +| **2 — data/asset mod** | Place unused props per level; extra MP faces; PR texture swap | needs level-editor or object-table patching; separate project | data mod, not this repo's code | +| **3 — game-logic change (mod fork)** | Re-enable 8 cut MP maps (`front.c` table), campaign reordering | one-line-per-map table edits + setup fixes ("xbla setup" = unknown editor flag) | separate mod branch/fork only | + +## 3. Next steps + +1. **In-game verification pass** (PC build): open debug menu; confirm free cam, + `display speed`, level switch; enter the 2X rocket/grenade/P90 cheat codes; + screenshot via `grab rgb`. Record results here + findings.md if anything new + breaks (Dxx). +2. Confirm which region macros the PC build defines vs the `BUGFIX_R1` guards in + the weapon-grant cheats (non-negotiable #3) — the grants may be dead code in + our build. +3. Dump `assets/obseg/chr/` model headers to identify the UnusedFace1-3 / + FemHead1-4 models concretely. +4. Re-scrape TCRF article bodies (main/prerelease/bugs/notes) to upgrade + "unverified" claims; the CF challenge blocked both the original scrape and a + direct `api.php` attempt. +5. If Tier-1 item granting is wanted: spec it as an F10 toggle set, port-layer + only, each entry citing the cheat-code precedent in `cheat.c`.