diff --git a/authored/rendering.json b/authored/rendering.json index a8f03a9d..fb4c2a34 100644 --- a/authored/rendering.json +++ b/authored/rendering.json @@ -171,30 +171,37 @@ ], "leaf_clock": { "title": { - "start_units": null, - "rate": null + "start_units": 40.0, + "rate": 0.514 } }, "leaf_clock_why": [ - "The leaf's clock relative to its screen's, as an origin and a rate.", + "The leaf's clock relative to its screen's: leaf_t = rate * (screen_t - start_units).", "", - "\ud83d\udd34 BOTH null ON PURPOSE. null means the leaf runs on the screen clock --", - "which is what the port has always done, and which is ITSELF an unmeasured", - "assumption (offset 0, rate 1) that the Decoder's capture contradicts.", + "MEASURED off one draw capture by the Decoder, docs/re/f6-unit8-leaf-clock-in-title-units.md", + "on origin/auto/frame-blend-draw-path. Both numbers come from the SAME capture,", + "so neither crosses runs.", "", - "F6: a human reports the title's light sweep starts earlier in the port than", - "in the game, and separately that the port may be running it FASTER --", - "flagged by them as an impression, not a judgement to lean on. The capture", - "points the same way from a different direction: the game's leaf t=0 is its", - "first drawn frame, 40 frames after the title's first element, and its rate", - "measures well below the title's.", + " start_units 40 -- the game's leaf t=0 is its first drawn frame, 40 frames", + " after the title's first element draws. The title rate is", + " itself measured, not assumed: ptcopyright declares a", + " 0->255 ramp over 22 units and rises across 22 frames, so", + " the title runs 1.000 units/frame and frames and units are", + " interchangeable there.", + " rate 0.514 -- 600 leaf units across 1168 frames, anchored on the LOOP", + " WRAP rather than on where motion stops. Within 3% of 1/2.", "", - "\u26a0\ufe0f NOT FILLED IN WITH AN ESTIMATE. F1 established the rule the hard way: an", - "invented constant here is indistinguishable from a measured one later. The", - "figures come from the Decoder expressed in TITLE units, with the title's own", - "rate stated rather than assumed -- their unit 4 flags that rate as an", - "assumption, and it is load-bearing for both numbers.", + "This SUPERSEDES their earlier 0.463, which divided by the end of MOTION; the", + "declared track is stationary from t=540 to t=600, so that denominator was short.", "", - "To adopt: set start_units and rate. Nothing else changes." + "CORROBORATION from a second, independent direction: the human, watching both,", + "reported the port looks FASTER than the game -- offered as an impression, not a", + "judgement to lean on. A 1.0x port against a 0.514x game is exactly twice too", + "fast, which is the direction and roughly the size they describe.", + "", + "RESIDUAL RISK, stated: the rate rests on a SINGLE wrap in a single capture.", + "A wrap-to-wrap period would harden it. Adopted anyway because the port's", + "current value is not a measurement at all -- it is the unexamined assumption", + "that the leaf shares the screen's clock, which this refutes." ] } diff --git a/port/scripts/screen_view.gd b/port/scripts/screen_view.gd index cb48f97f..7839e017 100644 --- a/port/scripts/screen_view.gd +++ b/port/scripts/screen_view.gd @@ -897,7 +897,19 @@ func _draw() -> void: var pose: Dictionary = element.get("rest", {}) if pose_mode == Pose.REST \ else pose_at(element, time_units) var colour := modulate_of(pose) - if colour.a <= 0.0: + # 🔴 A LEAF OUTLIVES ITS PARENT, AND SKIPPING HERE KILLED IT EARLY. + # + # The parent's pose gates the whole element, so `ptloop01` expiring at + # t=250 stopped the sweep being drawn at all -- while this file's own + # decode says the leaf runs on its OWN timeline and the parent's alpha is + # not multiplied in. The two were inconsistent and the gate won silently. + # + # The capture settles it: the game submits the sweep across frames + # 746..1913 while the parent expires at frame 956, so it keeps drawing for + # roughly 950 frames after the parent is gone + # (`f6-unit3-sweep-track-fits.md`, `f6-unit8-leaf-clock-in-title-units.md`). + # A transparent parent is not evidence that its leaf is transparent. + if colour.a <= 0.0 and not draw_leaf_for.has(id): # 🔴 THIS LINE USED TO SAY "at rest" WHATEVER INSTANT IT HAD POSED. # # On the timeline path the pose is `pose_at(time_units)`, not