Bundle (original)

From Burnout Wiki

The Bundle container is the core file format used in development builds of Burnout 5/Paradise, Black (Xbox 360), and Black 2 (Xbox 360). It is not used in any retail titles. Each Bundle holds one or more resources (assets) and contains information about each resource, such as its size, type, compression, alignment, and so on.

The Bundle format underwent at least five iterations during its use from early 2006 to early-mid 2007. At present, only files using Bundle version 3, 4, and 5 have been discovered. It was succeeded by the Bundle 2 container.

Memory types

Separate data chunks are used to define what memory type resources are loaded into. These chunks are platform specific (see base resource types). Keep these in mind when viewing the structures.

Resources always have data in Main Memory. If the resource is split, headers are loaded into Main Memory, while the other portion is typically loaded into into Graphics Local on PS3 and Physical on Xbox 360. In resource documentation, these will be simplified to a "secondary" type. Resources only ever have primary and secondary portions. On PS3, some resources' secondary portion may be loaded into Graphics System; in that case, it will be listed separately.

Structures

CgsResource::Bundle

PlayStation 3

Offset Length Type Name Description Comments
0x0 0x4 uint32_t muMagicNumber Bundle magic bndl
0x4 0x4 uint32_t muVersion Bundle version 3 in base, 4 in V4, 5 in V5
0x8 0x4 uint32_t muNumResources Number of resources in the bundle
0xC 0x30 ResourceDescriptor[6] mBundleResourceDescriptor Size and alignment of each chunk
0x3C 0x18 Resource[6] mAllocatedResource Memory address of each chunk Set at runtime
0x54 0x4 uint32_t mHashTableOffset Resource IDs offset List of resource IDs
0x58 0x4 uint32_t mResourceEntriesOffset Resource entries offset See ResourceEntry
0x5C 0x4 uint32_t mImportTablesOffset Imports offset See ImportTable
0x60 0x4 uint32_t mResourceDataOffset Resource data offset
0x64 0x4 uint32_t muPlatform Platform the bundle was built for See Platform

Xbox 360

Offset Length Type Name Description Comments
0x0 0x4 uint32_t muMagicNumber Bundle magic bndl
0x4 0x4 uint32_t muVersion Bundle version 3 in base, 4 in V4, 5 in V5
0x8 0x4 uint32_t muNumResources Number of resources in the bundle
0xC 0x28 ResourceDescriptor[5] mBundleResourceDescriptor Size and alignment of each chunk
0x34 0x14 Resource[5] mAllocatedResource Memory address of each chunk Set at runtime
0x48 0x4 uint32_t mHashTableOffset Resource IDs offset List of resource IDs
0x4C 0x4 uint32_t mResourceEntriesOffset Resource entries offset See ResourceEntry
0x50 0x4 uint32_t mImportTablesOffset Imports offset See ImportTable
0x54 0x4 uint32_t mResourceDataOffset Resource data offset
0x58 0x4 uint32_t muPlatform Platform the bundle was built for See Platform

PC

Offset Length Type Name Description Comments
0x0 0x4 uint32_t muMagicNumber Bundle magic bndl
0x4 0x4 uint32_t muVersion Bundle version 3 in base, 4 in V4, 5 in V5
0x8 0x4 uint32_t muNumResources Number of resources in the bundle
0xC 0x20 ResourceDescriptor[4] mBundleResourceDescriptor Size and alignment of each chunk
0x2C 0x10 Resource[4] mAllocatedResource Memory address of each chunk Set at runtime
0x3C 0x4 uint32_t mHashTableOffset Resource IDs offset List of resource IDs
0x40 0x4 uint32_t mResourceEntriesOffset Resource entries offset See ResourceEntry
0x44 0x4 uint32_t mImportTablesOffset Imports offset See ImportTable
0x48 0x4 uint32_t mResourceDataOffset Resource data offset
0x4C 0x4 uint32_t muPlatform Platform the bundle was built for See Platform

CgsResource::BundleV4ExtendedData

PlayStation 3

