mirror of
https://github.com/jkdansereau/goldeneye-pc-port.git
synced 2026-10-24 00:02:45 +02:00
The campaign has 20 playable missions (SP_LEVEL_MAX // 20 in bondconstants.h; mission_folder_setup_entries in front.c has exactly 20 entries). The old '21' counted -level_54 (LEVELID_CUBA), which the front end jumps to after the final mission for the extended cast display + credits scroll (do_extended_cast_display / bondviewRenderCredits, D129) - it is not a selectable mission. - README, docs/index.md, .github/release-notes.md, docs/security-and-fidelity-status.md: 21 -> 20 in current-status claims - AGENTS.md phase status: same correction - docs/dev/LEVEL-STATUS.md + LEVEL-PLAYTEST.md: relabel the level list; counting note explains historical '21/21 PASS' sweep results = 21 stage boots (20 missions + ending sequence) - social-preview card: stat line 21 -> 20, PNG regenerated (1280x640)
85 lines
3.7 KiB
Markdown
85 lines
3.7 KiB
Markdown
# LEVEL-PLAYTEST — WS6 human completion-validation checklist
|
|
|
|
Run **after** `docs/dev/LEVEL-STATUS.md` is all-21 load+render PASS. This is
|
|
the part that needs real input — a human plays each level start to finish
|
|
and confirms it matches retail. Findings feed a WS5-style triage round
|
|
(log each as a crash-class row or a new Dxx candidate).
|
|
|
|
## How to run one level
|
|
|
|
```sh
|
|
export PATH="/c/msys64/mingw64/bin:$PATH" && ./build-pc.sh ntsc-final
|
|
./build-pc/ge007.x86_64.exe -level_XX # bare — pools auto-injected (D121)
|
|
```
|
|
|
|
Controls: `port/src/input.c` — keyboard+mouse or SDL gamepad. Mouse-look is
|
|
mode-aware since M-24 (hold RMB = analog aim). **M-24 input/QoL changes +
|
|
what to verify while playing: `docs/M-24-QOL-REVIEW.md`.** Tune feel in
|
|
`data/ge007.ini` `[Input]` (`MouseAimSpeed` 50, `MouseTurnSpeed` 100,
|
|
`MouseInvertY` 0) with the game closed. Known residual (do not re-log):
|
|
D118a — hipfire pitch is digital vs analog yaw. **F12** = screenshot to
|
|
`ppm/shot_NNN.ppm`. **Mouse wheel** = cycle weapon. **Alt-Enter** =
|
|
fullscreen. Alt-tab away frees the cursor (re-grabs on focus). Title bar
|
|
shows FPS.
|
|
Difficulty for a bare `-level_XX` boot defaults to Agent; use the menu path
|
|
(mission select → difficulty) to test 00/007.
|
|
|
|
Objective status: `src/game/objective_status.c`
|
|
(`get_status_of_objective()` `:161`); objective propDefs are
|
|
`PROPDEF_OBJECTIVE_*` (`bondconstants.h:4332`).
|
|
|
|
## Per-level checklist (copy this block per level)
|
|
|
|
```
|
|
### <Level> (-level_XX) difficulty tested: [ ] Agent [ ] Secret Agent [ ] 00 Agent
|
|
|
|
- [ ] Spawn point + start orientation match retail
|
|
- [ ] Geometry / textures / lighting recognisable, no missing rooms
|
|
- [ ] Guards spawn, path, react, take/deal damage, die correctly
|
|
- [ ] Doors / lifts / switches / destructibles work
|
|
- [ ] Pickups (ammo, armour, key items, gadgets) present and collectable
|
|
- [ ] Each difficulty-gated objective reachable AND registers COMPLETE
|
|
(objective_status)
|
|
- [ ] Alarms / reinforcements / scripted events fire
|
|
- [ ] Level exit trigger fires → MISSION COMPLETE (not a hang / wrong screen)
|
|
- [ ] Auto-advance to next briefing works
|
|
- [ ] Frame rate + timing acceptable
|
|
- Notes / defects:
|
|
```
|
|
|
|
## The 20 solo missions (+ ending sequence; mission order — numbers = `-level_XX`)
|
|
|
|
| # | Level | -level | Briefing asset |
|
|
|---|---|---|---|
|
|
| 1 | Dam | 33 | UbriefdamZ |
|
|
| 2 | Facility | 34 | UbriefarkZ |
|
|
| 3 | Runway | 35 | UbriefrunZ |
|
|
| 4 | Surface 1 | 36 | UbriefsevxZ |
|
|
| 5 | Bunker 1 | 09 | UbriefsevbunkerZ |
|
|
| 6 | Silo | 20 | UbriefsiloZ |
|
|
| 7 | Frigate | 26 | UbriefdestZ |
|
|
| 8 | Surface 2 | 43 | UbriefsevxbZ |
|
|
| 9 | Bunker 2 | 27 | UbriefsevbZ |
|
|
| 10 | Statue | 22 | UbriefstatueZ |
|
|
| 11 | Archives | 24 | UbriefarchZ |
|
|
| 12 | Streets | 29 | UbriefpeteZ |
|
|
| 13 | Depot | 30 | UbriefdepoZ |
|
|
| 14 | Train | 25 | UbrieftraZ |
|
|
| 15 | Jungle | 37 | UbriefjunZ |
|
|
| 16 | Control | 23 | UbriefcontrolZ |
|
|
| 17 | Caverns | 39 | UbriefcaveZ |
|
|
| 18 | Cradle | 41 | UbriefcradZ |
|
|
| 19 | Aztec | 28 | UbriefaztZ |
|
|
| 20 | Egypt | 32 | UbriefcrypZ |
|
|
| — | *Ending sequence* ("Cuba") | 54 | not a playable mission — cast/credits stage (D129) |
|
|
|
|
(Mission table: `front.c`, `mission_folder_setup_entries` — exactly 20
|
|
playable missions; the game's own enum says it, `SP_LEVEL_MAX // 20` in
|
|
`bondconstants.h`). "Cuba" (`-level_54`, `LEVELID_CUBA`) is **not** a
|
|
selectable mission: after the final mission the front end jumps straight to
|
|
it for the extended cast display + credits scroll
|
|
(`front.c` `selected_stage = LEVELID_CUBA` → `do_extended_cast_display(TRUE)`;
|
|
`bondviewRenderCredits`, D129). Older docs and sweep logs count it as a 21st
|
|
"level" — the campaign is 20 missions; "21/21" sweep results mean 21 stage
|
|
boots, of which 20 are missions.)
|