Line 1: |
Line 1: |
− | This page describes the contents of the [[Friend_Services|friend]] sysmodule savegame. Except for the config file, all of the data is stored inside a folder that represents the local account ID of the account. For example: /1/account stores the data of the main account. | + | This page describes the contents of the [[Friend_Services|friends]] sysmodule savegame. |
| + | |
| + | Save data for the sysmodule has the following general structure: |
| + | |
| + | data |
| + | ├── [[FRD_Savegame#config|config]] |
| + | └── <Local Account ID> |
| + | ├── [[FRD_Savegame#account|account]] |
| + | ├── [[FRD_Savegame#friendlist|friendlist]] |
| + | └── [[FRD_Savegame#mydata|mydata]] |
| + | |
| + | Despite being generally unused, the sysmodule supports the usage of multiple accounts. |
| + | |
| + | Each account gets its own "Local Account ID", and a directory named after this ID. The directory contains all relevant account information. |
| | | |
| == config == | | == config == |
| + | |
| + | This file only contains the local account ID of the currently active account. |
| + | |
| + | The friends sysmodule uses this file to determine which account to load by default. |
| | | |
| {| class="wikitable" | | {| class="wikitable" |
| |- | | |- |
− | ! Offset | + | ! Offset !! Size !! Description |
− | ! Size | |
− | ! Description | |
| |- | | |- |
− | | 0x00 | + | | 0x00 || 4 || File magic "FPCF" (Friends Preference Config) |
− | | 4 | |
− | | File magic "FPCF" (Friends Preference Config) | |
| |- | | |- |
− | | 0x04 | + | | 0x04 || 4 || File magic number (0x20101021) |
− | | 4 | |
− | | File magic number (0x20101021) | |
| |- | | |- |
− | | 0x08 | + | | 0x08 || 8 || Padding |
− | | 8 | |
− | | Padding | |
| |- | | |- |
− | | 0x10 | + | | 0x10 || 4 || Current Local Account ID |
− | | 4 | |
− | | Current Local Account ID | |
| |} | | |} |
| | | |
| == account == | | == account == |
| + | |
| + | This file stores various essential data related to the corresponding account. |
| | | |
| {| class="wikitable" | | {| class="wikitable" |
| |- | | |- |
− | ! Offset | + | ! Offset !! Size !! Description |
− | ! Size | |
− | ! Description | |
| |- | | |- |
− | | 0x00 | + | | 0x00 || 4 || File magic "FPAC" (Friends Preference Account Config) |
− | | 4 | |
− | | File magic "FPAC" (Friends Preference Account Config) | |
| |- | | |- |
− | | 0x04 | + | | 0x04 || 4 || File magic number (0x20101021) |
− | | 4 | |
− | | File magic number (0x20101021) | |
| |- | | |- |
− | | 0x08 | + | | 0x08 || 8 || Padding |
− | | 8 | |
− | | Padding | |
| |- | | |- |
− | | 0x10 | + | | 0x10 || 4 || Local Account ID |
− | | 4 | |
− | | Local Account ID | |
| |- | | |- |
− | | 0x14 | + | | 0x14 || 4 || PrincipalID |
− | | 4 | |
− | | PrincipalID | |
| |- | | |- |
− | | 0x18 | + | | 0x18 || 8 || LocalFriendCode |
− | | 8 | |
− | | LocalFriendCode | |
| |- | | |- |
− | | 0x20 | + | | 0x20 || (16 + 1) * 2 || 16-character UTF-16 NEX Password (16 characters + NULL termination) |
− | | (16 + 1) * 2 | |
− | | NEX Password | |
| |- | | |- |
− | | 0x42 | + | | 0x42 || (8 + 1) * 2 || 8-character UTF-16 PrincipalID HMAC (Used for logging into NASC server) (8 characters + NULL termination) |
− | | (8 + 1) * 2 | |
− | | PrincipalID HMAC (Used for logging into NASC server) | |
| |- | | |- |
− | | 0x54 | + | | 0x54 || 1 || NASC Environment (0: Production, 1: Testing, 2: Development) |
− | | 1 | |
− | | NASC Environment (0: Prod, 1: Test, 2: Dev) | |
| |- | | |- |
− | | 0x55 | + | | 0x55 || 1 || [[Friend_Services#Server_Types|Server type]] letter value |
− | | 1 | |
− | | [[Friend_Services#Server_Types|Server type]] letter value | |
| |- | | |- |
− | | 0x56 | + | | 0x56 || 1 || [[Friend_Services#Server_Types|Server type]] number value |
− | | 1 | |
− | | [[Friend_Services#Server_Types|Server type]] number value | |
| |- | | |- |
− | | 0x57 | + | | 0x57 || 1 || Padding |
− | | 1 | |
− | | Padding | |
| |} | | |} |
| | | |
| == mydata == | | == mydata == |
| + | |
| + | Stores console-specific information related to the account. |
| | | |
| {| class="wikitable" | | {| class="wikitable" |
| |- | | |- |
− | ! Offset | + | ! Offset !! Size !! Description |
− | ! Size | + | |- |
− | ! Description | + | | 0x00 || 4 || File magic "FPMD" (Friends Preference My Data/Device) |
| |- | | |- |
− | | 0x00 | + | | 0x04 || 4 || File magic number (0x20101021) |
− | | 4 | |
− | | File magic "FPMD" (Friends Preference My Data/Device) | |
| |- | | |- |
− | | 0x04 | + | | 0x08 || 8 || Padding |
− | | 4 | |
− | | File magic number (0x20101021) | |
| |- | | |- |
− | | 0x08 | + | | 0x10 || 4 || My NC Principal ID |
− | | 8 | |
− | | Padding | |
| |- | | |- |
− | | 0x10 | + | | 0x14 || 4 || Unknown |
− | | 4 | |
− | | My NC Principal ID | |
| |- | | |- |
− | | 0x14 | + | | 0x18 || 4 || [[FRD_Savegame#Change_Bit_Flags|Change bit flag]] |
− | | 4 | |
− | | Unknown | |
| |- | | |- |
− | | 0x18 | + | | 0x1C || 3 || [[Friend_Services#Preference|Preferences]] |
− | | 4 | |
− | | [https://github.com/kinnay/NintendoClients/wiki/Friends-Protocol-(3DS)#nintendopresence-structure Changed bit flags] | |
| |- | | |- |
− | | 0x1C | + | | 0x1F || 1 || Padding |
− | | 1 | |
− | | Is public mode | |
| |- | | |- |
− | | 0x1D | + | | 0x20 || 0x10 || [[Friend_Services#GameKey|GameKey]] of favorite title |
− | | 1 | |
− | | Is show game mode | |
| |- | | |- |
− | | 0x1E | + | | 0x30 || (16 + 1) * 2 || 16-Character UTF-16 personal message (comment) (16 characters + NULL termination) |
− | | 1 | |
− | | Is show played game | |
| |- | | |- |
− | | 0x1F | + | | 0x52 || 1 || First byte of the console's LocalFriendCodeSeed |
− | | 1 | |
− | | Padding | |
| |- | | |- |
− | | 0x20 | + | | 0x53 || 5 || Padding |
− | | 0x10 | |
− | | GameKey of my favorite game: | |
− | u64 title_id
| |
− | u32 title_version
| |
− | u32 unknown
| |
| |- | | |- |
− | | 0x30 | + | | 0x58 || 8 || [[Friend_Services#Profile|Profile]] |
− | | 16 * 2 | |
− | | UTF16 string of personal message | |
| |- | | |- |
− | | 0x50 | + | | 0x60 || 8 || u64, LocalFriendCodeSeed |
− | | 8 | |
− | | Unknown | |
| |- | | |- |
− | | 0x58 | + | | 0x68 || (12 + 1) * 2 || 12-character UTF-16 MAC address (only the digits) (12 characters + NULL termination) |
− | | 8 | |
− | | | |
− | u8 region
| |
− | u8 country
| |
− | u8 area
| |
− | u8 language
| |
− | u8 platform = 2
| |
− | u8 padding[3]
| |
| |- | | |- |
− | | 0x60 | + | | 0x82 || (15 + 1) * 2 || 15-character UTF-16 console serial number without the checksum digit (15 characters + NULL termination) |
− | | 8 | |
− | | LocalFriendCodeSeed u64 | |
| |- | | |- |
− | | 0x68 | + | | 0xA2 || (10 + 1) * 2 || 10-character UTF-16 Display name (10 characters + NULL termination) |
− | | (12 + 1) * 2 | |
− | | UTF16 string of MAC address of the console (only the digits) | |
| |- | | |- |
− | | 0x82 | + | | 0xBB || 0x60 || [[Friend_Services#Mii_Data|Mii data]] |
− | | (15 + 1) * 2 | |
− | | UTF16 string of console serial number without the checksum digit | |
| |- | | |- |
− | | 0xA2 | + | | 0x11B || 5 || Padding |
− | | (10 + 1) * 2 | + | |} |
− | | UTF16 string of Display name | + | |
| + | === Change Bit Flags === |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 0xBB
| + | ! Value !! Description |
− | | 0x60
| |
− | | Unaligned [[Mii#Mii_format|Mii data]]
| |
| |- | | |- |
− | | 0x11B | + | | 1 || [[Friend_Services#GameKey|Game Key]] changed. |
− | | 5 | + | |- |
− | | Padding (0x120) | + | | 2 || Game mode description changed. |
| + | |- |
| + | | 4 || Join availability flag changed. |
| + | |- |
| + | | 8 || Matchmake system type changed. |
| + | |- |
| + | | 16 || Join game ID changed. |
| + | |- |
| + | | 32 || Join game mode changed. |
| + | |- |
| + | | 64 || Owner [PID] changed. |
| + | |- |
| + | | 128 || Join group ID changed. |
| + | |- |
| + | | 256 || Application argument changed. |
| |} | | |} |
| | | |
| == friendlist == | | == friendlist == |
| + | |
| + | Contains the friend list associated with the account. |
| | | |
| === Header === | | === Header === |
Line 187: |
Line 145: |
| {| class="wikitable" | | {| class="wikitable" |
| |- | | |- |
− | ! Offset | + | ! Offset !! Size !! Description |
− | ! Size | |
− | ! Description | |
| |- | | |- |
− | | 0x00 | + | | 0x00 || 4 || File magic "FPFL" (Friends Preference Friend List) |
− | | 4 | |
− | | File magic "FPFL" (Friends Preference Friend List) | |
| |- | | |- |
− | | 0x04 | + | | 0x04 || 4 || File magic number (0x20101021) |
− | | 4 | |
− | | File magic number (0x20101021) | |
| |- | | |- |
− | | 0x08 | + | | 0x08 || 8 || Padding |
− | | 8 | |
− | | Padding | |
| |- | | |- |
− | | 0x10 | + | | 0x10 || 100 * 0x100 || [[FRD_Savegame#Friend_entry|Friend entries]] (maximum 100) |
− | | ? * 0x100 | |
− | | [[FRD_Savegame#Friend_entry|Friend entries]]... | |
| |} | | |} |
| | | |
Line 212: |
Line 160: |
| {| class="wikitable" | | {| class="wikitable" |
| |- | | |- |
− | ! Offset | + | ! Offset !! Size !! Description |
− | ! Size | |
− | ! Description | |
| |- | | |- |
− | | 0x00 | + | | 0x00 || 0x10 || [[Friend_Services#FriendKey|FriendKey]] of this friend |
− | | 0x10 | |
− | | FriendKey: | |
− | u32 principal_id
| |
− | u32 padding
| |
− | u64 friend_code
| |
| |- | | |- |
− | | 0x10 | + | | 0x10 || 0x4 || NC Principal ID of this friend |
− | | 0x4 | |
− | | Unknown | |
| |- | | |- |
− | | 0x14 | + | | 0x14 || 1 || [[Friend_Services#Relationship_Types|Relationship]] with this friend |
− | | 1 | |
− | | Friend relationship | |
| |- | | |- |
− | | 0x15 | + | | 0x15 || 8 || [[Friend_Services#Profile|Profile]] of this friend |
− | | 8 | |
− | | | |
− | u8 region
| |
− | u8 country
| |
− | u8 area
| |
− | u8 language
| |
− | u8 platform = 2
| |
− | u8 padding[3]
| |
| |- | | |- |
− | | 0x1D | + | | 0x1D || 3 || Padding |
− | | 3 | |
− | | Padding | |
| |- | | |- |
− | | + | | 0x20 || 0x10 || [[Friend_Services#GameKey|GameKey]] of this friend's favorite title |
− | | 0x20 | + | |- |
− | | 0x10 | + | | 0x30 || (16 + 1) * 2 || 16-character UTF-16 personal message (comment) of this friend (16 characters + NULL termination) |
− | | GameKey of friend favorite game: | + | |- |
− | u64 title_id
| + | | 0x52 || 0x6 || padding |
− | u32 title_version
| |
− | u32 unknown
| |
| |- | | |- |
− | | 0x30 | + | | 0x58 || 8 || NEX timestamp for the last time this friend updated their personal comment (message) |
− | | 16 * 2 | |
− | | UTF16 string of personal message | |
| |- | | |- |
− | | 0x50 | + | | 0x60 || 8 || NEX timestamp for the last time this friend updated their Mii |
− | | 0x8 | |
− | | Unknown | |
| |- | | |- |
− | | 0x58 | + | | 0x68 || 8 || NEX timestamp for the last time this friend was seen online |
− | | 8 | |
− | | Message update [https://github.com/kinnay/NintendoClients/wiki/NEX-Common-Types#datetime timestamp] | |
| |- | | |- |
− | | 0x60 | + | | 0x70 || 0x60 || [[Friend_Services#Mii_Data|Mii data]] |
− | | 8 | |
− | | Mii update [https://github.com/kinnay/NintendoClients/wiki/NEX-Common-Types#datetime timestamp] | |
| |- | | |- |
− | | 0x68 | + | | 0xD0 || (10 + 1) * 2 || 10-character UTF-16 Display name |
− | | 8 | |
− | | Last online [https://github.com/kinnay/NintendoClients/wiki/NEX-Common-Types#datetime timestamp] | |
| |- | | |- |
− | | 0x70 | + | | 0xE6 || 1 || bool, profanity flag |
− | | 0x60 | |
− | | [[Mii#Mii_format|Mii data]] | |
| |- | | |- |
− | | 0xD0 | + | | 0xE7 || 1 || u8, [[Mii#Mii_format|Mii character set]] |
− | | (10 + 1) * 2 | |
− | | UTF16 string of display name | |
| |- | | |- |
− | | 0xE8 | + | | 0xE8 || 8 || NEX timestamp for when this friend was added |
− | | 8 | |
− | | Friendship? [https://github.com/kinnay/NintendoClients/wiki/NEX-Common-Types#datetime timestamp] | |
| |- | | |- |
− | | 0xF0 | + | | 0xF0 || 8 || Appears to be identical to the timestamp at offset 0x58. |
− | | 8 | |
− | | Same as 0x58? | |
| |- | | |- |
− | | 0xF8 | + | | 0xF8 || 8 || Appears to be identical to the timestamp at offset 0x60. |
− | | 8 | |
− | | Same as 0x60? | |
| |} | | |} |