Bundle (original): Difference between revisions
mNo edit summary |
mNo edit summary |
||
Line 166: | Line 166: | ||
! Offset !! Length !! Type !! Name !! Description !! Comments |
! Offset !! Length !! Type !! Name !! Description !! Comments |
||
|- |
|- |
||
| 0x0 || 0x4 || void* || mpResource || Resource data memory address || |
| 0x0 || 0x4 || void* || mpResource || Resource data memory address || Set at runtime |
||
|- |
|- |
||
| 0x4 || 0x4 || [[#CgsResource::Bundle::ImportTable|ImportTable]]* || mpImportTable || Bundle imports offset || |
| 0x4 || 0x4 || [[#CgsResource::Bundle::ImportTable|ImportTable]]* || mpImportTable || Bundle imports offset || |
||
Line 176: | Line 176: | ||
| 0x3C || 0x30 || [[#rw::ResourceDescriptor|ResourceDescriptor]][6] || mSerialisedOffsetResourceDescriptor || Offsets in bundle || Alignment is unused (always 1) |
| 0x3C || 0x30 || [[#rw::ResourceDescriptor|ResourceDescriptor]][6] || mSerialisedOffsetResourceDescriptor || Offsets in bundle || Alignment is unused (always 1) |
||
|- |
|- |
||
| 0x6C || 0x18 || [[#rw::Resource|Resource]][6] || mSerialisedResource || Memory addresses || |
| 0x6C || 0x18 || [[#rw::Resource|Resource]][6] || mSerialisedResource || Memory addresses || Set at runtime |
||
|} |
|} |
||
Line 183: | Line 183: | ||
! Offset !! Length !! Type !! Name !! Description !! Comments |
! Offset !! Length !! Type !! Name !! Description !! Comments |
||
|- |
|- |
||
| 0x0 || 0x4 || void* || mpResource || Resource data memory address || |
| 0x0 || 0x4 || void* || mpResource || Resource data memory address || Set at runtime |
||
|- |
|- |
||
| 0x4 || 0x4 || [[#CgsResource::Bundle::ImportTable|ImportTable]]* || mpImportTable || Bundle imports offset || |
| 0x4 || 0x4 || [[#CgsResource::Bundle::ImportTable|ImportTable]]* || mpImportTable || Bundle imports offset || |
||
Line 193: | Line 193: | ||
| 0x34 || 0x28 || [[#rw::ResourceDescriptor|ResourceDescriptor]][5] || mSerialisedOffsetResourceDescriptor || Offsets in bundle || Alignment is unused (always 1) |
| 0x34 || 0x28 || [[#rw::ResourceDescriptor|ResourceDescriptor]][5] || mSerialisedOffsetResourceDescriptor || Offsets in bundle || Alignment is unused (always 1) |
||
|- |
|- |
||
| 0x5C || 0x14 || [[#rw::Resource|Resource]][5] || mSerialisedResource || Memory addresses || |
| 0x5C || 0x14 || [[#rw::Resource|Resource]][5] || mSerialisedResource || Memory addresses || Set at runtime |
||
|} |
|} |
||
Line 200: | Line 200: | ||
! Offset !! Length !! Type !! Name !! Description !! Comments |
! Offset !! Length !! Type !! Name !! Description !! Comments |
||
|- |
|- |
||
| 0x0 || 0x4 || void* || mpResource || Resource data memory address || |
| 0x0 || 0x4 || void* || mpResource || Resource data memory address || Set at runtime |
||
|- |
|- |
||
| 0x4 || 0x4 || [[#CgsResource::Bundle::ImportTable|ImportTable]]* || mpImportTable || Bundle imports offset || |
| 0x4 || 0x4 || [[#CgsResource::Bundle::ImportTable|ImportTable]]* || mpImportTable || Bundle imports offset || |
||
Line 210: | Line 210: | ||
| 0x2C || 0x20 || [[#rw::ResourceDescriptor|ResourceDescriptor]][4] || mSerialisedOffsetResourceDescriptor || Offsets in bundle || Alignment is unused (always 1) |
| 0x2C || 0x20 || [[#rw::ResourceDescriptor|ResourceDescriptor]][4] || mSerialisedOffsetResourceDescriptor || Offsets in bundle || Alignment is unused (always 1) |
||
|- |
|- |
||
| 0x4C || 0x10 || [[#rw::Resource|Resource]][4] || mSerialisedResource || Memory addresses || |
| 0x4C || 0x10 || [[#rw::Resource|Resource]][4] || mSerialisedResource || Memory addresses || Set at runtime |
||
|} |
|} |
||
Revision as of 07:07, 13 April 2024
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 | |
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 | |
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 | |
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 |