Profile/Need for Speed Hot Pursuit: Difference between revisions
Content added Content deleted
(Created page.) |
(Improved page structure.) |
||
Line 1: | Line 1: | ||
= Headers, footers and protection = |
|||
This section lists the game-specific headers, footers and protections on the savegame. See the section on the [[Profile#Protection|profile page]] for per-platform protections. |
|||
⚫ | |||
A 4 byte header specifying the length of the database is the first field in the save. All pointers in the database are relative to offset 4 in the file because of this. After the database is {{hex|0x47000}} bytes of null data. Additional data follows on PC. |
|||
⚫ | |||
⚫ | The database is followed by 1024 characters storing the login token. The token is followed by a |
||
After this is a 128-bit hash used for savegame validation. Without recalculating the hash, saves cannot be modified. The algorithm used is currently unknown. |
|||
==== PC (Remastered) ==== |
|||
The database is followed by a space character ({{hex|0x20}}), then the same 128-bit hash as is used in the original PC game. No padding is present. |
|||
==== Other platforms ==== |
|||
No game-specific headers, footers or protections are present on other platforms. |
|||
= Row definitions = |
= Row definitions = |
||
Row definitions define the fields, or columns, used in each table. With different schema versions, new row definitions may be added and existing ones may be altered or removed. |
Row definitions define the fields, or columns, used in each table. With different schema versions, new row definitions may be added and existing ones may be altered or removed. |
||
Line 23: | Line 6: | ||
= Structures = |
= Structures = |
||
=== Savegame === |
|||
This is the overall savegame structure. Only the MUD database itself is defined in Criterion's debugging symbols; the rest is independent research and prone to error. |
|||
==== Playstation 3, Xbox 360, PlayStation 4, Switch ==== |
|||
{| class="wikitable" |
|||
! Offset !! Length !! Type !! Name !! Description !! Comments |
|||
|- |
|||
| 0x0 || 0x4 || uint32_t || ? || Database length || All pointers in the database are relative to offset 0x4 because of this |
|||
|- |
|||
| 0x4 || 0x40000 || [[#Mud::Db|Db]] || ? || MUD database || |
|||
|- |
|||
| 0x40004 || 0x4700C || ? || ? || Unknown data, always null || |
|||
|} |
|||
⚫ | |||
{| class="wikitable" |
|||
! Offset !! Length !! Type !! Name !! Description !! Comments |
|||
|- |
|||
| 0x0 || 0x4 || uint32_t || ? || Database length || All pointers in the database are relative to offset 0x4 because of this |
|||
|- |
|||
| 0x4 || 0x40000 || [[#Mud::Db|Db]] || ? || MUD database || |
|||
|- |
|||
| 0x40004 || 0x4700C || ? || ? || Unknown data, always null || |
|||
|- |
|||
| 0x87010 || 0x410 || ? || ? || EA account/login information || See [[#Account info|account info]] |
|||
|- |
|||
| 0x87420 || 0x10 || ? || ? || 128-bit hash || Used for save validation. Unknown algorithm |
|||
|} |
|||
⚫ | |||
{| class="wikitable" |
|||
! Offset !! Length !! Type !! Name !! Description !! Comments |
|||
|- |
|||
| 0x0 || 0x4 || uint32_t || ? || Database length || All pointers in the database are relative to offset 0x4 because of this |
|||
|- |
|||
| 0x4 || 0x40000 || [[#Mud::Db|Db]] || ? || MUD database || |
|||
|- |
|||
| 0x40004 || 0x4700C || ? || ? || Unknown data, always null || |
|||
|- |
|||
| 0x87010 || 0x1 || char || ? || Unused. Replaces account info || Always 0x20 |
|||
|- |
|||
| 0x87011 || 0x10 || ? || ? || 128-bit hash || Used for save validation. Unknown algorithm. Not padded |
|||
|} |
|||
=== Mud::Db === |
=== Mud::Db === |
||
==== 32-bit ==== |
==== 32-bit ==== |
||
Line 193: | Line 220: | ||
|- |
|- |
||
| 0x8 || 0x4 || int32_t || miNumPages || || Always 0x22F |
| 0x8 || 0x4 || int32_t || miNumPages || || Always 0x22F |
||
|} |
|||
=== Account info === |
|||
⚫ | '''PC only.''' The database is followed by 1024 characters storing the login token. The token is followed by a {{hex|0x10}}-long chunk which stores a 32-bit integer with value <code>2</code>, 4 bytes of padding, and a 64-bit integer (or 32-bit with 4 bytes padding) which is presumably the account ID. |
||
{| class="wikitable" |
|||
! Offset !! Length !! Type !! Name !! Description !! Comments |
|||
|- |
|||
| 0x0 || 0x400 || char[1024] || ? || Token || |
|||
|- |
|||
| 0x400 || 0x4 || uint32_t || ? || Version? || |
|||
|- |
|||
| 0x404 || 0x4 || || || Padding || |
|||
|- |
|||
| 0x408 || 0x8 || uint64_t || ? || EA account ID || Possibly uint32_t followed by 4 bytes of padding |
|||
|} |
|} |
||