icon picker
SSPMv1 (Binary)

Before reading into this format, make sure you either have a good understand of how binary works, or read the Binary Breakdown page for a quick understanding of how it works.
SSPMv1 is very simplistic, and in some ways better than v2 because of how easy to read it is. The only reason it was abandoned is because it wasn’t future-proof. (You couldn’t add new features to the format)

Header

Magic Number (4 bytes)

53 53 2B 6D (SS + M when converted to text)

Version Number (2 bytes)

01 00 (1 for SSPMv1)

Reserved Space (2 bytes)

00 00

Metadata

Map ID

UTF-8 newline-terminated String converted to hexadecimal (example: haxagon_-_iyowa_-_kyu-kurarin_7_7_bootleg)

Map Name (Artist - Title)

UTF-8 newline-terminated String converted to hexadecimal (example: iyowa - Kyu-kurarin (7_7 bootleg))

Map Creator

UTF-8 newline-terminated String converted to hexadecimal (example: Haxagon)

Millisecond of the very last note (4 bytes)

32 bit unsigned integer (00 00 00 00)

Total Note Count (4 bytes)

32 bit unsigned integer (00 00 00 00)
SSPMv1 Map Difficulty (1 byte)
Byte
Difficulty Name
0x00
N/A
0x01
Easy
0x02
Medium
0x03
Hard
0x04
Logic
0x05
Tasukete
There are no rows in this table

Cover


Cover Storage Type (1 byte)
Byte
Difficulty Name
0x00
No cover
0x01
(Not used anymore)
0x02
PNG
There are no rows in this table

If the storage type is 0x02 (PNG):

Length of the PNG Data in Bytes (8 bytes)

00 00 00 00 00 00 00 00

PNG Data (Must contain a full PNG image)

(however long it is set in the 8 bytes above)

Audio

Audio Storage Type (1 byte)
Byte
Difficulty Name
0x00
No audio
0x01
Stored audio file
There are no rows in this table
If the storage type is 0x01 (Stored audio file):

Length of the Audio Data in Bytes (8 bytes)

0x00 00 00 00 00 00 00 00

Audio Data (Must contain a full MP3 or OGG audio)

(however long it is set in the 8 bytes above)

Note Data

Note that this is for every note. After the end, the next note is written in the same format as shown below.

For the X and Y position, they are on a 1 incremented plane as well, but the origin is at 1,1
2 on the X axis is to the right, and 0 is to the left
The Y axis is actually flipped, so 0 on the Y axis is up, and 2 is down

Time (in milliseconds, 4 bytes)

32 bit unsigned integer (00 00 00 00)
Note Storage Type (1 byte)
Byte
Difficulty Name
0x00
Integer (non-quantum)
0x01
Quantum
There are no rows in this table
If the storage type is 0x00 (Integer):

X position (1 byte)

8 bit unsigned integer (00)

Y position (1 byte)

8 bit unsigned integer (00)
If the storage type is 0x01 (Quantum):

X position (4 bytes)

32 bit signed float (00 00 00 00)

Y position (4 bytes)

32 bit signed float (00 00 00 00)

Want to print your doc?
This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.