Files
goldeneye-pc-port/docs/dev/LEVEL-PLAYTEST.md
T
James Dansereau 811e9a62cf Bug-fix pass for reported issues #114-#119 (D424-D434)
Recoil byte order, crouch-tank interactions, auto-fire cadence in ticks,
hipfire turret tracking, light-fixture Gfx index parsing, hit-type byte
reads. Rule-2 sign-offs recorded for D424 and D427. Documentation re-triaged
onto a single tracker (docs/ROADMAP.md).

Refs: D424 D425 D426 D427 D428 D430 D431 D432 D434 #114 #115 #116 #117 #118 #119
2026-10-06 18:35:38 -04:00

87 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# LEVEL-PLAYTEST — WS6 human completion-validation checklist
> **Historical record — do not act on status claims in this file.** This checklist predates the v0.4.0 input model (D332–D337) and the campaign sign-off; use it as a template only. Current open work and status: [`docs/ROADMAP.md`](../ROADMAP.md) (2026-09-29).
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.)