Skip to content

Glossary

adosikas edited this page Dec 17, 2023 · 14 revisions

This page describes terms and concepts used by this tool

Parameter parsing

The following formats for numbers are accepted for most inputs:

  • Decimal: 1.5
  • Fractions: 3/2
  • Mixed fractions: "1 1/2" (requires quotes as it contains a space)
  • Percentage: 150% (mostly useful for scaling)

Additionally for time values (ie in offset or interpolate), the following format are detected and will be converted into beats:

  • Seconds <SS>s: 0.050s / 1/20s
  • Minute & Second <MM>:<SS>: 1:20.250 -> 1 min, 20 s, 250 ms -> 80.25s

Measurement system

To simplify operation, this tool converts the input data into a format that is both easy to apply operations too, and also (hopefully) easy to understand for everyone.

Illustration

The following image illustrates the basics of the coordinate system for X and Y, as well as examples for offset and rotation (from blue note to red note)

coords

Positions

Positions consist of three numbers: X, Y and Time

  • X: Measured in grid squares from the center, where positive is right, and negative is left
  • Y: Measured in grid squares from the center, where positive is up, and negative is down
  • Time: Measured in Measures or Beats, from the start of the copied selection.

Technical note: The editor grid is slightly off-center (which is why walls shift slightly up and right when you start dragging them with grid-snap for the first time after creation). We subtract this offset on import and add it back on export for compatibility.

Technical note: The game involves bpm in the time coordinates for some reason. We don't do that.

Technical note: The smallest time interval supported by the JSON format is 1/64. We automatically round to the closest one on export for compatiblity (may result in some inaccuracy when mapping based on 1/3).

Angles

Angles are always specified in degrees, where positive is counterclockwise, and negative is clockwise. We consider 0° to be straight to the right (ie 3 o'clock position) and 90° is straight up (12 o'clock).

Any number is valid, but usually you want something between -360 (full rotation clockwise) and +360 (full rotation counterclockwise).

Pivot / Relative

For all movement operations, we support three modes:

  • Default / Absolute: All operations revolve around the center of the grid, ie the rotation in the image above
  • Pivot: All operations revolve around a specified position in X, Y and Time
  • Relative:
    • Rails: Use the start of the rail as pivot
    • Walls: Rotates a wall around its own rotation point (ie like you do in the editor)
    • Single notes: Does not do anything

When both --relative and --pivot=x,y,t are specified, relative mode takes precedence.

Note: Time is only relevant if you scale in the time axis. In absolute mode, time=0 is the start of the selection

Game objects

Notes

By notes, we refer to both single notes and rails of any of the four types.
We use the following names: right (red / pink), left (blue / cyan), single (one-handed special / green), both (hands-together special / yellow / gold)

(Rail-)Nodes

While single notes are just one position, rails need multiple positions to be defined. To be easier to work with, both are stored in the exact same format, a 2d array of size n x 3, where n is number of nodes (ie 1 for single notes, or 3 for a rail with start, one intermediate point and end), and the final dimension stores the 3 coordinates (x,y,time)

Spike/Buzz-Rails

These are just regular rails with triplets nodes in quick succession (ie 1/64 between): the first on the regular path of rail, the middle one some distance away and the last back on the rail. This is rendered in the game as a spike and does not impact scoring but produces a satisfying haptic effect to emphasize certain parts.

Example of a spike in a rail

Walls

We support all of the current wall types under the following names: wall_right, wall_left, angle_right, center, angle_left, crouch, square, triangle.

To be able to use the same functions as notes, walls are also stored as 2d arrays, but always of size 1 x 5, (n=1, since walls are always single objects), and the final dimension stores the 3 coordinates as well as wall type and rotation (x,y,time,type,rotation).

Technical Note: The game considers the wall positions to be such that a position of x=0, y=0 means the wall is the default position (the one it is in when you click the button to create one), but we use a position that (roughly) corresponds to the point of rotation, which is more intuitive makes movement much simpler.

Lights / Effects / Bookmarks

Supported and can be moved/scaled in time. There obviously is no XY position.

Bookmarks are only supported when dealing a with .synth File directly, as they are not contained in the editor clipboard format.