.leaf Objects

For level .objlib files, a .leaf Object (or SequinLeaf Object) represents a short pattern within a sub-level in the game. Each .leaf Object contains multiple Sequencer Objects that change the parameter values of different objects, including the .leaf Object itself, over the course of the pattern. The Sequencer Objects collectively define the events occurring during the pattern, such as the twisting and turning of the track, at what time thumps, red bars, blue rings, jumps and decorative objects appear on or around the track, the color changes of the skybox and post effects, at what time one-off samples are played, etc.

The following screenshot shows a modified version of the .leaf Object named drums_short_pattern2.leaf, from levels/Level6/level_6.objlib.

modified version of the .leaf Object named drums_short_pattern2.leaf, from levels/Level6/level_6.objlib

For sequin .objlib files, each of the .leaf Objects defines which objects and parameters are changed over the course of an animation.

Parameter List

The following is a list of known parameters belonging directly to a .leaf Object.

Data TypeValue (little-endian)Parameter NameMeaning
float3290db6c5cpitchControls the pitch angle of the track, expressed in degrees. A positive value raises the track; a negative value lowers the track.
float32461da26arollControls the roll angle of the track, expressed in degrees. A positive value rolls the track clockwise; a negative value rolls the track anticlockwise.
float32659c0bb8turnControls the turn angle θturn1​, or yaw angle, of the track, expressed in degrees. A positive value means turn left; a negative value means turn right. If ∣θturn∣≥15°1 per beat, player input is required for the turn. A short turn is a turn that requires player input and lasts for one beat only; a long turn is one that requires player input and lasts for two consecutive beats or more.
float321e470b5dturn_autoSame as turn, except it is guaranteed that no player input is required.
float32b44b9ff1scale_xControls the scale scalex1​ of the track in x1-axis. 0<scalex<11 decreases the track size along the x1-axis; scalex>11 increases the track size.
float325c01c2b9scale_yControls the scale scaley1​ of the track in y1-axis. 0<scaley<11 decreases the track size along the y1-axis; scaley>11 increases the track size.
float322794bccescale_zControls the scale scalez1​ of the track in z1-axis. 0<scalez<11 decreases the track size along the z1-axis; scalez>11 increases the track size.
float322e08b151offset_xControls the offset of the track in x1-axis.
float32fa4ab34foffset_yControls the offset of the track in y1-axis.
float321ff804bcoffset_zControls the offset of the track in z1-axis.
bool48697144visibla01Controls the visibility of the leftmost track in a multi-lane section. See the visible parameter for details.
bool842a58favisibla02Controls the visibility of the second leftmost track in a multi-lane section. See the visible parameter for details.
boola444acf9visibleControls the visibility of the center track in a multi-lane section. This is the same default track used in single lane sections. Consecutive values of 1 represent the presence of the lane; consecutive values of 0 represent its absence. A transition from 1 to 0 represents a lane end; a transition from 0 to 1 represents a lane start. When a lane ends, the direction of the lane-end turn is determined by whether there is a visible track on its left or on its right. The two lanes on both sides of a starting or ending lane cannot be both visible or both invisible.
bool93dcfe04visiblz01Controls the visibility of the second rightmost track in a multi-lane section. See the visible parameter for details.
bool7ce4037dvisiblz02Controls the visibility of the rightmost track in a multi-lane section. See the visible parameter for details.

Format

Overview

u32 header[4];
u32 hash;
u32 unknown;
u32 hash;
str timeUnit;
u32 hash;
vec<Trait> traits;
u32 unknown;
u32 beatCount;
vec3<f32> unknown[beatCount];
u32 unknown;
u32 unknown;
u32 unknown;

Trait

str object;
u32 unknown;
u32 subojectHash;
s32 selectorShareIdx;
u32 datatype;
vec<Datapoint<datatype>> datapoints;
vec<Datapoint<datatype>> editorDatapoints;
u32 unknown[5];
str intensity[2];
u8 unknown;
u8 unknown;
u32 unknown;
f32 unknown[5];
u8 unknown[3];

Datapoint<T>

f32 time;
T value; // Depends on the datatype being used
str interpolation;
str easing;

Footnotes

1

This should be formatted with LaTeX.