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.
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
AK::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
TableList
mpTables
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
TableList
mpTables
Database tables
Always 0x180
0x110
0xC
Allocator
mPageAllocator
Database allocation
AK::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
AK::Mud::RowDef
Offset
Length
Type
Name
Description
Comments
0x0
0x2
uint16_t
muRowSize
Number of columns
0x2
0x2
Padding
0x4
0x174
ColumnList
mColumns
Columns
AK::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
AK::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
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
0xB0B0ABCD
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
0xB0B0ABCD
Offset
Length
Type
Name
Description
Comments
0x0
0x4
uint32_t
muSentinelPost
0xC00BACCA
AK::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
AK::Mud::Db::TableList
AK::Mud::RowDef::ColumnList
AK::Mud::MudArrayList<Mud::Column, 23>::type
Enumerations
AK::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