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
3.9 KiB
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(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
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.)