P11.1: juicier match pops & brighter bursts (sx / iOS)
Visual-juice vibe-pass, FX-only — no logic/state changes, input gating still owned by BoardAnim.active. - board_fx.sx: bigger, punchier match bursts — peak size 1.95->2.50 cells, combo bonus 0.55->0.72, and the per-gem fx tints saturated a touch (low channel trimmed, dominant/mid lifted) so every burst pops as a brighter, more vivid candy colour. The hot per-pixel tint loop's hoisted locals are preserved (issue 0001). - gem_anim.sx: snappier clear pop — faster rise (0.30->0.18 of the window) to a bigger overshoot (CLEAR_POP_A 0.22->0.34) so the matched-gem clear reads as a candy snap. gem_pose's clear-pop invariants still hold. - main.sx: M3TE_FX=<n> deterministic match-FX capture hook, mirroring the M3TE_SELECT pattern. Commits the n-th currently-legal swap at startup via the normal plan_and_commit path and begins the move timeline + burst/popup FX; M3TE_ANIM_TIME pins the phase and the frame loop holds the move/FX frozen while pinned, so the burst + "+points" screenshot identically every run. A larger M3TE_ANIM_TIME captures the settled, FX-gone board. Startup- only and guarded, so normal play is untouched. - README.md: document the new M3TE_FX pin alongside the other capture hooks. - goldens/p6_fx_match.png: updated deterministic golden (iOS 26 sim, SIMCTL_CHILD_M3TE_FX=3 SIMCTL_CHILD_M3TE_ANIM_TIME=0.22) — the vertical red 3-match, burst region +1.4% mean luminance / 3.2:1 brighter:dimmer vs the same scene on the pre-juice constants. Gate: ios-sim build links, 19/19 logic tests green (incl. gem_pose t=0 rest).
This commit is contained in:
29
README.md
29
README.md
@@ -115,3 +115,32 @@ env SIMCTL_CHILD_M3TE_TARGET=0 SIMCTL_CHILD_M3TE_RESTART=1 SIMCTL_CHILD_M3TE_ANI
|
||||
While a banner is up the board freezes (only the restart button is live, per
|
||||
P7.1's finished-level rule); `tests/banner_layout.sx` locks the restart button's
|
||||
rect ↔ hit-test round-trip headlessly.
|
||||
|
||||
### Match-FX capture (P11.1)
|
||||
|
||||
The match bursts + score popup (`board_fx.sx`) only spawn off a *committed* move,
|
||||
which the simulator can't script (there is no public touch injection). One more
|
||||
env hook forces a representative match at startup so the FX can be screenshot
|
||||
deterministically — combine it with `M3TE_ANIM_TIME` to freeze the phase:
|
||||
|
||||
- `M3TE_FX=<n>` commits the **n-th currently-legal swap** (1-based, clamped; `=1`
|
||||
is the first) through the normal `plan_and_commit` path, then begins the move
|
||||
timeline + its burst/popup FX. While `M3TE_ANIM_TIME` is set the move/FX
|
||||
timelines are pinned at that phase (the frame loop holds them frozen), so the
|
||||
burst and floating `+points` render identically every run. A larger
|
||||
`M3TE_ANIM_TIME` lands past the timeline, capturing the settled board with the
|
||||
FX fully pruned. Startup-only and guarded by the var, so normal play is
|
||||
untouched.
|
||||
|
||||
The legal-swap order is the fixed enumeration in `tests/expected/swap_legality.stdout`
|
||||
(row-major, right-before-down). For seed 1337, `M3TE_FX=3` is the vertical red
|
||||
3-match used by the golden.
|
||||
|
||||
```bash
|
||||
# Punchy match burst + "+30" popup, pinned mid-clear: goldens/p6_fx_match.png
|
||||
env SIMCTL_CHILD_M3TE_FX=3 SIMCTL_CHILD_M3TE_ANIM_TIME=0.22 \
|
||||
xcrun simctl launch booted co.swipelab.m3te
|
||||
# Same match, later phase — FX fully gone over the settled board (no golden):
|
||||
env SIMCTL_CHILD_M3TE_FX=3 SIMCTL_CHILD_M3TE_ANIM_TIME=2.0 \
|
||||
xcrun simctl launch booted co.swipelab.m3te
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user