Offset Length Type Name Description Comments
0x0 0x68 CgsResource::BaseBundleExtendedData Base class See Bundle
0x68 0x4 uint32_t muFlags Bundle flags See Flags
0x6C 0x4 uint32_t muUncompressedDescriptorCount Number of compressed resources
0x70 0x4 ResourceDescriptor* mpUncompressedResourceDescriptors Compression information offset

Xbox 360

Offset Length Type Name Description Comments
0x0 0x5C CgsResource::BaseBundleExtendedData Base class See Bundle
0x5C 0x4 uint32_t muFlags Bundle flags See Flags
0x60 0x4 uint32_t muUncompressedDescriptorCount Number of compressed resources
0x64 0x4 ResourceDescriptor* mpUncompressedResourceDescriptors Compression information offset

PC

Offset Length Type Name Description Comments
0x0 0x50 CgsResource::BaseBundleExtendedData Base class See Bundle
0x50 0x4 uint32_t muFlags Bundle flags See Flags
0x5C 0x4 uint32_t muUncompressedDescriptorCount Number of compressed resources
0x60 0x4 ResourceDescriptor* mpUncompressedResourceDescriptors Compression information offset

CgsResource::BundleV5ExtendedData

PlayStation 3

Offset Length Type Name Description Comments
0x0 0x74 BundleV4ExtendedData Base class
0x74 0x4 int32_t miMainMemAlignment
0x78 0x4 int32_t miGraphicsMemAlignment

Xbox 360

Offset Length Type Name Description Comments
0x0 0x68 BundleV4ExtendedData Base class
0x68 0x4 int32_t miMainMemAlignment
0x6C 0x4 int32_t miGraphicsMemAlignment

PC

Offset Length Type Name Description Comments
0x0 0x5C BundleV4ExtendedData Base class
0x5C 0x4 int32_t miMainMemAlignment
0x60 0x4 int32_t miGraphicsMemAlignment

CgsResource::Bundle::ResourceEntry

PlayStation 3

Offset Length Type Name Description Comments
0x0 0x4 void* mpResource Resource data memory address Set at runtime
0x4 0x4 ImportTable* mpImportTable Bundle imports offset
0x8 0x4 CgsResource::Type* mpType Resource type Type ID replaced by pointer at runtime. See Resource Types
0xC 0x30 ResourceDescriptor[6] mSerialisedResourceDescriptor Resource sizes in bundle
Compressed size if compression used
0x3C 0x30 ResourceDescriptor[6] mSerialisedOffsetResourceDescriptor Offsets in bundle Alignment is unused (always 1)
0x6C 0x18 Resource[6] mSerialisedResource Memory addresses Set at runtime

Xbox 360

Offset Length Type Name Description Comments
0x0 0x4 void* mpResource Resource data memory address Set at runtime
0x4 0x4 ImportTable* mpImportTable Bundle imports offset
0x8 0x4 CgsResource::Type* mpType Resource type Type ID replaced by pointer at runtime. See Resource Types
0xC 0x28 ResourceDescriptor[5] mSerialisedResourceDescriptor Resource sizes in bundle
Compressed size if compression used
0x34 0x28 ResourceDescriptor[5] mSerialisedOffsetResourceDescriptor Offsets in bundle Alignment is unused (always 1)
0x5C 0x14 Resource[5] mSerialisedResource Memory addresses Set at runtime

PC

Offset Length Type Name Description Comments
0x0 0x4 void* mpResource Resource data memory address Set at runtime
0x4 0x4 ImportTable* mpImportTable Bundle imports offset
0x8 0x4 CgsResource::Type* mpType Resource type Type ID replaced by pointer at runtime. See Resource Types
0xC 0x20 ResourceDescriptor[4] mSerialisedResourceDescriptor Resource sizes in bundle
Compressed size if compression used
0x2C 0x20 ResourceDescriptor[4] mSerialisedOffsetResourceDescriptor Offsets in bundle Alignment is unused (always 1)
0x4C 0x10 Resource[4] mSerialisedResource Memory addresses Set at runtime

CgsResource::Bundle::ImportTable

This structure is followed by an ImportEntry array.

Offset Length Type Name Description Comments
0x0 0x4 uint32_t muNumImports Number of import entries
0x8 0x4 uint32_t pad1 Padding

