An animation key shows Direction only for one of the ten curves and
the Curve row only for Curve. Lerp and Set sound FX parameters hid
them on the node body, but the inspector still offered both rows for
every easing, so a linear Lerp had a Direction to pick that did
nothing.
- A node definition can name `idleParams`: settings that do nothing
at the current values. The node body and the inspector both leave
them out.
- `hiddenParams` stays as it was. It only trims the node body, the
inspector keeps those rows (the Order of an event, the mode of
Find), so it could not take this job.
- Lerp and Set sound FX parameters use `idleEasing` (formerly
`hiddenEasing`) for it.
- The idle settings are part of the node signature of the inspector.
Picking an easing that needs Direction or Curve rebuilds the
section, and the row appears.
Tests:
- easing-curves: 14 tests (+1), node-catalog: 381, green
- e2e 06 (149 checks, green) checks that a new linear Lerp has no
Direction and no Curve row in the inspector. Picking Cubic brings
the Direction row, and Out is picked there as before.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A timed Set sound FX parameters ran only linearly, and a Lerp had four
quadratic eases of its own. An animation key already had the full set.
Now all three offer the same choice: Linear, Step, the ten curves from
Sine to Bounce with In, Out or In-out, and a drawn Curve asset.
- easingParams in src/core/graph/nodes/easing.ts gives a node the
fields Easing, Direction and Curve from the key's own lists, and
easingOfParams reads them back as a key interpolation.
- There is no migration. A Lerp saved with the old in, out or inOut
runs linear until its easing is picked again.
- Set sound FX parameters hands the easing to the player. Linear and
Step stay ramps of the audio clock, every other easing goes to
setValueCurveAtTime as 200 samples a second, in semitones and dB.
- Step now reaches its end at t 1. A key never asked for that, it
reads the next key itself, so animations play as before.
- The curve-in-use count and the warning for a gone curve cover the
sound node too.
Tests:
- node-catalog: Lerp with cubic in, quad out and in-out, a curve
without a direction, step, an unknown easing as linear. The sound
node hands on a curve, step and a gone curve as linear.
- sound-library: an eased change becomes a curve in semitones and
decibels, a step a jump at the end.
- node-catalog and curve after dropping the old values: 399, green.
- e2e 6, 34, 53 on melektaus-atx: ALL PASSED, 198 checks. In Chrome a
2 s Quad in from depth 7 to -5 read speed 0.864 early and 0.5 at the
end, a 1 s Step held 1 and then jumped to 0.5.
- Counter-check: with curves sent as linear ramps, the curve test of
the sound library fails.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The built-in eases cover the usual shapes, but a game often wants its
own: a coin that bounces twice, a door that overshoots and settles.
A new asset type holds such a curve, and keys and the Lerp node can
pick it instead of a built-in ease.
- New asset type "curve": points like in Vector art, x is t and y is
the value. A new curve is the straight line from (0, 0) to (1, 1).
- One pure evaluation in src/core/model/curve.ts serves the timeline
preview, the running game and the Lerp node.
- The curve always has one value per t. The end points stay at t 0
and 1, points cannot pass each other, and a handle that reaches past
its neighbour is shortened along its direction. Loading a hand-edited
file applies the same rules.
- Curve tab: click on the line to insert a point that keeps the shape,
click on free space to put one there, drag points and handles,
double-click or Delete removes, Alt-click toggles round and sharp.
Every step is one undo step.
- Presets: all 30 built-in eases plus Linear, fitted with adaptive
subdivision. Each stays within 0.4 % of the built-in ease.
- Preview: a dot runs along the curve once a second, a second dot
shows only the value. The Preview button stops it.
- Animation keys get "Curve" under Easing with a curve picker. Lerp
gets "Curve" under Ease, and its result may overshoot b.
- A missing or unpicked curve runs linear. The inspector says so, the
node shows it as a problem, and deleting a used curve warns with the
number of keys and Lerp nodes.
Tests:
- ./check.sh: 180 files, 2612 tests, CHECK EXIT 0
- GM_STEPS=1-6,25,53: ALL PASSED, 309 checks
- New e2e module 53 with 13 checks, all with the real mouse. Expected
values come from its own Bezier evaluation.
- Counter-checks bite: without Bezier evaluation 4 unit tests fail,
without handle clamping 2. In the browser, a key that cannot find its
curve, a click that sets no point and a handle drag that moves the
point all turn checks red.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every animation in a behavior had to build its interpolation from
Subtract, Multiply and Add, once per axis. The gold pickup in
"Garden of Sacrifices" needed about 30 nodes for that alone. A single
Lerp node with an ease makes those chains one node each.
- Lerp has the inputs a (default 0), b (1) and t (0) and the output
result. It sits in the data category next to Clamp.
- The Ease setting offers Linear, In, Out and In-out, all quadratic.
The node row shows it as "Ease: Out".
- t is held in 0..1. A timer that overshoots in the last frame still
lands exactly on b.
Tests:
- ./check.sh: 178 files, 2583 tests, CHECK EXIT 0
- 7 new cases in the node catalog test. Without the clamp on t,
2 of them fail.
- e2e 6z-iii (2 checks): typing "lerp" in the palette adds a linear
Lerp, and picking "Out" in the inspector reaches the node and its
row. GM_STEPS=1-6: ALL PASSED, 267 checks.
- README check sum is 1459, computed, not counted.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>