Need for Speed Hot Pursuit uses version 3 of the Bundle format, adding support for an additional memory type, game changer IDs, and delta bundles.
Memory types
Separate data chunks are used to define what memory type resources are loaded into. These chunks are platform specific (see EMemoryType ). Keep these in mind when viewing the structures.
Structures
CgsResource::BundleV2
Offset
Length
Type
Name
Description
Comments
0x0
0x4
char[4]
macMagicNumber
Bundle magic
bnd2
0x4
0x4
uint32_t
muVersion
Bundle version
3
0x8
0x4
uint32_t
muPlatform
Platform the bundle was built for
See platform
0xC
0x4
uint32_t
muDebugDataOffset
Bundle debug data offset
ResourceStringTable XML
0x10
0x4
uint32_t
muResourceEntriesCount
Number of resources in the bundle
0x14
0x4
uint32_t
muResourceEntriesOffset
Resource entries offset
0x18
0x10
uint32_t[4]
mauResourceDataOffset
Per-memory type resource data offsets
0x28
0x4
uint32_t
muFlags
Bundle flags
See flags
CgsResource::BundleV2::ResourceEntry
Entries are sorted sequentially by, from highest to lowest level:
Pool offset
Index from ID (if Game Changer)
Resource type from ID (if Game Changer)
ID type
Resource ID (lower 32 bits)
Offset
Length
Type
Name
Description
Comments
0x0
0x8
ID
mResourceId
Resource ID
0x8
0x8
uint64_t
muImportHash
Dependency name(s) CRC32(s)
Multiple are combined with a bitwise OR
0x10
0x10
uint32_t[4]
mauUncompressedSizeAndAlignment
Per-memory type resource sizes
Has high nibble for alignment which changes between platforms 1 << [nibble] equals the memory alignment value
0x20
0x10
uint32_t[4]
mauSizeAndAlignmentOnDisk
Per-memory type compressed resource sizes
0x30
0x10
uint32_t[4]
mauDiskOffset
Per-memory type resource offsets
Relative to the start of the respective memory type's data offset
0x40
0x4
uint32_t
muImportOffset
Imports offset
0x44
0x4
uint32_t
muResourceTypeId
Resource type
See resource types
0x48
0x2
uint16_t
muImportCount
Number of imports
0x4A
0x1
uint8_t
muFlags
Resource flags
Unused?
0x4B
0x1
uint8_t
muPoolOffset
Pool index
0x4C
0x4
Padding
CgsResource::BundleV2::ImportEntry
Import entries are appended to the resource data.
Offset
Length
Type
Name
Description
Comments
0x0
0x8
ID
mResourceId
Imported resource ID
0x8
0x4
uint32_t
muImportTypeAndOffset
Offset of the pointer to be set at runtime
See import type
0xC
0x4
Padding
CgsResource::ID
Offset
Length
Type
Name
Description
Comments
0x0
0x8
CHash
mHash
Resource ID
ID type stored in highest 8 bits, ID in lowest 32 bits. See ID type
Game Changer ID
This is a specific type of ID which is not an explicitly defined structure, but stores extra information in the high bits of the ID.
Offset
Length
Type
Name
Description
Comments
0x0
0x1
EIdType
ID type
See ID type
0x1
0x1
uint8_t
Index
0x2
0x2
uint16_t
Resource type ID
See resource types Does not always match the entry's muResourceTypeId field
0x4
0x4
uint32_t
Resource ID/Game changer ID
ID tracked by the game database. See UniqueId
Typedefs
CgsResource::ID::CHash
Name
Type
Length
Comments
CHash
uint64_t
0x8
Enumerations
Platform
Name
Value
Comments
KU_BUNDLE_PLATFORM_PC
1
PC. Reused for all Hot Pursuit Remastered platforms
KU_BUNDLE_PLATFORM_X360
2
Xbox 360
KU_BUNDLE_PLATFORM_PS3
3
PlayStation 3
CgsResource::BundleV2::eBundleFlags
Name
Value
Comments
E_FLAGS_DEFAULT
0x0
E_FLAGS_ZLIB_COMPRESSION
0x1
Resources are compressed using zlib
E_FLAGS_MAIN_MEM_OPTIMISATION
0x2
E_FLAGS_GRAPHICS_MEM_OPTIMISATION
0x4
E_FLAGS_CONTAINS_DEBUG_DATA
0x8
Resource string table XML data is present
E_FLAGS_NON_ASYNCH_FIXUP_REQUIRED
0x10
E_FLAGS_MULTISTREAM_BUNDLE
0x20
More than one stream is used
E_FLAGS_DELTA_BUNDLE
0x40
Contains additions to a base bundle
CgsResource::BundleV2::eImportType
Name
Value
Comments
E_IMPORT_TYPE_POINTER
0
E_IMPORT_TYPE_RESOURCE_HANDLE
1
CgsResource::ID::EIdType
Name
Value
Comments
E_ID_TYPE_NORMAL
0x0
Lowercase resource name CRC32 hash
E_ID_TYPE_GAMECHANGER
0x1
See Game Changer ID
E_ID_TYPE_RESOURCE_LIST
0x80
E_ID_TYPE_DELTA_BUNDLE
0xC0
Additions to a base resource
EMemoryType
PlayStation 3
Name
Value
Comments
E_MEMTYPE_MAIN
0
E_MEMTYPE_GRAPHICS_SYSTEM
1
E_MEMTYPE_GRAPHICS_LOCAL
2
E_MEMTYPE_DISPOSABLE
3
E_MEMTYPE_NUMTYPES
4
Xbox 360
Name
Value
Comments
E_MEMTYPE_MAIN
0
E_MEMTYPE_PHYSICAL?
1
PHYSICAL
E_MEMTYPE_DISPOSABLE
2
?
3
DUMMY
E_MEMTYPE_NUMTYPES
4
PC, Remastered
Name
Value
Comments
E_MEMTYPE_MAIN
0
E_MEMTYPE_DISPOSABLE
1
?
2
DUMMY
?
3
DUMMY
E_MEMTYPE_NUMTYPES
4