Bundle (original): Difference between revisions
m (→Memory types) |
(Add per-platform info and base resource info. Remove overview as the information is redundant with the main Bundle page.) |
||
Line 4:
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 =
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.
Line 28 ⟶ 17:
== CgsResource::BundleHeaderBase ==
=== Bundle ===
==== PlayStation 3 ====
{| class="wikitable"
! 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 || [[#rw::BaseResourceDescriptor|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|Platform]]
|}
==== Xbox 360 ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
Line 38 ⟶ 52:
| 0x8 || 0x4 || uint32_t || muResourceEntriesCount || Number of resources in the bundle ||
|-
| 0xC || 0x28 || [[#
|-
| 0x34 || 0x14 || uint32_t[5] || || Memory address of each chunk ||
Line 51 ⟶ 65:
|-
| 0x58 || 0x4 || uint32_t || muPlatform || Platform the bundle was built for || See [[#Platform|Platform]]
|}
==== PC ====
{| class="wikitable"
! 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 || [[#rw::BaseResourceDescriptor|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|Platform]]
|}
=== ResourceEntry ===
==== PlayStation 3 ====
{| class="wikitable"
! 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|ResourceType]]
|-
| 0xC || 0x30 || [[#rw::BaseResourceDescriptor|BaseResourceDescriptor]][6] || mauSizeAndAlignmentOnDisk || Resource sizes in bundle<br />Compressed size if compression used ||
|-
| 0x3C || 0x30 || [[#rw::BaseResourceDescriptor|BaseResourceDescriptor]][6] || mauDiskOffset || Offsets in bundle || Alignment is unused (always 1)
|-
| 0x6C || 0x18 || uint32_t[6] || || Memory addresses || Swapped endian
|}
==== Xbox 360 ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
Line 64 ⟶ 120:
| 0x8 || 0x4 || uint32_t || muResourceTypeId || Resource type || See [[#ResourceType|ResourceType]]
|-
| 0xC || 0x28 || [[#
|-
| 0x34 || 0x28 || [[#
|-
| 0x5C || 0x14 || uint32_t[5] || || Memory addresses || Swapped endian
|}
==== PC ====
{| class="wikitable"
! 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|ResourceType]]
|-
| 0xC || 0x20 || [[#rw::BaseResourceDescriptor|BaseResourceDescriptor]][4] || mauSizeAndAlignmentOnDisk || Resource sizes in bundle<br />Compressed size if compression used ||
|-
| 0x2C || 0x20 || [[#rw::BaseResourceDescriptor|BaseResourceDescriptor]][4] || mauDiskOffset || Offsets in bundle || Alignment is unused (always 1)
|-
| 0x4C || 0x10 || uint32_t[4] || || Memory addresses || Swapped endian
|}
Line 76 ⟶ 149:
=== ImportEntry ===
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
Line 86 ⟶ 158:
|}
===
This structure contains fields for size and alignment, though alignment sometimes goes unused
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x4 || uint32_t || m_size || Size or offset ||
|-
| 0x4 || 0x4 || uint32_t || m_alignment || Alignment ||
|}
Line 100 ⟶ 171:
=== Bundle (Additions) ===
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
Line 111 ⟶ 181:
=== Compression Information ===
==== PlayStation 3 ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x30 || [[#rw::BaseResourceDescriptor|BaseResourceDescriptor]][6] || mauUncompressedSizeAndAlignment || Uncompressed sizes ||
|}
==== Xbox 360 ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x28 || [[#rw::BaseResourceDescriptor|BaseResourceDescriptor]][5] || mauUncompressedSizeAndAlignment || Uncompressed sizes ||
|}
==== PC ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 ||
|}
Line 121 ⟶ 205:
=== Bundle (Additions) ===
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
Line 132 ⟶ 215:
=== Platform ===
{| class="wikitable"
! Name !! Value !! Comments
|-
Line 144 ⟶ 226:
=== Flags ===
{| class="wikitable"
! Name !! Value !! Comments
|-
Line 152 ⟶ 233:
=== ResourceType ===
See [[Resource Types]].
= Base resource types =
==== PlayStation 3 ====
{| class="wikitable"
! Name !! Index
|-
| main memory || 0
|-
| disposable || 1
|-
| uninitialized || 2
|-
| disposable uninitialized || 3
|-
| graphics system || 4
|-
| graphics local || 5
|}
==== Xbox 360 ====
{| class="wikitable"
! Name !! Index
|-
| main memory || 0
|-
| disposable || 1
|-
| physical || 2
|-
| uninitialized || 3
|-
| disposable uninitialized || 4
|}
==== PC ====
{| class="wikitable"
! Name !! Index
|-
| main memory || 0
|-
| disposable || 1
|-
| uninitialized || 2
|-
| disposable uninitialized || 3
|}
|
Revision as of 07:37, 24 September 2023
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 |