Profile/Need for Speed Most Wanted

From Burnout Wiki

Protection

PC

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 Vita, Wii U

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 0x3FFFC Db ? MUD database
0x40000 0x400 ? ? 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 0x3D800 Db ? MUD database
0x3D804 0x2BFC ? ? Unknown data, always null
0x40400 0x410 ? ? EA account/login information See account info
0x40810 0x10 ? ? MD5 hash See protection

Mud::Db

Offset Length Type Name Description Comments
0x0 0x1 uint8_t muFormatVersion Always 3
0x1 0x3 char[3] macMagic
0x4 0x4 uint32_t muAllocatedSize
0x8 0x4 uint32_t muSchemaVersion 26, 27 or 28
0xC 0xC TableList mTables
0x18 0x8 Allocator mPageAllocator
0x20 0x100 uint8_t[256] mauReserved

Mud::SampleExternalArrayList<Mud::Table>

Offset Length Type Name Description Comments
0x0 0x4 uint32_t muCount
0x4 0x4 uint32_t muCapacity
0x8 0x4 Table* mpaStorage

Mud::Table

Offset Length Type Name Description Comments
0x0 0xD char[13] macName
0xD 0x3 Padding
0x10 0x178 RowDef mRowDef
0x188 0x4 Page* mpFirstPage
0x18C 0x4 Allocator* mpAllocator
0x190 0xB8 uint8_t[184] mauDefaultRow

Mud::RowDef

Offset Length Type Name Description Comments
0x0 0x2 uint16_t muRowSize
0x2 0x2 Padding
0x4 0x174 ColumnList mColumns

Mud::Column

Offset Length Type Name Description Comments
0x0 0xC char[12] macName
0xC 0x1 uint8_t muType See type
0xD 0x1 uint8_t muSize
0xE 0x2 uint16_t muRowOffset

Mud::Page

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

Mud::Page::Header

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

Mud::Page::Footer

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

Mud::Allocator

Offset Length Type Name Description Comments
0x0 0x4 Page* mpaPages Always 0xB800
0x4 0x4 int32_t miNumPages Always 0x320

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::Db::TableList

Name Type Length Comments
TableList SampleExternalArrayList<Table> 0xC

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