Bundle 2/NFS Most Wanted

From Burnout Wiki

Need for Speed Most Wanted uses version 5 of the Bundle format, adding support for streams and updating certain fields and enumerations.

Memory types[edit | edit source]

Across all Bundle versions, a common theme is the use of separate data chunks to define what memory type resources are loaded into. These chunks are as follows:

  1. Main Memory
  2. Graphics System
  3. Graphics Local
  4. Disposable

Keep these in mind when viewing the specs below.

Structures[edit | edit source]

CgsResource::BundleV2[edit | edit source]

Offset Length Type Name Description Comments
0x0 0x4 char[4] macMagicNumber Magic bnd2
0x4 0x2 uint16_t muVersion Format version 5
0x6 0x2 uint16_t muPlatform Platform the bundle is built for See Platform
0x8 0x4 uint32_t muDebugDataOffset ResourceStringTable offset
0xC 0x4 uint32_t muResourceEntriesCount Number of entries
0x10 0x4 uint32_t muResourceEntriesOffset Resource entries Sorted by stream index first, resource ID second.
0x14 0x10 uint32_t[4] mauResourceDataOffset Offsets for chunks 1-4
0x24 0x4 uint32_t muFlags Bundle flags See eBundleFlags
0x28 0x8 ID mDefaultResourceId Default resource to access
0x30 0x4 int32_t miDefaultResourceStreamIndex Stream index of the default resource
0x34 0x3C char[4][15] macStreamName Names of the streams contained in the bundle

CgsResource::BundleV2::ResourceEntry[edit | edit source]

Offset Length Type Name Description Comments
0x0 0x8 ID mResourceId UniqueId or name CRC32 If UniqueId, starts with 01. Hashed names are all lowercase.
0x8 0x10 uint32_t[4] mauUncompressedSizeAndAlignment File sizes (uncompressed) for chunks 1-4 Has high nibble for alignment; changes between platforms
1 << [nibble] equals the memory alignment value"
0x18 0x10 uint32_t[4] mauSizeAndAlignmentOnDisk File sizes (compressed) for chunks 1-4
0x28 0x10 uint32_t[4] mauDiskOffset File offsets for chunks 1-4
0x38 0x4 uint32_t muImportOffset Imports offset
0x3C 0x4 uint32_t muResourceTypeId File type See resource types
0x40 0x2 uint16_t muImportCount Number of imports
0x42 0x1 uint8_t muFlags Flags Unused?
0x43 0x1 uint8_t muStreamOffset Stream index Per-file. Refer to macStreamName
0x44 0x4 padding

CgsResource::BundleV2::ImportEntry[edit | edit source]

Offset Length Type Name Description Comments
0x0 0x8 ID mResourceId UniqueId or name CRC32 ImportEntries are appended to the end of internal files.
0x8 0x4 uint32_t muImportTypeAndOffset
0xC 0x4 padding

CgsResource::ID[edit | edit source]

Offset Length Type Name Description Comments
0x0 0x8 CHash mHash Resource ID Type at 0x0, ID at 0x4. See ID type for type info

Typedefs[edit | edit source]

CgsResource::ID::CHash[edit | edit source]

Name Type Length Comments
CHash uint64_t 0x8

Enumerations[edit | edit source]

Platform[edit | edit source]

Name Value Comments
? 1 PC
? 2 PlayStation 3
? 3 Xbox 360
? 4 PlayStation Vita
? 5 Wii U

CgsResource::BundleV2::eBundleFlags[edit | edit source]

Name Value Comments
E_FLAGS_ZLIB_COMPRESSION 0x1 Resources are compressed using zlib
E_FLAGS_CONTAINS_DEBUG_DATA 0x2 Resource string table XML data is present
E_FLAGS_MULTISTREAM_BUNDLE 0x8 More than one stream is used (graphics, sound, etc)
E_FLAGS_DELTA_BUNDLE 0x10 Contains additions to a base bundle
E_FLAGS_CONTAINS_DEFAULT_RESOURCE 0x20 A default resource ID is specified in mDefaultResourceId

CgsResource::BundleV2::eImportType[edit | edit source]

Name Value Comments

CgsResource::ID::EIdType[edit | edit source]

To do:
These are from Most Wanted's symbols and need to be verified in Hot Pursuit.
Name Value Comments
E_ID_TYPE_NORMAL 0x0 Lowercase resource name CRC32 hash
E_ID_TYPE_DELTA_BUNDLE 0xC0 Additions to a base bundle