Bundle (original)

Revision as of 07:37, 24 September 2023 by Burninrubber0 (talk | contribs) (Add per-platform info and base resource info. Remove overview as the information is redundant with the main Bundle page.)

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 Physical on Xbox 360. In resource documentation, these will be simplified to a "secondary" type. Resources only ever have primary and secondary portions.

Keep these in mind when viewing the structures.

Structures

The original Bundle format's versions were treated more like additions to the previous version. Thus, rather than a full structure for each, only their additions are described here.

CgsResource::BundleHeaderBase

Bundle

PlayStation 3

Offset Length Type Name Description Comments
0x0 0x4 char[4] macMagicNumber Bundle magic bndl
0x4 0x4 uint32_t muVersion Bundle version 3 in base, 4 in V4, 5 in V5
0x8 0x4 uint32_t muResourceEntriesCount Number of resources in the bundle
0xC 0x30 BaseResourceDescriptor[6] Size and alignment of each chunk
0x3C 0x18 uint32_t[6] Memory address of each chunk
0x54 0x4 uint32_t Resource IDs offset
0x58 0x4 uint32_t muResourceEntriesOffset Resource entries offset
0x5C 0x4 uint32_t Imports offset
0x60 0x4 uint32_t muResourceDataOffset 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 char[4] macMagicNumber Bundle magic bndl
0x4 0x4 uint32_t muVersion Bundle version 3 in base, 4 in V4, 5 in V5
0x8 0x4 uint32_t muResourceEntriesCount Number of resources in the bundle
0xC 0x28 BaseResourceDescriptor[5] Size and alignment of each chunk
0x34 0x14 uint32_t[5] Memory address of each chunk
0x48 0x4 uint32_t Resource IDs offset
0x4C 0x4 uint32_t muResourceEntriesOffset Resource entries offset
0x50 0x4 uint32_t Imports offset
0x54 0x4 uint32_t muResourceDataOffset 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 char[4] macMagicNumber Bundle magic bndl
0x4 0x4 uint32_t muVersion Bundle version 3 in base, 4 in V4, 5 in V5
0x8 0x4 uint32_t muResourceEntriesCount Number of resources in the bundle
0xC 0x20 BaseResourceDescriptor[4] Size and alignment of each chunk
0x2C 0x10 uint32_t[4] Memory address of each chunk
0x3C 0x4 uint32_t Resource IDs offset
0x40 0x4 uint32_t muResourceEntriesOffset Resource entries offset
0x44 0x4 uint32_t Imports offset
0x48 0x4 uint32_t muResourceDataOffset Resource data offset
0x4C 0x4 uint32_t muPlatform Platform the bundle was built for See Platform

ResourceEntry

PlayStation 3

Offset Length Type Name Description Comments
0x0 0x4 uint32_t Resource data memory address
0x4 0x4 uint32_t muImportOffset Bundle imports offset
0x8 0x4 uint32_t muResourceTypeId Resource type See ResourceType
0xC 0x30 BaseResourceDescriptor[6] mauSizeAndAlignmentOnDisk Resource sizes in bundle
Compressed size if compression used
0x3C 0x30 BaseResourceDescriptor[6] mauDiskOffset Offsets in bundle Alignment is unused (always 1)
0x6C 0x18 uint32_t[6] Memory addresses Swapped endian

Xbox 360

Offset Length Type Name Description Comments
0x0 0x4 uint32_t Resource data memory address
0x4 0x4 uint32_t muImportOffset Bundle imports offset
0x8 0x4 uint32_t muResourceTypeId Resource type See ResourceType
0xC 0x28 BaseResourceDescriptor[5] mauSizeAndAlignmentOnDisk Resource sizes in bundle
Compressed size if compression used
0x34 0x28 BaseResourceDescriptor[5] mauDiskOffset Offsets in bundle Alignment is unused (always 1)
0x5C 0x14 uint32_t[5] Memory addresses Swapped endian

PC

Offset Length Type Name Description Comments
0x0 0x4 uint32_t Resource data memory address
0x4 0x4 uint32_t muImportOffset Bundle imports offset
0x8 0x4 uint32_t muResourceTypeId Resource type See ResourceType
0xC 0x20 BaseResourceDescriptor[4] mauSizeAndAlignmentOnDisk Resource sizes in bundle
Compressed size if compression used
0x2C 0x20 BaseResourceDescriptor[4] mauDiskOffset Offsets in bundle Alignment is unused (always 1)
0x4C 0x10 uint32_t[4] Memory addresses Swapped endian

Imports

This is not a structure as such; rather, it is uint32_t muImportCount followed by four bytes of padding, then a set of import entries of an amount defined by the aforementioned count.

ImportEntry

Offset Length Type Name Description Comments
0x0 0x8 ID mResourceId Resource name CRC32
0x8 0x4 uint32_t muOffset
0xC 0x4 padding

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

CgsResource::BundleHeaderV4

Bundle (Additions)

Offset Length Type Name Description Comments
0x5C 0x4 uint32_t muFlags Bundle flags See Flags
0x60 0x4 uint32_t Number of compressed resources
0x64 0x4 uint32_t Compression information offset

Compression Information

PlayStation 3

Offset Length Type Name Description Comments
0x0 0x30 BaseResourceDescriptor[6] mauUncompressedSizeAndAlignment Uncompressed sizes

Xbox 360

Offset Length Type Name Description Comments
0x0 0x28 BaseResourceDescriptor[5] mauUncompressedSizeAndAlignment Uncompressed sizes

PC

Offset Length Type Name Description Comments
0x0 0x20 BaseResourceDescriptor[4] mauUncompressedSizeAndAlignment Uncompressed sizes

CgsResource::BundleHeaderV5

Bundle (Additions)

Offset Length Type Name Description Comments
0x68 0x4 uint32_t No idea what this does
0x6C 0x4 uint32_t Also no idea what this does

Enumerations

Platform

Name Value Comments
? 1 PC
? 2 Xbox 360
? 3 PlayStation 3

Flags

Name Value Comments
IsCompressed 0x1 Resources are zlib compressed

ResourceType

See Resource Types.

Base resource types

PlayStation 3

Name Index
main memory 0
disposable 1
uninitialized 2
disposable uninitialized 3
graphics system 4
graphics local 5

Xbox 360

Name Index
main memory 0
disposable 1
physical 2
uninitialized 3
disposable uninitialized 4

PC

Name Index
main memory 0
disposable 1
uninitialized 2
disposable uninitialized 3