{ "format": "sylpheed.timing/1", "keyframe_units_per_second": 60, "why": [ "HANDOFF Q1. The disc says a keyframe is at `t=30`; it does not say what a", "`t` is. The unit was MEASURED off the running game, not decoded: a declared", "15-unit fade lands on round(255*k/15) for all seven of its samples with k", "stepping 2,4,6,8,10,12,14 on seven consecutive submitted frames -- so 2", "units per rendered frame -- and the idle title presents at 28.3-28.8 fps,", "a 30 Hz game, giving 60 units per second. A second line agrees: the", "transition quad is declared black for 12 units, and a capture measured the", "pure-black plateau at 0.17-0.23 s, where 12/60 = 0.20 s.", "", "Expressed as units-per-second rather than seconds-per-unit so the value is", "exact rather than a repeating decimal a reader has to recognise.", "", "DELETE THIS FILE when a field on the disc is found that states the unit.", "Nothing here is on the disc." ], "kind": "measured", "source": "/reborn docs/port/HANDOFF.md Q1, docs/re/ui-keyframe-time-unit.md", "ramp": "linear", "ramp_why": [ "Also HANDOFF Q1, and part of the same measurement: the fade lands on the", "linear value at every one of the seven sampled frames, so there is no ease." ], "exit_ramp_seconds": 0.4, "exit_ramp_why": [ "HANDOFF Q7 + the RE agent's 2026-08-29 answer. MEASURED, not on the disc.", "", "Every element of a screen ends on exactly ONE untimed keyframe, so there is", "exactly one unknown duration per screen -- the ramp INTO that final keyframe.", "This is that duration. ~0.4 s, which is 24 units at 60 units/s.", "", "The alternative readings were tested and refuted. It is not a black quad laid", "over a frozen screen: under that model a black rect scales every region by the", "same 1-alpha, so the button-region / background-region brightness RATIO would", "be constant through the fade. Measured on the RE agent's filmstrip it falls", "6.495 -> 5.574 -> 3.105 -> 2.125 -> 1.935, a 3.4x monotonic drop. The screen", "itself plays out: pteff00.prm ramps to opaque black while the button labels,", "ptmsg, pteff10 and pteff12 all ramp to transparent, and ptframe1/2 hold.", "", "REACH, quoted from the RE agent rather than smoothed over: the filmstrip is", "downsampled and the button region contains some background, so this pins the", "DIRECTION, not 0.4 s to +/-0.05 s, and it is one transition pair. Treat the", "number as approximate and the model as established." ], "exit_ramp_units": 24, "dwell_seconds": null, "dwell_why": [ "NOT SET, and not needed. A screen's dwell is its OWN keyframe group: the", "publisher wordmark reaches its hold at t=235 (3.92 s) and the developer logos", "at t=190 (3.17 s), both read from the disc. Adding a hold on top of that would", "be inventing a number nobody measured, so the sequencer holds for zero extra", "time and the pacing you see is the disc's own.", "", "If a capture ever times the real boot, this is where that number goes." ], "looping_focus_records": { "_": [ "WHICH focus records the port draws unconditionally, and loops. CHOSEN, and", "deliberately a LOOKUP rather than a rule -- delete an entry the day the disc", "or a capture states it.", "", "THE PRESS (A) PLATE GLOWS AND PULSES. Measured on the running game:", "`ptbtn00f`, the plate's focus record, ramps alpha 0x00->0x50 and back, and", "its period was timed four times at 2.12 / 2.19 / 2.34 / 2.31 s. You cannot", "measure a period unless the thing repeats, so THAT IT LOOPS IS MEASURED. The", "port drew nothing at all here, because press_start has no `buttons` and", "nothing is focused.", "", "WHY A LOOKUP AND NOT A RULE, which is the part worth keeping. The spinning", "ring is a RULE in the renderer (`spin_period_units`) because it has a", "disc-wide check: 16 of 212 elements match its shape and all 16 are focus", "rings, zero false positives. The obvious rule for a pulse -- a group whose", "keyframes vary only in alpha and whose first and last alpha are equal -- was", "CENSUSED BEFORE BEING WRITTEN and it fails: 82 OF 212 ELEMENTS MATCH,", "including ptcopyright, palogo_sqex, ptmsg and every _eff fade-in. A renderer", "rule on that shape would make the copyright notice pulse.", "", "Narrowing to focus records leaves exactly ONE distinct element (ptbtn00f,", "plus its JP twin), and a rule justified by n=1 is a special case wearing a", "rule's clothes. So it is written here, per element, by name." ], "press_start/ptbtn00": { "record_element": "ptbtn00f", "period_units": 129, "kind": "chosen", "why": [ "129 units = the element's own group under the port's existing timing model:", "its last timed keyframe is t=105 and the final untimed keyframe is reached", "`exit_ramp_units` (24) later. NO NEW CONSTANT is introduced -- 24 is the", "same authored value every other element's exit already uses.", "", "129 units is 2.150 s at 60 units/s, and 2.295 s at the ~28.1 fps that", "emulator presents (56.2 units/s), against measurements of 2.12 / 2.19 /", "2.34 / 2.31 s. It sits inside that spread at either rate.", "", "IT IS A CHOICE, and here is the alternative the data CANNOT rule out: the", "cycle could restart at the group's first keyframe (t=6) rather than at 0,", "giving 123 units = 2.050 s / 2.189 s at emulator rate. That ALSO sits", "inside the measured spread. Nothing available separates them, so t=0 is", "taken because it is where every other group in this port starts -- which is", "consistency, not evidence.", "", "A fifth reading exists and is NOT averaged in: the Decoder re-picked its", "troughs and got 2.628 s, having previously reported 2.369 from the same", "run. It withdrew the estimate as too weak to resolve better than ~7%, so it", "is recorded here and not used.", "", "WHAT DELETES THIS ENTRY: a capture that times the pulse against a landmark", "in the same frame, or a loop flag decoded on the disc." ] } } }