diff --git a/docs/engine-re.md b/docs/engine-re.md index e482c52..7154fb5 100644 --- a/docs/engine-re.md +++ b/docs/engine-re.md @@ -687,7 +687,9 @@ buffers (present). **Slot 0 is NOT special** — a normal slot; several objects (`handle → {slot, srcRect, position, anchor, scale, anim, alpha, visible}`, from draw-texture + the gfx ops) + a host per-frame compositor that draws visible objects **in ascending-handle order** from their live surface, interpolating animations by elapsed time. No VM/host lockstep: animations play during the wait-for-input park. -Scale/translation timing and anchored composition are implemented; full affine rotation remains deferred. +Separate scale/translation state and timing are implemented. The current anchored 2D composition is provisional: +exact anchor semantics, multiplication order, and projection still need slow native-versus-port frame comparison. +Full affine rotation remains deferred. ### Blend & transparency — colorkey + `0x202`/`0x203` color/alpha (2026-07-08) diff --git a/docs/phase-a-slice-plan.md b/docs/phase-a-slice-plan.md index f7729ff..2a289f7 100644 --- a/docs/phase-a-slice-plan.md +++ b/docs/phase-a-slice-plan.md @@ -691,7 +691,7 @@ handles, so SC0000 skipped its explicit `0x1f7(handle,10)` + `0x1fa(slot)` clean asserts no visible resource `0x37` remains; engine suite **86/86**. **Live clicked-path validation confirmed the fix on 2026-07-10:** the magic circle now disappears at the intended transition. -### A2b — native scale/translation matrix channels ✅ DONE (2026-07-10) +### A2b — native scale/translation channel split ✅ IMPLEMENTED; exact visual math provisional (2026-07-10) Replaced the legacy shared `AnimTarget` / transform-Z-as-opacity approximation with the native channel split proven in Ghidra. Op `0x21e` now owns normalized scale (100 = identity; current `obj+0x6c`, @@ -710,4 +710,8 @@ delay/duration sampling, target commit, and non-opacity Z values. Engine **86/86 Booted SC0000 with `--shot-sequence` + `--gfx-log`: 180/180 PNGs, 152 log lines, and zero unresolved/error/NaN/Infinity outcomes. The visible circle expands around its anchor through sampled scales `1.00 → 1.22 → 1.44 → 1.66` while remaining `op=1.00`, then the retained object is logged -`GONE`. This directly validates that scale is rendered as geometry rather than opacity. +`GONE`. This validates removal of the transform-Z opacity shortcut and shows the scale channel affecting +geometry in the capture. It does **not** prove the port's exact matrix calculation, anchor interpretation, +multiplication order, or 2D projection: normal playback still races past these sections too quickly for a +reliable visual judgment. Treat that math as provisional until the pacing slice enables slow normal playback +and a native-versus-port frame comparison.