Implement cyclic scale opcode
This commit is contained in:
@@ -1348,8 +1348,11 @@ stores period `obj+0x224`, builds the target scale matrix at `obj+0x250`, and ra
|
||||
matrix to the target. The first half-cycle therefore grows/shrinks identity to target and the second returns
|
||||
target to identity. This matrix lives in the separately anchored cyclic-animation product, independent of
|
||||
the immediate/current and delayed one-shot scale matrices. Himegari has 31 sites in nine scripts: nineteen
|
||||
in DEBUGADV and twelve across eight ordinary ADV scenes. The port still skips the opcode; its existing
|
||||
cyclic-channel sampling and affine compositor make this the smallest high-reach next implementation.
|
||||
in DEBUGADV and twelve across eight ordinary ADV scenes. The port now models this as its own retained
|
||||
channel, samples the exact triangular phase on the shared frame clock, and composes
|
||||
`T(-anchor) * one-shot-scale * one-shot-rotation * translation * cyclic-scale * cyclic-rotation *
|
||||
T(anchor)`. It remains frame-driven while visible and survives native-style object cloning independently
|
||||
of the immediate and delayed one-shot scale fields.
|
||||
|
||||
**Follow-up resolution (2026-07-10):** `0x21f` is the one-shot axis-angle channel and is implemented with
|
||||
affine rasterization. `0x223` is **not affine**: `gfx_queue_surface_alpha_transition` (`0x47f440`) inserts
|
||||
|
||||
@@ -916,6 +916,8 @@ Implemented through IHost.PlayModalMovieToSurface. Its operand uses the same nat
|
||||
- **grounding:** source=investigation, confidence=high
|
||||
- **evidence:** Ghidra /v2: op_0x233_set_scale_cycle@0x423cf0 divides operands 3..5 by 100 and calls gfx_object_set_scale_cycle@0x47efd0. The worker stores start=0 at obj+0x210, period at +0x224, and the target scale matrix at +0x250. gfx_object_anim_interpolate@0x473ed0 samples a triangular phase 2*min(elapsed%period,period-elapsed%period)/period, linearly blends identity to target, and multiplies the result into the separately anchored cyclic-animation product. Corpus: 31 sites in nine scripts, including eight ordinary ADV scenes.
|
||||
|
||||
Port status (2026-07-28): implemented as an independent retained-object scale cycle. The compositor samples the exact triangular phase, keeps the channel frame-driven during waits, and composes it after one-shot translation but before the sibling cyclic rotation.
|
||||
|
||||
### 0x234 `anim-start` (anim-start, argc 5)
|
||||
- **summary:** (handle)(period_ms)(axis_x)(axis_y)(axis_z) — configure cyclic rotation. Worker stores period obj+0x228, start obj+0x214=0, and float axis obj+0x244; each frame uses integer degrees floor(((now-start)%period)*360/period). gfx_object_composite right-multiplies this separately anchored transform after the one-shot scale/rotation/translation product, so cyclic rotation also rotates the translation vector.
|
||||
- **grounding:** source=investigation, confidence=high
|
||||
|
||||
@@ -805,13 +805,16 @@ fallthrough inventory from 25 to 23 distinct opcodes. Focused regressions distin
|
||||
starts and prove immediate rotation does not arm the delayed `0x21f` channel. The opcode registry and
|
||||
generated references are current, and the native `/v2` image is annotated and saved.
|
||||
|
||||
**Next-opcode reconnaissance:** `0x233` is the recommended next implementation. Native proves a
|
||||
self-contained cyclic scale channel: identity→target over the first half-period and target→identity over
|
||||
the second. Its 31 calls cover eight ordinary ADV scenes plus DEBUGADV, and the retained model already has
|
||||
the sibling color/rotation cycles and affine sampling machinery. It therefore has broader runtime reach and
|
||||
lower ownership risk than the next alternative.
|
||||
**Cyclic scale `0x233` implemented (2026-07-28).** The retained model now owns the native channel
|
||||
independently of immediate and delayed one-shot scale. It samples the exact triangular
|
||||
identity-to-target-to-identity phase, remains frame-driven during visible waits, survives object cloning,
|
||||
and enters the separately anchored cyclic product after one-shot translation and before cyclic rotation.
|
||||
The VM handler closes all 31 skipped sites across DEBUGADV and eight ordinary ADV scenes, reducing the
|
||||
effectful fallthrough inventory from 23 to 22 distinct opcodes. Focused tests cover dispatch, percentages,
|
||||
odd/even period timing, continuous-presentation classification, and matrix order; the full engine suite,
|
||||
warning-free Godot build, and Himegari-targeted threaded selftest pass (468 engine tests).
|
||||
|
||||
After `0x233`, implement CONFIG's mixer ABI as one four-opcode tranche rather than piecemeal:
|
||||
**NEXT:** implement CONFIG's mixer ABI as one four-opcode tranche rather than piecemeal:
|
||||
`0xc5` gets master/music/SFX/voice/movie volume, `0xc6` sets and applies it, `0x1ba` enables/disables the
|
||||
four non-master routes, and `0xc7` queries route state. Those 37 CONFIG sites require shared persistent
|
||||
settings plus live Godot-bus application; implementing only a setter or getter would leave the menu
|
||||
|
||||
Reference in New Issue
Block a user