diff --git a/tools_pc/framediff.py b/tools_pc/framediff.py index c8372161..caba350f 100644 --- a/tools_pc/framediff.py +++ b/tools_pc/framediff.py @@ -51,7 +51,7 @@ threshold, 1 = at least one frame/region over threshold, 2 = usage / IO error (e.g. a golden frame with no candidate). Regenerate the golden set (after a deliberate visual change): - GE_PCDUMP="400-880:240" ./build-pc/ge007.x86_64.exe -level_09 + GE_PCDUMP="640-1120:240" ./build-pc/ge007.x86_64.exe -level_09 (with data/ge007.ini = only [Window] Width=640 Height=480; see tools_pc/golden/README.md) python tools_pc/framediff.py ppm --update diff --git a/tools_pc/golden/README.md b/tools_pc/golden/README.md index 37e8fb75..e2d71774 100644 --- a/tools_pc/golden/README.md +++ b/tools_pc/golden/README.md @@ -1,7 +1,7 @@ # Golden baseline frames `frame_NNNNNN.png` — reference `GE_PCDUMP` captures for `framediff.py` -(`-level_09` BUNKER1: end of the intro + settled gameplay). Compared structurally, not exactly — the port +(`-level_09` BUNKER1: settled gameplay after the intro). Compared structurally, not exactly — the port is not frame-deterministic (see `docs/internals.md` "D117"). Regenerate after a deliberate visual change: @@ -13,7 +13,7 @@ printf '[Window] Width = 640 Height = 480 ' > data/ge007.ini -GE_PCDUMP="400-880:240" ./build-pc/ge007.x86_64.exe -level_09 +GE_PCDUMP="640-1120:240" ./build-pc/ge007.x86_64.exe -level_09 python tools_pc/framediff.py ppm --update # then git rm any stale stems ``` @@ -30,7 +30,12 @@ python tools_pc/framediff.py ppm --update # then git rm any stale stems it to 60 fps (1 tick/frame), so frame N now lands at half the sim time, and frames 200/320/440 fell in the intro cutscene, whose camera is nondeterministic (D117); two fresh captures disagreed at 440. The window - moved to `400-880:240`, the same sim ticks the original set sampled. + moved to `640-1120:240`, the same sim ticks the original set sampled. Two independent captures of it agree 3/3. The capture ini is now defaults-only, and `verify.sh` pins it the same way (it used to rewrite only Width/Height, which kept personal settings). +- **2026-09-23 (later):** window moved again, `400-880:240` → `640-1120:240`. + Frame 400 is the last beat of the intro cutscene (Bond in the shaft) and + its camera is nondeterministic (D117): 1 in ~5 gate runs failed it (dmean + 0.7 vs 20.7 run to run). All three frames are now settled gameplay; three + independent captures agree (worst dmean ≤ 6.8). diff --git a/tools_pc/golden/frame_000400.png b/tools_pc/golden/frame_000400.png deleted file mode 100644 index 06bc5c25..00000000 Binary files a/tools_pc/golden/frame_000400.png and /dev/null differ diff --git a/tools_pc/golden/frame_000640.png b/tools_pc/golden/frame_000640.png index a8c46e35..b89243e6 100644 Binary files a/tools_pc/golden/frame_000640.png and b/tools_pc/golden/frame_000640.png differ diff --git a/tools_pc/golden/frame_000880.png b/tools_pc/golden/frame_000880.png index 79040964..9a5dabf4 100644 Binary files a/tools_pc/golden/frame_000880.png and b/tools_pc/golden/frame_000880.png differ diff --git a/tools_pc/golden/frame_001120.png b/tools_pc/golden/frame_001120.png new file mode 100644 index 00000000..26fadafc Binary files /dev/null and b/tools_pc/golden/frame_001120.png differ diff --git a/tools_pc/verify.sh b/tools_pc/verify.sh index 33eb86cb..71e044ac 100644 --- a/tools_pc/verify.sh +++ b/tools_pc/verify.sh @@ -18,7 +18,7 @@ # # Options: # --platform win|linux default: autodetect via `uname -s` -# --dump lo-hi:step GE_PCDUMP window (default: 400-880:240 single level, +# --dump lo-hi:step GE_PCDUMP window (default: 640-1120:240 single level, # 80-400:40 sweep — matches the existing golden set # and level_sweep.sh respectively) # --script "..." GE_INPUTSCRIPT passthrough (scripted input) @@ -284,7 +284,7 @@ except Exception: # exit 1 = a real per-frame threshold fail (pixel/cell/hash delta). # exit 2 = a structural mismatch (missing/size) -- most commonly the # golden's frame stems don't line up with this run's --dump window - # (today's only golden, level_09, was captured at 400-880:240; a + # (today's only golden, level_09, was captured at 640-1120:240; a # sweep using a different stride has nothing to compare against # rather than a real regression). Only exit 1 is a verdict fail. case "$fexit" in @@ -327,7 +327,7 @@ case "$MODE" in name="${resolved%%:*}"; num="${resolved##*:}" [ "${resolved%%:*}" = num ] && name=$(name_for_num "$num") pin_ini_640x480 2>/dev/null || true - verify_level "$name" "$num" "${DUMP:-400-880:240}" + verify_level "$name" "$num" "${DUMP:-640-1120:240}" ;; sweep) @@ -375,7 +375,7 @@ case "$MODE" in [ -z "$resolved" ] && { echo "unknown level '$LEVEL_ARG'" >&2; exit 2; } name="${resolved%%:*}"; num="${resolved##*:}" pin_ini_640x480 2>/dev/null || true - run_one "$name" "$num" "${DUMP:-400-880:240}" 90 + run_one "$name" "$num" "${DUMP:-640-1120:240}" 90 if [ "$R_STATUS" != PASS ]; then emit_verdict "$name" "$R_STATUS" "$R_FRAMES" "" "$R_SYM" rm -rf "$CAPDIR"; exit 1