diff --git a/README.md b/README.md index 8f993ba..e672d09 100644 --- a/README.md +++ b/README.md @@ -329,8 +329,7 @@ distance: in lockstep their gems share one height (a flat row); staggered, they form a diagonal. On seed 1337, `M3TE_FX=11` **round 4** refills columns 2–7 by one cell each (its fall window `[1.74, 1.96)` s); at `1.91` the leading column has just landed while the trailing column is still ~⅔ cell high, so the top row reads as a -left-to-right staircase instead of a flat band (contrast `goldens/p17_fall.png`, -which is pre-stagger lockstep): +left-to-right staircase instead of a flat band: ```bash # Refilled row pouring in as a staggered cascade: goldens/p17_stagger.png @@ -379,10 +378,15 @@ env SIMCTL_CHILD_M3TE_FX=11 SIMCTL_CHILD_M3TE_ANIM_TIME=3.0 \ xcrun simctl launch --terminate-running-process booted co.swipelab.m3te ``` -`goldens/p17_fall.png` stays the pre-stagger lockstep reference (P17.1) and -`goldens/p17_stagger.png` the pure per-column stagger (P17.2); both pin moments where -no column has landed yet, so neither carries squash. The change is render-only — no -`board.sx` model change, and a resting board is untouched. +All three fall goldens were re-captured in P19.2 to the final, fully-merged fall +motion (gravity accel + per-column stagger + landing squash), each pinned to +foreground a different tell of it: `goldens/p17_fall.png` (round 3 at `1.51`) catches +the columns bunched HIGH under the gravity accel before any has landed (so it carries +no squash); `goldens/p17_stagger.png` (round 4 at `1.91`) catches the left-to-right +staircase as the leading column just touches down; and this golden (round 4 at `1.94`) +catches the squash wave once the leading columns have landed-and-flattened while the +trailing ones still pour in. The change is render-only — no `board.sx` model change, +and a resting board is untouched. ### Organic combine — anticipation pop on clear (P18.1) @@ -496,6 +500,58 @@ env SIMCTL_CHILD_M3TE_FPS=1 SIMCTL_CHILD_M3TE_ANIM_TIME=0 \ digits are dynamic, compare the FPS text's PRESENCE in the top-left corner, not its exact value. Every other golden is captured with `M3TE_FPS` unset and is unaffected. +### Move-timeline frame goldens (P6.1 / P6.2) + +The board-motion timeline (`board_anim.sx`: swap slide → matched-gem clear → +collapse/refill fall) and the match-FX layer (`board_fx.sx`) were first locked by a +set of frame goldens captured off ONE committed move. They use the same `M3TE_FX` +hook as the FX captures above — `M3TE_FX=3` is the seed-1337 vertical red 3-match (a +single round) — each pinned with `M3TE_ANIM_TIME` to a phase of the swap→clear→fall→ +settled timeline. Re-captured in P19.2 so each now shows the **organic** motion merged +in P16–P18 (swap overshoot, anticipation-pop clear ripple, gravity-accel fall); the +canonical per-feature organic goldens live in the P16/P17/P18 sections above, and +these are the generic timeline frames at their segment midpoints. + +```bash +# Swap segment midpoint — the swapped gems caught PAST target (ease_out_back +# overshoot): goldens/p6_anim_swap.png +env SIMCTL_CHILD_M3TE_FX=3 SIMCTL_CHILD_M3TE_ANIM_TIME=0.08 \ + xcrun simctl launch --terminate-running-process booted co.swipelab.m3te +# Clear segment midpoint — matched gems mid pop-ripple, composed with the burst and +# "+30" popup. The SAME committed-move frame backs all three of: +# goldens/p6_anim_clear.png == goldens/p6_fx.png == goldens/p6_inputlock_board.png +env SIMCTL_CHILD_M3TE_FX=3 SIMCTL_CHILD_M3TE_ANIM_TIME=0.23 \ + xcrun simctl launch --terminate-running-process booted co.swipelab.m3te +# Fall segment midpoint — the refilled column caught bunched high under gravity +# accel: goldens/p6_anim_fall.png +env SIMCTL_CHILD_M3TE_FX=3 SIMCTL_CHILD_M3TE_ANIM_TIME=0.41 \ + xcrun simctl launch --terminate-running-process booted co.swipelab.m3te +# Settled board past the timeline — FX fully pruned, the move's final board. The +# SAME settled frame backs all three of: +# goldens/p6_anim_after.png == goldens/p5_swap_after.png == goldens/p6_fx_after.png +env SIMCTL_CHILD_M3TE_FX=3 SIMCTL_CHILD_M3TE_ANIM_TIME=2.0 \ + xcrun simctl launch --terminate-running-process booted co.swipelab.m3te +``` + +`p6_anim_clear` / `p6_fx` / `p6_inputlock_board` are one and the same frame — the +timeline's clear segment, the burst/popup FX, and the input-locked in-flight board +are all the same committed-move moment — as are the three settled `*_after` goldens. + +The resting-board goldens — `goldens/p4_board.png`, `goldens/p4_hud.png`, +`goldens/p9_polish.png`, and `goldens/p5_swap_before.png` (the swap's start pose) — +are the seed-1337 board at rest, captured with no move committed: + +```bash +# Resting candy board / HUD (no move): p4_board.png, p4_hud.png, p9_polish.png, +# p5_swap_before.png +SIMCTL_CHILD_M3TE_ANIM_TIME=0 \ + xcrun simctl launch --terminate-running-process booted co.swipelab.m3te +``` + +They match `goldens/p6_idle_t0.png` over the board+HUD region (the `t==0` rest +invariant, `tests/gem_pose.sx`); only the status-bar clock and the bottom +home-indicator chrome vary per grab, never the board or HUD. + ## Audio bank (P10) — final model The SFX bank (`audio.sx`) is a purely additive layer over iOS **System Sound diff --git a/goldens/p17_fall.png b/goldens/p17_fall.png index 64e1739..ed2d072 100644 Binary files a/goldens/p17_fall.png and b/goldens/p17_fall.png differ diff --git a/goldens/p17_land.png b/goldens/p17_land.png index 8e50572..d2c07b1 100644 Binary files a/goldens/p17_land.png and b/goldens/p17_land.png differ diff --git a/goldens/p17_stagger.png b/goldens/p17_stagger.png index 3754588..b8eb4b7 100644 Binary files a/goldens/p17_stagger.png and b/goldens/p17_stagger.png differ diff --git a/goldens/p6_anim_clear.png b/goldens/p6_anim_clear.png index 0d9a53d..3b6ec29 100644 Binary files a/goldens/p6_anim_clear.png and b/goldens/p6_anim_clear.png differ diff --git a/goldens/p6_anim_fall.png b/goldens/p6_anim_fall.png index b8cba62..0b48475 100644 Binary files a/goldens/p6_anim_fall.png and b/goldens/p6_anim_fall.png differ diff --git a/goldens/p6_anim_swap.png b/goldens/p6_anim_swap.png index d47a541..d37adf2 100644 Binary files a/goldens/p6_anim_swap.png and b/goldens/p6_anim_swap.png differ diff --git a/goldens/p6_fx.png b/goldens/p6_fx.png index 0d9a53d..3b6ec29 100644 Binary files a/goldens/p6_fx.png and b/goldens/p6_fx.png differ diff --git a/goldens/p6_inputlock_board.png b/goldens/p6_inputlock_board.png index 0d9a53d..3b6ec29 100644 Binary files a/goldens/p6_inputlock_board.png and b/goldens/p6_inputlock_board.png differ