- SUS stands for Sliding Universal Score, not SeaUrchin Score anymore.
(Annotation: SUS files were originally the proprietary format ofSeaUrchin, a tool to play custom chart)
- Plain Text data, consisting entirely of printable characters.
- File extension:
*.sus - EOL: CRLF or LF
- Encode: Always UTF-8
- Lines beginning with
#are meaningful as data; thus other lines are ignored as comments. - Use double quotes (
"something") for parts specifying string data.
- The commands listed below must be prefixed with
#. No space is allowed between the#and the commands. - For commands marked
(ASCII), non-ASCII characters CANNOT be used for the content. - For commands marked
(UTF-8), non-ASCII characters can be used for the contents.
#TITLE "Song Title"
#SUBTITLE "Song Subtitle"
#ARTIST "Artist"
#GENRE "Genre"
#DESIGNER "Designer"
- An integer value or string specifying the category of difficulty of the chart.
- The following five are reserved for numerical specifications.
#DIFFICULTY 0#DIFFICULTY 1#DIFFICULTY 2#DIFFICULTY 3#DIFFICULTY 4
- It can also be specified as a string, but its processing varies from application to application.
- Specify the level of the chart by an integer value.
#PLAYLEVEL 10
- Can also be suffixed with
+.#PLAYLEVEL 14+
(Annotation: As for+, it is the specification of the rhythm game on which SeaUrchin is based.)
- The processing of this value varies from application to application.
#SONGID "songid"
- Specifies by relative path from SUS file.
- Supported file formats vary from application to application.
#WAVE "filename.wav"
- Specifies the difference between the start of chart playback and the playback timing of the audio file.
- Units are in seconds and can be specified as a decimal (float)
- A positive value causes the chart to start first.
- A negative value causes the audio to start first.
#WAVEOFFSET 0.5
- Specifies by relative path from SUS file.
- Supported file formats vary from application to application.
#JACKET "jacket.jpg"
- Specifies by relative path from SUS file.
- Supported file formats vary from application to application.
#BACKGROUND "jacket.jpg"
- Specifies by relative path from SUS file.
- Supported file formats vary from application to application.
#MOVIE "movie.mp4"
- Specifies the difference between the start of chart playback and the playback timing of the movie file.
- Units are in seconds and can be specified as a decimal (float)
- A positive value causes the chart to start first.
- A negative value causes the movie to start first.
#MOVIEOFFSET 0.5
- Specifies the base tempo for scroll speed.
- The actual scroll speed varies as a percentage of this value.
- If not specified, it will be the value of the first BPM change.
#BASEBPM 120.0
- Send special commands to the application.
- It is described below in Chapter 4.
#REQUEST "ticks_per_beat 480"
- Each line is in the form "header part,
:, data part". - The header part must be followed by
:. - The data part is a set of two digits, and the measure is divided by the number of sets, each of which is a timing.
- For example,
1111111111will be placed at quarter note intervals. - The maximum number of divisions varies from application to application, but at least 512 divisions (1024 bytes of data part) should be supported.
- For 2-digit data, the first digit is different for each data type. However,
0is always unassigned. - The second digit always represents the width of the note, similarly 1 to z represents 1 to 35 widths.
- Therefore, positions where no notes exist should be filled with
00.
- For example,
mmmcxyzz: (number data)
mmm- If it is not numeric, it is special data.
- For numerical values, this is general data and is the measure number.
- Measure numbers start at 0 (i.e., 000).
(Annotation: If you wish to create measures 1000 and beyond, see#MEASUREBSbelow.)
- Measure numbers start at 0 (i.e., 000).
c- Specifies the type for each note.
- Types are described below.
- 0 is a special type. See below.
x- Specifies the leftmost lane of notes.
- From left to right: 0, 1, 2, ... , 9, a, b, c, ... and so on.
- It is case-insensitive.
y- Specifies the channel for each note. Not present for some note types.
- Like
x, it can be from 0 to z. - It is case-insensitive.
zz- Specifies the number of special data. Not present in many cases.
- 01 to zz available in Base36.
- Specify the measure length after that measure number in beats per measure.
- Decimal values can be specified. However, a value such that M / 2^n (M, n ∈ N) is preferred.
00002: 4
- The tempo after that point is specified by referring to the BPM definition.
- The tempo value can be a decimal value.
#BPM01: 140.0#00008: 01
- Define a set of notes attributes in ATR.
- Defined as a string, with commas separating multiple values.
rh:<小数>Directional roll speedh:<小数>Height of Notespr:<整数>Priority of drawing of notes
- If
#ATTRIBUTE zzis specified, the notes attribute ofzzis applied to the data after that line. - If
#NOATTRIBUTEis specified, the notes attribute will not be applied to the data after that line.
#ATR01: "pr:100, h: 1.5"
#ATTRIBUTE 01
#00010: 14141414
#NOATTIRBUTE- Different speeds can be applied to each note (hereafter referred to as "hi-speed definition").
- A hi-speed definition is defined as a string, with commas separating multiple values.
- String in
meas'tick:speedformat.。 measMeasure number (integer) (Annotation: need not be zero-filled)tickTick (integer) (Unit to further divide a measure. By default, one beat is 480 ticks, so one measure is 1920 ticks)speedSpeed (float) (negative values are also possible)
- String in
- If
#HISPEED zzis specified, the hi-speed definition ofzzis applied to the data after the line. - If
#NOSPEEDis specified, the hi-speed definition is not applied to the data after the line.
#TIL01: "0'0:1.0, 0'960:2.0"
#HISPEED 01
#00010: 14141414
#NOSPEED- The specified value is always added to the measure number of the data line from the time it is specified.
- If specified multiple times, the last value specified will overwrite the added value.
... 0-999
#MEASUREBS 1000
... 1000-1999
#MEASUREBS 2000
... 2000-2999- If the application supports the display of bar lines, you can specify the speed change of those bar lines.
- The value to be specified is the same as
#TIL.
#MEASUREHS 01- Single-pressed notes that do not move in position.
- The following six specifications are reserved.
1?Tap 12?Tap 23?Tap 34?Tap 45?Tap 56?Tap 6
#00010: 2414141434141414
- Long-pressed notes that do not move in position.
- The same width must be specified at all points.
- Channels with the same channel are connected to each other.
1?Start2?End3?Relay
#00020a: 14002400
- Long-pressed notes that move in position.
- Different widths can be set for each point.
- The Bézier curve allows the shape to be set smoothly.
- As for the shape of the curve, it is defined by successive line segments connecting the centers of the notes at each relay point and control point.
- Channels with the same channel are connected to each other.
1?Start2?End3?Relay4?Bézier curve control5?Relay (Invisible)
#00030a: 14340024
- Long-pressed notes that move in position.
- The basic specifications are the same as those on slide 1.
- Notes Definition with Direction.
- It does not necessarily have to be placed on top of other notes, but can be placed by itself.
1?Upper2?Downer3?Upper Left4?Upper Right5?Downer Left6?Downer Right
#00050: 14241424
The following are defined as specifications.
#REQUEST "ticks_per_beat <integer>.- If nth notes are used in a chart, they should be specified to be an integral number of beats per measure * number of ticks.
#REQUEST "enable_priority true/false"