CgsResource::Bundle::ImportEntry

Offset Length Type Name Description Comments
0x0 0x8 ID mImportID Resource name CRC32
0x8 0x4 RwUInt32 muOffset
0xC 0x4 Padding

rw::ResourceDescriptor

PlayStation 3

Offset Length Type Name Description Comments
0x0 0x30 BaseResourceDescriptors Base class

Xbox 360

Offset Length Type Name Description Comments
0x0 0x28 BaseResourceDescriptors Base class

PC

Offset Length Type Name Description Comments
0x0 0x20 BaseResourceDescriptors Base class

rw::BaseResourceDescriptors

PlayStation 3

Offset Length Type Name Description Comments
0x0 0x30 BaseResourceDescriptor[6] m_baseResourceDescriptors

Xbox 360

Offset Length Type Name Description Comments
0x0 0x28 BaseResourceDescriptor[5] m_baseResourceDescriptors

PC

Offset Length Type Name Description Comments
0x0 0x20 BaseResourceDescriptor[4] m_baseResourceDescriptors

rw::BaseResourceDescriptor

This structure contains fields for size and alignment, though alignment sometimes goes unused.

Offset Length Type Name Description Comments
0x0 0x4 uint32_t m_size Size or offset
0x4 0x4 uint32_t m_alignment Alignment

rw::Resource

PlayStation 3

Offset Length Type Name Description Comments
0x0 0x18 BaseResources Base class

Xbox 360

Offset Length Type Name Description Comments
0x0 0x14 BaseResources Base class

PC

Offset Length Type Name Description Comments
0x0 0x10 BaseResources Base class

rw::BaseResources

PlayStation 3

Offset Length Type Name Description Comments
0x0 0x18 BaseResource[6] m_baseResources Per type base resource pointers

Xbox 360

Offset Length Type Name Description Comments
0x0 0x14 BaseResource[5] m_baseResources Per type base resource pointers

PC

Offset Length Type Name Description Comments
0x0 0x10 BaseResource[4] m_baseResources Per type base resource pointers

Typedefs

rw::BaseResource

Name Type Length Comments
BaseResource void* 0x4

Enumerations

Platform

Three constants used by the platform field.

Name Value Comments
KU_BUNDLE_DX9 1 PC
KU_BUNDLE_X360 2 Xbox 360
KU_BUNDLE_PS3 3 PlayStation 3

CgsResource::EFlags

Name Value Comments
E_BUNDLEFLAG_HAS_DEBUG_DATA 0x0 Has a BundleImports resource.
This flag does not work correctly.
E_BUNDLEFLAG_COMPRESSED 0x1 Resources are zlib compressed

Base resource types

Anonymous enumeration with name strings.

PlayStation 3

Name String Index
BASERESOURCE_MAINMEMORY main memory 0
BASERESOURCE_DISPOSABLE disposable 1
BASERESOURCE_UNINITIALIZED uninitialized 2
BASERESOURCE_DISPOSABLE_UNINITIALIZED disposable uninitialized 3
BASERESOURCE_GRAPHICS_SYSTEM graphics system 4
BASERESOURCE_GRAPHICS_LOCAL graphics local 5
BASERESOURCE_NUMBEROFBASERESOURCETYPES 6

Xbox 360

Name String Index
BASERESOURCE_MAINMEMORY main memory 0
BASERESOURCE_DISPOSABLE disposable 1
BASERESOURCE_PHYSICAL? physical 2
BASERESOURCE_UNINITIALIZED uninitialized 3
BASERESOURCE_DISPOSABLE_UNINITIALIZED disposable uninitialized 4
BASERESOURCE_NUMBEROFBASERESOURCETYPES 5

PC

Name String Index
BASERESOURCE_MAINMEMORY main memory 0
BASERESOURCE_DISPOSABLE disposable 1
BASERESOURCE_UNINITIALIZED uninitialized 2
BASERESOURCE_DISPOSABLE_UNINITIALIZED disposable uninitialized 3
BASERESOURCE_NUMBEROFBASERESOURCETYPES 4