-
Notifications
You must be signed in to change notification settings - Fork 6
SSC format
This is just how piuGBA interprets SSC files. In StepMania, things are slightly different!
Field | Type | Description |
---|---|---|
TITLE |
String | Id of the song |
SUBTITLE |
String | Name of the song (30 characters max) |
ARTIST |
String | Author of the song (27 characters max) |
SONGCATEGORY |
One of ORIGINAL , K-POP , WORLD MUSIC
|
Channel of the song |
LASTSECONDHINT |
Number | (Optional) Timestamp (in seconds) when the song ends. Used when songs have a trailing silence |
BGCHANGES |
Custom | (Optional) Used to calculate video offset (see below) |
PIUGBA |
Object | (Optional) Custom configuration of the song. See the example below |
Field | Type | Description |
---|---|---|
NOTEDATA |
Empty | The #NOTEDATA:; indicates the start of a chart. It should be empty. |
STEPSTYPE |
One of pump-single , pump-double , pump-couple , pump-routine
|
Indicates the type of chart. Single uses 5 arrows and the others 10 arrows. Couple/Routine are co-op charts. |
DESCRIPTION |
String | Name of the chart, used by the importer. If this field contains the word half the chart will be ignored! |
DIFFICULTY |
One of NORMAL , HARD , CRAZY , NUMERIC
|
Named difficulty level |
METER |
Int | Numeric difficulty level |
PIUGBA_ORDER |
Int |
(Optional) METER override for sorting purposes |
OFFSET |
Number | Audio offset (in seconds) from the chart notes. If positive, audio starts after the chart |
BPMS |
Dictionary | Dictionary with all the BPM changes. Beat => BPM |
SPEEDS |
Quad Dictionary | Speed factors that affect display BPM. Beat => Percent (scroll factor) => Delay (a value of 1 will make it linearly scale from the current scroll speed to the new one in 1 beat/second) => Unit (0 = delay is in beats, 1 = delay is in seconds) |
TICKCOUNTS |
Dictionary | Affects how often a hold note will fire a combo tick. The figure will be 4 * the number (i.e. 2 means one tick every 8th note, 4 means one tick every 16th note) Beat => Multiplier |
STOPS |
Dictionary | Completely stops the scrolling and affects all the next events. Beat => Length (in seconds) |
DELAYS |
Dictionary | Same as STOPS
|
SCROLLS |
Dictionary | Sets the scrolling ON or OFF, without affecting all the next events. Used to fake stops (also called "async stops"). Beat => Enabled (0 = no, 1 = yes) |
WARPS |
Dictionary | Teleports to another part of the chart. Beat => Jump (in beats) |
FAKES |
Dictionary | Notes during this segment won't be counted for or against players. Beat => Length (in beats) |
NOTES |
Event array | The actual notes of the song. |
If a BPM
segment sets BPM to anything higher than 999999
, StepMania interprets it as a warp to the next BPM change. If there are STOPS
/DELAYS
in the middle, it stops and then continues warping so it can create stuttering effects like warp-stop-warp-stop-warp-stop...
KEY=VALUE
separated by ,
Like Dictionary
, but separated by ,,,
KEY=VALUE=PARAM1=PARAM2
separated by ,
Note data is defined in terms of "measures" where a measure is several lines of text, terminated by a comma. The final measure in a chart is terminated by a semicolon instead. Each line consists of a set of characters representing each playable column in the chart type.
Valid note types are 4th, 8th, 12th, 16th, 24th, 32nd, 48th, 64th, and 192nd. Each measure consists of a number of lines that corresponds to one of these numbers. The total number of beats covered by any given measure is 4, and each line represents a portion of that. If a measure has 64 lines, for example, each line represents 1/64th of those 4 beats, or 1/16th of a beat, with the first line representing beat 0 within the measure. The note type of a given line can be determined by taking said beat value, dividing by 4, and then simplifying the fraction as much as possible and looking at the denominator. If the denominator is 96, 192 is used as the note type instead.
-
0
– No note -
1
– Normal note -
2
– Hold head -
3
– Hold tail -
F
- Fake tap -
X
,Y
,Z
- Multiplayer (co-op chart) normal note -
x
,y
,z
- Multiplayer (co-op chart) hold head
This can be a list of multiple videos / backgrounds, e.g.:
#BGCHANGES:-10000.000=black.mpg=1.000=1=0=1===CrossFade==,
-4.100=123.mpg=1.000=0=0=0=StretchNoLoop====,
99999=-nosongbg-=1.000=0=0=0;
The important parts are:
-
123.mpg
(name of the video file, has to match the audio file name) -
-4.100
(video offset in beats). If negative, the first BPM of#BPMS
is used to translate it to seconds. Negative means the video starts earlier (relative to song start).
The rest of the fields (playback rate, effect, transitions, etc.) are ignored.
When the importer finds multiplayer note events like XxYyZz
, a chart divider (&
), or more than 30 "suspicious" events (arrows that are too distant to each other), it converts the chart to multiplayer. These are labeled as ;)
in the Arcade section and require using the multiplayer modes.
- When using
XxYyZz
events, both players need to hit the note. - When using a chart divider (
&
), events are not merged, so if one player hits the note perfectly and the other doesn't, the result will be 1 PERFECT + 1 MISS, instead of just 1 MISS.
#TITLE:230;
#SUBTITLE:Name of the song;
#ARTIST:Author of the song;
#SONGCATEGORY:WORLD MUSIC;
#LASTSECONDHINT:99.002441;
#SAMPLESTART:27.322994;
#SAMPLELENGTH:15.000004;
#BGCHANGES:-0.300=123.mpg=1.000=0=0=0=StretchNoLoop====,
99999=-nosongbg-=1.000=0=0=0 // don't automatically add -songbackground-
;
#PIUGBA:
APPLY_TO=101,,,
IS_BOSS=TRUE,,,
PIXELATE=BLINK_IN,,,
JUMP=ON,,,
REDUCE=RANDOM,,,
BOUNCE=ALL,,,
COLOR_FILTER=POSTERIZE,,,
SPEED_HACK=AV,,,
MESSAGE=
This is a message to be
read before the song.
The maximum is 25 cols,
4 lines between \r\n.
;
# APPLY_TO = Indicates what campaign modes are affected by those options (101 means "NORMAL & CRAZY, but not HARD").
# IS_BOSS = Changes the song's channel to BOSS
# Other chart properties can be here, e.g.: BPMS, STOPS, etc.
# They serve as a default value when a chart doesn't include them
//---------------pump-single - s8----------------
#NOTEDATA:;
#STEPSTYPE:pump-single;
#DESCRIPTION:s8 Pro;
#DIFFICULTY:NUMERIC;
#METER:8;
#OFFSET:0.003000;
#BPMS:0.000000=158.000000
,156.000000=197.500000
,158.000000=237.000000
,160.000000=276.500000
,162.000000=316.000000
,176.000000=276.500000
,178.000000=237.000000
,180.000000=197.500000
,182.000000=158.000000
,184.000000=118.500000
,185.000000=104.500000
,186.000000=158.000000
;
#STOPS:186.000000=3.038000
;
#DELAYS:;
#WARPS:;
#TICKCOUNTS:0.000000=4
;
#SPEEDS:0.000000=1.000000=0.000000=0
;
#SCROLLS:0.000000=1.000000
;
#FAKES:;
#NOTES:
// measure 0
00000
01100
00001
00000
, // measure 1
00000
00200
00000
00000
, // measure 2
00000
00000
00000
00300
//---------------pump-single - s19----------------
#NOTEDATA:;
#STEPSTYPE:pump-single;
#DESCRIPTION:s19;
#DIFFICULTY:CRAZY;
#METER:19;
#OFFSET:0.003000;
// ...