Profile/Need for Speed Hot Pursuit

From Burnout Wiki

Protection

PC, PC (Remastered)

Saves are validated by a modified MD5 hash at the end of the save. It can be overcome using Bo98's save rehasher.

Other platforms

No protection is present.

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.

Although row definitions are best read programmatically with the rest of the database, the structures they define are provided in a subpage for those who want to read them manually.

Row definitions

Structures

Profile

This is the overall savegame structure. Only the MUD database itself is defined in Criterion's debugging symbols; the rest is from independent research and prone to error.

Playstation 3, Xbox 360, PlayStation 4, Switch

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 Db ? MUD database
0x40004 0x4700C ? ? Unknown data, always null

PC

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 Db ? MUD database
0x40004 0x4700C ? ? Unknown data, always null
0x87010 0x410 ? ? EA account/login information See account info
0x87420 0x10 ? ? MD5 hash See protection

PC (Remastered)

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 Db ? MUD database
0x40004 0x4700C ? ? Unknown data, always null
0x87010 0x1 char ? Unused. Replaces account info Always 0x20
0x87011 0x10 ? ? MD5 hash See protection

Mud::Db

32-bit

Offset Length Type Name Description Comments
0x0 0x1 uint8_t muFormatVersion Always 2
0x1 0x3 Padding
0x4 0x4 uint32_t muSchemaVersion Schema version 1 on PC and 360, 5 on PS3
0x8 0x100 uint8_t[256] mauReserved
0x108 0x4 ArrayList<Table, 200>* mTables Database tables Always 0x180
0x10C 0x8 Allocator mPageAllocator Database allocation

64-bit

Offset Length Type Name Description Comments
0x0 0x1 uint8_t muFormatVersion Always 2
0x1 0x3 Padding
0x4 0x4 uint32_t muSchemaVersion Schema version 8 in HPR
0x8 0x100 uint8_t[256] mauReserved
0x108 0x8 ArrayList<Table, 200>* mTables Database tables Always 0x180
0x110 0xC Allocator mPageAllocator Database allocation

Mud::Table

32-bit

Offset Length Type Name Description Comments
0x0 0xD char[13] macName Table name
0xD 0x3 Padding
0x10 0x178 RowDef mRowDef Row
0x188 0x4 Page* mpFirstPage
0x18C 0x4 Allocator* mpAllocator Always 0x10C
0x190 0xB8 uint8_t[184] mauDefaultRow Default values Data length is same as row size

64-bit

Offset Length Type Name Description Comments
0x0 0xD char[13] macName Table name
0xD 0x3 Padding
0x10 0x178 RowDef mRowDef Row
0x188 0x8 Page* mpFirstPage
0x190 0x8 Allocator* mpAllocator Always 0x110
0x198 0xB8 uint8_t[184] mauDefaultRow Default values Data length is same as row size

Mud::RowDef

Offset Length Type Name Description Comments
0x0 0x2 uint16_t mRowSize Number of columns
0x2 0x2 Padding
0x4 0x174 ColumnList mColumns Columns

Mud::Column

Offset Length Type Name Description Comments
0x0 0xD char[13] macName Name
0xD 0x1 uint8_t muType Field type See type
0xE 0x2 uint16_t muRowOffset Offset in structure

Mud::Page

32-bit

Offset Length Type Name Description Comments
0x0 0x10 Header mHeader
0x10 0xEC uint8_t[236] mBody
0xFC 0x4 Footer mFooter

64-bit

Offset Length Type Name Description Comments
0x0 0x18 Header mHeader
0x18 0xE4 uint8_t[228] mBody
0xFC 0x4 Footer mFooter

Mud::Page::Header

32-bit

Offset Length Type Name Description Comments
0x0 0x4 Page* mpNext Next node
0x4 0x4 Table* mpTable Type
0x8 0x2 uint16_t muNextAllocation Length
0xA 0x2 Padding
0xC 0x4 uint32_t muSentinelPre

64-bit

Offset Length Type Name Description Comments
0x0 0x8 Page* mpNext Next node
0x8 0x8 Table* mpTable Type
0x10 0x2 uint16_t muNextAllocation Length
0x12 0x2 padding
0x14 0x4 uint32_t muSentinelPre

Mud::Page::Footer

Offset Length Type Name Description Comments
0x0 0x4 uint32_t muSentinelPost

Mud::Allocator

32-bit

Offset Length Type Name Description Comments
0x0 0x4 Page* mpaPages Always 0x1CA00
0x4 0x4 int32_t miNumPages Always 0x236

64-bit

Offset Length Type Name Description Comments
0x0 0x8 Page* mpaPages Always 0x1D080
0x8 0x4 int32_t miNumPages Always 0x22F

Account info

Offset Length Type Name Description Comments
0x0 0x400 char[1024] ? Token
0x400 0x4 uint32_t ? Version?
0x404 0x4 Padding
0x408 0x8 uint64_t ? Account ID? Possibly uint32_t followed by 4 bytes of padding

Typedefs

Mud::RowDef::ColumnList

Name Type Length Comments
ColumnList MudArrayList<Column, 23>::type 0x174

Mud::MudArrayList<Mud::Column, 23>::type

Name Type Length Comments
type ArrayList<Column, 23> 0x174

Enumerations

Mud::EType

Name Value Comments
E_TYPE_INT32 0
E_TYPE_FLOAT 1
E_TYPE_INT16 2
E_TYPE_INT8 3
E_TYPE_INT64 4
E_TYPE_BOOL 5
E_TYPE_UINT8 6
E_TYPE_UINT16 7
E_TYPE_UINT32 8
E_TYPE_UINT64 9
E_TYPE_STRING 10
E_TYPE_COUNT 11