re: (B) from EXTRAS DOES go black -- "(B) has no black interval" refuted

sylpheed-port's BLOCKED.md ask #1. They declined to suppress their uniform
black_hold on the cancel path because (B) menu->title was one transition. The
test says they were right.

EXTRAS -> main menu, also via (B): the outgoing quad ramps frames 34-38 (5
frames, exactly build 6's declared 10 units), then frames 39 AND 40 are
completely empty -- 3 draws, zero textured, a harder black than either earlier
capture -- then the incoming menu's quad decays 41-45. So (B) does not imply a
cross-fade; menu->title is the outlier of three, and the generalisation I was one
step from publishing is false.

The screen was verified, not assumed. screen_id.py cannot separate EXTRAS from
the main menu, so which_title_screen.py checked the armed frame: extras 18.58 vs
main_menu 29.85, margin 11.27, inside the 9.9-11.7 band its control sets on four
known captures.

Three transitions now agree on one thing and disagree on another:

  outgoing ramp = the declared final ramp, THREE FOR THREE, against three
  different declared values (10u/5f, 8u/4f, 10u/5f), and exactly linear where
  nothing overlaps it. Authorable from the file.

  black gap = none / 3 frames / 2 frames. Not a per-button property, not a
  per-direction property, not a constant. black_hold_units should not be
  authored as one.

Build 5's incoming ramp is confirmed at 12 units by its RATE rather than its
count: the count came out 5 against a predicted 6 in both runs -- reproducible,
so not noise -- but capture 3's steps are -21, -42, -43, -42, i.e. 255/6 per
frame after a half-step start. Capture 2's decay does not fit that and is
unexplained.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wuu56cE8vJGTBtn1ppsk8v
This commit is contained in:
sylph-decoder
2026-08-30 14:15:58 +00:00
parent 2a1ecc1c63
commit 589d23e44a
4 changed files with 147 additions and 10 deletions

View File

@@ -1,11 +1,14 @@
# Two screen changes, per frame, from the running game. 2026-08-30.
# tools/re-capture/fade_decompose.sh (WHERE=menu | WHERE=title)
# tools/re-capture/fade_pair.py
# THREE screen changes, per frame, from the running game. 2026-08-30.
# tools/re-capture/fade_decompose.sh (WHERE=menu | title | extras)
#
# Untextured full-screen quads are the .prm primitives. Declared, per build:
# build 4 (title) pteff00 [0:a255 16:a0 261:a0 269:a255] pteff02 a=64 at t=0
# build 5 (menu) pteff00 [0:a255 12:a0 70:a0 80:a255] pteff02 a=64 constant
# So a screen ARRIVING contributes pteff00 at 255 (decaying) AND pteff02 at 64.
# Declared, per build (corrected keyframe association):
# build 4 title pteff00 [0:a255 16:a0 261:a0 269:a255] open 16u=8f close 8u=4f
# build 5 menu pteff00 [0:a255 12:a0 70:a0 80:a255] open 12u=6f close 10u=5f
# build 6 EXTRAS pteff00 [0:a255 12:a0 64:a0 74:a255] open 12u=6f close 10u=5f
#
# Capture 3's screen identity was checked, not assumed: which_title_screen.py
# on the armed frame gives extras rmse=18.58 vs main_menu 29.85, margin 11.27,
# inside the 9.9-11.7 band its control establishes on four known captures.
############ CAPTURE 1 -- menu -> title, via (B) ############
frame untextured full-screen textured (distinct) draws tex
@@ -57,3 +60,29 @@ frame untextured full-screen textured (distinct) draws tex
80 [64] [7, 32, 247, 255] 8 6
81 [64] [8, 96, 246, 255] 8 6
82 [64] [8, 160, 246, 255] 8 6
############ CAPTURE 3 -- EXTRAS -> menu, via (B) ############
frame untextured full-screen textured (distinct) draws tex
28 [64] [128, 171, 181, 255] 11 9
29 [64] [128, 172, 182, 255] 11 9
30 [64] [111, 127, 172, 182, 185, 255] 11 9
31 [64] [42, 79, 139, 172, 183, 223, 255] 11 9
32 [64] [31, 69, 127, 173, 183, 255] 10 8
33 [64] [31, 173, 184, 255] 9 7
34 [64, 51] [174, 184, 255] 8 4
35 [64, 102] [174, 184, 255] 8 4
36 [64, 178] [174, 185, 255] 8 4
37 [64, 229] [174, 185, 255] 8 4
38 [64, 255] [175, 186, 255] 8 4
39 [] [] 3 0
40 [] [] 3 0
41 [64, 169] [1, 253, 255] 7 3
42 [64, 148] [2, 252, 255] 7 3
43 [64, 106] [2, 252, 255] 7 3
44 [64, 63] [3, 251, 255] 7 3
45 [64, 21] [4, 250, 255] 7 3
46 [64] [5, 249, 255] 7 3
47 [64] [6, 248, 255] 7 3
48 [64] [7, 32, 247, 255] 8 6
49 [64] [8, 96, 246, 255] 8 6
50 [64] [9, 192, 245, 255] 8 6