GPD: Difference between revisions
imported>Experiment5X |
imported>V3n3 (Small Edits) |
||
Line 107: | Line 107: | ||
|- | |- | ||
| 4 | | 4 | ||
| | | 4 | ||
| Byte[] | |||
| Unknown | | Unknown | ||
|- | |||
| 8 | |||
| 1 | |||
| Byte | |||
| DataType (see Below) | |||
|- | |||
| 9 | |||
| 7 | |||
| Byte[] | |||
| Unknown | | Unknown | ||
|- | |- | ||
| | | 16 | ||
| | | *depends on DataType* | ||
| | | *depends on DataType* | ||
| | | Data | ||
|} | |||
{| border=1 | |||
|- | |||
! DataType | |||
|- | |||
| Context | |||
|- | |||
| Int32 | |||
|- | |||
| Int64 | |||
|- | |||
| Double | |||
|- | |||
| String | |||
|- | |||
| Float | |||
|- | |||
| Binary | |||
|- | |||
| DateTime | |||
|} | |} | ||
Reading the SettingEntry might be a little tricky, depending on the DataType. | |||
Gonna write down later how to. | |||
== Image Entries == | == Image Entries == | ||
Line 269: | Line 303: | ||
! Information | ! Information | ||
|- | |- | ||
| | | 0 | ||
| | | 8 | ||
| | | Int64 | ||
| EntryID | | EntryID | ||
|- | |- | ||
| | | 8 | ||
| | | 8 | ||
| | | Int64 | ||
| | | SyncID | ||
|} | |} | ||
Revision as of 08:54, 29 August 2011
GPD (Gamer Profile Data) files are used by the Xbox 360 to store information inside a profile. They are based on the XDBF format. Profiles are composed of many of these files, each named under their respective executable's title id (e.g. 4D5307E6.gpd for Halo 3). The dashboard GPD (FFFE07D1.gpd) contains information and sync information about the titles.
Entry Table
An ID of 0x100000000 indicates that the entry is a Sync List, an ID of 0x200000000 means its a Sync Data entry.
The Settings, Achievement and Title namespaces each have their own Sync List and Sync Data entries.
An ID of 0x8000 usually indicates that entry is information to do with the title (image/name).
Entry Namespaces
Value | Description |
---|---|
1 | Achievement |
2 | Image |
3 | Setting |
4 | Title |
5 | String |
6 | Achievement Security (created by GFWL for offline unlocked achievements?) |
6 | Avatar Award (360 only, this is only stored with in the PEC version of the GPD) |
Entry Structures
Achievement Entries
Offset | Length | Type | Information |
---|---|---|---|
0x0 | 0x4 | unsigned int | Magic (0x1C) |
0x4 | 0x4 | unsigned int | Achievement ID |
0x8 | 0x4 | unsigned int | Image ID |
0xC | 0x4 | signed int | Gamerscore |
0x10 | 0x4 | unsigned int | Flags (see below) |
0x14 | 0x8 | signed long | Unlock Time |
0x18 | null terminated | unicode string | Name |
0x18 + Name length | null terminated | unicode string | Locked Description |
0x18 + Name length + Locked Description length | null terminated | unicode string | Unlocked Description |
Setting Entries
Offset | Length | Type | Information |
---|---|---|---|
0 | 4 | Int32 | SettingID |
4 | 4 | Byte[] | Unknown |
8 | 1 | Byte | DataType (see Below) |
9 | 7 | Byte[] | Unknown |
16 | *depends on DataType* | *depends on DataType* | Data |
DataType |
---|
Context |
Int32 |
Int64 |
Double |
String |
Float |
Binary |
DateTime |
Reading the SettingEntry might be a little tricky, depending on the DataType. Gonna write down later how to.
Image Entries
Image entries are composed of a PNG image.
Title Entries
These entries are located in the FFFE07D1.gpd. To get to them, the id for the XDBF entry is the title ID of the game, and the XDBF entry type is String. For more information about XDBF go to http://www.free60.org/XDBF
Offset | Length | Type | Information |
---|---|---|---|
0x0 | 0x4 | unsigned int | Title ID |
0x4 | 0x4 | signed int | Achievement Count |
0x8 | 0x4 | signed int | Achievement Unlocked Count |
0xC | 0x4 | signed int | Gamerscore Total |
0x10 | 0x4 | signed int | Gamerscore Unlocked |
0x14 | 0x8 | signed long | Unknown |
0x1C | 0x4 | signed int | Unknown |
0x20 | 0x8 | signed long | Last Played Time |
0x28 | null terminated | unicode string | Title Name |
Avatar Award Entries
The entries are only supported within the PEC version of the GPD. The images for the avatar awards however, are stored in the game GPD for that game.
Offset | Length | Type | Information |
---|---|---|---|
0 | 4 | u/Int32 | Magic? (44) |
4 | 4 | UInt32 | Award ID |
8 | 8 | u/Int64? | Unknown |
16 | 4 | UInt32 | GameID |
20 | 4 | UInt32 | Image ID |
24 | 4 | uInt32 | Flags(Same as achievement?) |
28 | 8 | Int64 | Unlock Time |
36 | 4 | u/Int32 | Unknown |
40 | 4 | u/Int32 | Gender? |
44 | Till Null | UniCode | Name |
44 + Name length | Till Null | UniCode | Locked Description |
44 + Name length + Locked Description length | Till Null | UniCode | Unlocked Description |
String Entries
String entries are simply a unicode string, to the length specified by the entry.
Sync Lists
This is a list of "Sync Items".
You can find the total sync items by,
((SyncList.Length / 16) - 1)
Sync Item
Offset | Length | Type | Information |
---|---|---|---|
0 | 8 | Int64 | EntryID |
8 | 8 | Int64 | SyncID |
I don't know much about the second id, however I believe it to have something to do with the SyncData's "Next Sync ID". I wouldn't recommend playing with it on a live profile as it is the only thing left in the gpd that is unknown and ms ban people some way.
Sync Data
Offset | Length | Type | Information |
---|---|---|---|
0x0 | 0x8 | unsigned long | Next Sync ID |
0x8 | 0x8 | unsigned long | Last Synced ID |
0x10 | 0x8 | signed long | Last Synced Time |