-
Notifications
You must be signed in to change notification settings - Fork 0
FSIDs and Filenames
Flipnote Studio IDs are the primary method of user identification on Flipnote Studio. They consist of 16 hexadecimal (0-9, A-F) digits.
They are generated when the user first starts Flipnote Studio, and are stored in savedata unless the system is reset and/or the Flipnote Studio app is deleted.
Using 1440D700CEF78DA8
as an example Flipnote Studio ID:
Value | Description |
---|---|
1 | Region ID |
440D70 | Unknown - possibly generated from a per-console seed? |
0 | This is nearly always 0 - see below |
CEF78DA8 | Last 8 digits of the console's MAC address |
In most FSIDs, the character at index 7 will always be 0. The only known exception is the FSID that Nintendo used for their contest Flipnotes (such as the Zelda 25th Anniversary, for example), which is 14E494E35A443235
.
Value | Description |
---|---|
0 | Japan - These are from Version 1, and carried over when updated to version 2 |
1 | Japan - Version 2 and above |
5 | Americas |
9 | Europe and Oceania |
This regex can be used to check if a Flipnote Studio ID is valid:
[0159]{1}[0-9A-F]{15}
Using F78DA8_14768882B56B8_030
as an example Flipnote Filename:
Value | Description |
---|---|
F78DA8 | Last 6 digits of the console's MAC address |
_ | Constant |
14768 | Likely based on console time and/or date |
882B56B8 | Random |
_ | Constant |
030 | Number of edits |
When saved on the system memory or SD card, the first character of the filename is used as a kind of checksum against the rest of the filename. As a result, it will not match the current filename field in the PPM metadata.
Here's a Python 3 implementation of how the checksum character is calculated:
checksumDict = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
# filename should be the current filename as a string e.g 'F78DA8_14768882B56B8_030'
def calc_check_digit(filename):
# sum starts out as the first byte of the current filename as stored in the PPM metadata
sumc = int(filename[0:2], 16)
for i in range(1, 16):
char = ord(filename[i])
# sumc should stay within the uint8 range
sumc = (sumc + char) % 256
return checksumDict[sumc % len(checksumDict)]
This regex can be used to check if a Flipnote filename is valid:
[0-9A-F]{6}_[0-9A-F]{13}_[0-9]{3}
Alternatively, this regex can be used for Flipnote filenames with the filesystem checksum added:
[0-9A-Z]{1}[0-9A-F]{5}_[0-9A-F]{13}_[0-9]{3}
In most cases, the first 6 digits of a Flipnote filename match the last 6 digits of the author's Flipnote Studio ID, however if the console MAC address has changed since the user's Flipnote Studio ID was generated, the last six digits of a Flipnote filename will not be the same as the last six digits of the creator's Flipnote Studio ID.
While this is a rare occurrence, it can happen if the DSi console has been repaired after the Flipnote Studio ID was generated (the MAC address is stored on the WiFi card -- if that's replaced then the MAC address changes).
When writing a file, it uses the current MAC address in the filename, not the Flipnote Studio ID.