Bundle (original): Difference between revisions

From Burnout Wiki
Content added Content deleted
(Add per-platform info and base resource info. Remove overview as the information is redundant with the main Bundle page.)
(Updated with new information.)
Line 13:
 
= Structures =
=== CgsResource::Bundle ===
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 ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x4 || char[4]uint32_t || macMagicNumbermuMagicNumber || Bundle magic || bndl
|-
| 0x4 || 0x4 || uint32_t || muVersion || Bundle version || 3 in base, 4 in V4, 5 in V5
|-
| 0x8 || 0x4 || uint32_t || muResourceEntriesCountmuNumResources || Number of resources in the bundle ||
|-
| 0xC || 0x30 || [[#rw::BaseResourceDescriptorResourceDescriptor|BaseResourceDescriptorResourceDescriptor]][6] || mBundleResourceDescriptor || Size and alignment of each chunk ||
|-
| 0x3C || 0x18 || uint32_t[[#rw::Resource|Resource]][6] || mAllocatedResource || Memory address of each chunk ||
|-
| 0x54 || 0x4 || uint32_t || mHashTableOffset || Resource IDs offset ||
|-
| 0x58 || 0x4 || uint32_t || muResourceEntriesOffsetmResourceEntriesOffset || Resource entries offset || See [[#CgsResource::Bundle::ResourceEntry|ResourceEntry]]
|-
| 0x5C || 0x4 || uint32_t || mImportTablesOffset || Imports offset || See [[#CgsResource::Bundle::ImportTable|ImportTable]]
|-
| 0x60 || 0x4 || uint32_t || muResourceDataOffsetmResourceDataOffset || Resource data offset ||
|-
| 0x64 || 0x4 || uint32_t || muPlatform || Platform the bundle was built for || See [[#Platform|Platform]]
Line 46 ⟶ 43:
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x4 || char[4]uint32_t || macMagicNumbermuMagicNumber || Bundle magic || bndl
|-
| 0x4 || 0x4 || uint32_t || muVersion || Bundle version || 3 in base, 4 in V4, 5 in V5
|-
| 0x8 || 0x4 || uint32_t || muResourceEntriesCountmuNumResources || Number of resources in the bundle ||
|-
| 0xC || 0x28 || [[#rw::BaseResourceDescriptorResourceDescriptor|BaseResourceDescriptorResourceDescriptor]][5] || mBundleResourceDescriptor || Size and alignment of each chunk ||
|-
| 0x34 || 0x14 || uint32_t[[#rw::Resource|Resource]][5] || mAllocatedResource || Memory address of each chunk ||
|-
| 0x48 || 0x4 || uint32_t || mHashTableOffset || Resource IDs offset ||
|-
| 0x4C || 0x4 || uint32_t || muResourceEntriesOffsetmResourceEntriesOffset || Resource entries offset || See [[#CgsResource::Bundle::ResourceEntry|ResourceEntry]]
|-
| 0x50 || 0x4 || uint32_t || mImportTablesOffset || Imports offset || See [[#CgsResource::Bundle::ImportTable|ImportTable]]
|-
| 0x54 || 0x4 || uint32_t || muResourceDataOffsetmResourceDataOffset || Resource data offset ||
|-
| 0x58 || 0x4 || uint32_t || muPlatform || Platform the bundle was built for || See [[#Platform|Platform]]
Line 71 ⟶ 68:
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x4 || char[4]uint32_t || macMagicNumbermuMagicNumber || Bundle magic || bndl
|-
| 0x4 || 0x4 || uint32_t || muVersion || Bundle version || 3 in base, 4 in V4, 5 in V5
|-
| 0x8 || 0x4 || uint32_t || muResourceEntriesCountmuNumResources || Number of resources in the bundle ||
|-
| 0xC || 0x20 || [[#rw::BaseResourceDescriptorResourceDescriptor|BaseResourceDescriptorResourceDescriptor]][4] || mBundleResourceDescriptor || Size and alignment of each chunk ||
|-
| 0x2C || 0x10 || uint32_t[[#rw::Resource|Resource]][4] || mAllocatedResource || Memory address of each chunk ||
|-
| 0x3C || 0x4 || uint32_t || mHashTableOffset || Resource IDs offset ||
|-
| 0x40 || 0x4 || uint32_t || muResourceEntriesOffsetmResourceEntriesOffset || Resource entries offset || See [[#CgsResource::Bundle::ResourceEntry|ResourceEntry]]
|-
| 0x44 || 0x4 || uint32_t || mImportTablesOffset || Imports offset || See [[#CgsResource::Bundle::ImportTable|ImportTable]]
|-
| 0x48 || 0x4 || uint32_t || muResourceDataOffsetmResourceDataOffset || Resource data offset ||
|-
| 0x4C || 0x4 || uint32_t || muPlatform || Platform the bundle was built for || See [[#Platform|Platform]]
|}
 
=== CgsResource::BundleV4ExtendedData ===
=== ResourceEntry ===
==== PlayStation 3 ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x68 || CgsResource::BaseBundleExtendedData || Base class || || See [[#CgsResource::Bundle|Bundle]]
| 0x0 || 0x4 || uint32_t || || Resource data memory address ||
|-
| 0x40x68 || 0x4 || uint32_t || muImportOffsetmuFlags || Bundle imports offsetflags || See [[#CgsResource::EFlags|Flags]]
|-
| 0x80x6C || 0x4 || uint32_t || muResourceTypeIdmuUncompressedDescriptorCount || ResourceNumber typeof ||compressed Seeresources [[#ResourceType|ResourceType]]|
|-
| 0x70 || 0x4 || [[#rw::ResourceDescriptor|ResourceDescriptor]]* || mpUncompressedResourceDescriptors || Compression information offset ||
| 0xC || 0x30 || [[#rw::BaseResourceDescriptor|BaseResourceDescriptor]][6] || mauSizeAndAlignmentOnDisk || Resource sizes in bundle<br />Compressed size if compression used ||
|}
 
==== Xbox 360 ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x5C || CgsResource::BaseBundleExtendedData || Base class || || See [[#CgsResource::Bundle|Bundle]]
|-
| 0x5C || 0x4 || uint32_t || muFlags || Bundle flags || See [[#CgsResource::EFlags|Flags]]
|-
| 0x60 || 0x4 || uint32_t || muUncompressedDescriptorCount || Number of compressed resources ||
|-
| 0x64 || 0x4 || [[#rw::ResourceDescriptor|ResourceDescriptor]]* || mpUncompressedResourceDescriptors || Compression information offset ||
|}
 
==== PC ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x50 || CgsResource::BaseBundleExtendedData || Base class || || See [[#CgsResource::Bundle|Bundle]]
|-
| 0x50 || 0x4 || uint32_t || muFlags || Bundle flags || See [[#CgsResource::EFlags|Flags]]
|-
| 0x5C || 0x4 || uint32_t || muUncompressedDescriptorCount || Number of compressed resources ||
|-
| 0x60 || 0x4 || [[#rw::ResourceDescriptor|ResourceDescriptor]]* || mpUncompressedResourceDescriptors || Compression information offset ||
|}
 
=== CgsResource::BundleV5ExtendedData ===
==== PlayStation 3 ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x74 || [[#CgsResource::BundleV4ExtendedData|BundleV4ExtendedData]] || || Base class ||
|-
| 0x74 || 0x4 || int32_t || miMainMemAlignment || ||
| 0x3C || 0x30 || [[#rw::BaseResourceDescriptor|BaseResourceDescriptor]][6] || mauDiskOffset || Offsets in bundle || Alignment is unused (always 1)
|-
| 0x6C0x78 || 0x180x4 || uint32_t[6]int32_t || miGraphicsMemAlignment || Memory addresses || Swapped endian
|}
 
Line 114 ⟶ 145:
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x40x68 || uint32_t[[#CgsResource::BundleV4ExtendedData|BundleV4ExtendedData]] || || Resource data memoryBase addressclass ||
|-
| 0x40x68 || 0x4 || uint32_tint32_t || muImportOffsetmiMainMemAlignment || Bundle imports offset ||
|-
| 0x80x6C || 0x4 || uint32_tint32_t || muResourceTypeIdmiGraphicsMemAlignment || Resource type || See [[#ResourceType|ResourceType]]
|}
 
==== PC ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x5C || [[#CgsResource::BundleV4ExtendedData|BundleV4ExtendedData]] || || Base class ||
|-
| 0x5C || 0x4 || int32_t || miMainMemAlignment || ||
|-
| 0x60 || 0x4 || int32_t || miGraphicsMemAlignment || ||
|}
 
=== CgsResource::Bundle::ResourceEntry ===
==== PlayStation 3 ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x4 || void* || mpResource || Resource data memory address ||
|-
| 0x4 || 0x4 || [[#CgsResource::Bundle::ImportTable|ImportTable]]* || mpImportTable || Bundle imports offset ||
|-
| 0x8 || 0x4 || CgsResource::Type* || mpType || Resource type || Type ID replaced by pointer at runtime. See [[Resource Types]]
|-
| 0xC || 0x30 || [[#rw::ResourceDescriptor|ResourceDescriptor]][6] || mSerialisedResourceDescriptor || Resource sizes in bundle<br />Compressed size if compression used ||
|-
| 0x3C || 0x30 || [[#rw::ResourceDescriptor|ResourceDescriptor]][6] || mSerialisedOffsetResourceDescriptor || Offsets in bundle || Alignment is unused (always 1)
|-
| 0x6C || 0x18 || [[#rw::Resource|Resource]][6] || mSerialisedResource || Memory addresses || Swapped endian
|}
 
==== Xbox 360 ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x4 || void* || mpResource || Resource data memory address ||
|-
| 0x4 || 0x4 || [[#CgsResource::Bundle::ImportTable|ImportTable]]* || mpImportTable || Bundle imports offset ||
|-
| 0x8 || 0x4 || CgsResource::Type* || mpType || Resource type || Type ID replaced by pointer at runtime. See [[Resource Types]]
|-
| 0xC || 0x28 || [[#rw::BaseResourceDescriptorResourceDescriptor|BaseResourceDescriptorResourceDescriptor]][5] || mauSizeAndAlignmentOnDiskmSerialisedResourceDescriptor || Resource sizes in bundle<br />Compressed size if compression used ||
|-
| 0x34 || 0x28 || [[#rw::BaseResourceDescriptorResourceDescriptor|BaseResourceDescriptorResourceDescriptor]][5] || mauDiskOffsetmSerialisedOffsetResourceDescriptor || Offsets in bundle || Alignment is unused (always 1)
|-
| 0x5C || 0x14 || uint32_t[[#rw::Resource|Resource]][5] || mSerialisedResource || Memory addresses || Swapped endian
|}
 
Line 131 ⟶ 202:
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x4 || uint32_tvoid* || mpResource || Resource data memory address ||
|-
| 0x4 || 0x4 || uint32_t[[#CgsResource::Bundle::ImportTable|ImportTable]]* || muImportOffsetmpImportTable || Bundle imports offset ||
|-
| 0x8 || 0x4 || uint32_tCgsResource::Type* || muResourceTypeIdmpType || Resource type || Type ID replaced by pointer at runtime. See [[#ResourceType|ResourceTypeResource Types]]
|-
| 0xC || 0x20 || [[#rw::BaseResourceDescriptorResourceDescriptor|BaseResourceDescriptorResourceDescriptor]][4] || mauSizeAndAlignmentOnDiskmSerialisedResourceDescriptor || Resource sizes in bundle<br />Compressed size if compression used ||
|-
| 0x2C || 0x20 || [[#rw::BaseResourceDescriptorResourceDescriptor|BaseResourceDescriptorResourceDescriptor]][4] || mauDiskOffsetmSerialisedOffsetResourceDescriptor || Offsets in bundle || Alignment is unused (always 1)
|-
| 0x4C || 0x10 || uint32_t[[#rw::Resource|Resource]][4] || mSerialisedResource || Memory addresses || Swapped endian
|}
 
=== CgsResource::Bundle::ImportTable ===
=== Imports ===
This structure is followed by an [[#CgsResource::Bundle::ImportEntry|ImportEntry]] array.
This is not a structure as such; rather, it is <code>uint32_t muImportCount</code> followed by four bytes of padding, then a set of import entries of an amount defined by the aforementioned count.
 
=== ImportEntry ===
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x80x4 || [[Resource ID|ID]]uint32_t || mResourceIdmuNumImports || ResourceNumber of nameimport CRC32entries ||
|-
| 0x8 || 0x4 || uint32_t || muOffsetpad1 || Padding ||
|}
 
=== CgsResource::Bundle::ImportEntry ===
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x8 || [[Resource ID|ID]] || mImportID || Resource name CRC32 ||
|-
| 0x8 || 0x4 || RwUInt32 || muOffset || ||
|-
| 0xC || 0x4 || || || paddingPadding ||
|}
 
=== rw::ResourceDescriptor ===
==== PlayStation 3 ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x30 || [[#rw::BaseResourceDescriptors|BaseResourceDescriptors]] || || Base class ||
|}
 
==== Xbox 360 ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x28 || [[#rw::BaseResourceDescriptors|BaseResourceDescriptors]] || || Base class ||
|}
 
==== PC ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x20 || [[#rw::BaseResourceDescriptors|BaseResourceDescriptors]] || || Base class ||
|}
 
=== rw::BaseResourceDescriptors ===
==== PlayStation 3 ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x30 || [[#rw::BaseResourceDescriptor|BaseResourceDescriptor]][6] || m_baseResourceDescriptors || ||
|}
 
==== Xbox 360 ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x28 || [[#rw::BaseResourceDescriptor|BaseResourceDescriptor]][5] || m_baseResourceDescriptors || ||
|}
 
==== PC ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x20 || [[#rw::BaseResourceDescriptor|BaseResourceDescriptor]][4] || m_baseResourceDescriptors || ||
|}
 
Line 168 ⟶ 291:
|}
 
=== CgsResourcerw::BundleHeaderV4Resource ===
==== BundlePlayStation (Additions)3 ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x5C0x0 || 0x40x18 || uint32_t[[#rw::BaseResources|BaseResources]] || muFlags || BundleBase flagsclass || See [[#Flags|Flags]]
|}
 
==== Xbox 360 ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x600x0 || 0x40x14 || uint32_t[[#rw::BaseResources|BaseResources]] || || Number of compressedBase resourcesclass ||
|}
 
==== PC ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x640x0 || 0x40x10 || uint32_t[[#rw::BaseResources|BaseResources]] || || Compression informationBase offsetclass ||
|}
 
=== Compression Informationrw::BaseResources ===
==== PlayStation 3 ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x300x18 || [[#rw::BaseResourceDescriptorBaseResource|BaseResourceDescriptorBaseResource]][6] || mauUncompressedSizeAndAlignmentm_baseResources || UncompressedPer sizestype base resource pointers ||
|}
 
Line 192 ⟶ 325:
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x280x14 || [[#rw::BaseResourceDescriptorBaseResource|BaseResourceDescriptorBaseResource]][5] || mauUncompressedSizeAndAlignmentm_baseResources || UncompressedPer sizestype base resource pointers ||
|}
 
Line 199 ⟶ 332:
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x200x10 || [[#rw::BaseResourceDescriptorBaseResource|BaseResourceDescriptorBaseResource]][4] || mauUncompressedSizeAndAlignmentm_baseResources || UncompressedPer sizestype base resource pointers ||
|}
 
= Typedefs =
== CgsResource::BundleHeaderV5 ==
=== Bundle (Additions)rw::BaseResource ===
{| class="wikitable"
! Offset !! LengthName !! Type !! Name !! DescriptionLength !! Comments
|-
| 0x68 || 0x4 || uint32_t || || || No idea what this does
|-
| BaseResource || void* || 0x4 ||
| 0x6C || 0x4 || uint32_t || || || Also no idea what this does
|}
 
= Enumerations =
=== Platform ===
Three constants used by the platform field.
 
{| class="wikitable"
! Name !! Value !! Comments
|-
| ?KU_BUNDLE_DX9 || 1 || PC
|-
| ?KU_BUNDLE_X360 || 2 || Xbox 360
|-
| ?KU_BUNDLE_PS3 || 3 || PlayStation 3
|}
 
=== FlagsCgsResource::EFlags ===
{| class="wikitable"
! Name !! Value !! Comments
|-
| E_BUNDLEFLAG_HAS_DEBUG_DATA || 0x0 || Has a BundleImports resource.<br>This flag does not work correctly.
| IsCompressed || 0x1 || Resources are zlib compressed
|-
| E_BUNDLEFLAG_COMPRESSED || 0x1 || Resources are zlib compressed
|}
 
=== ResourceType ===
See [[Resource Types]].
 
= Base resource types =
Anonymous enumeration with name strings.
 
==== PlayStation 3 ====
{| class="wikitable"
! 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 ====
{| class="wikitable"
! 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 ====
{| class="wikitable"
! Name !! String !! Index
|-
| BASERESOURCE_MAINMEMORY || main memory || 0
|-
| BASERESOURCE_DISPOSABLE || disposable || 1
| main memory || 0
|-
| BASERESOURCE_UNINITIALIZED || uninitialized || 2
| disposable || 1
|-
| BASERESOURCE_DISPOSABLE_UNINITIALIZED || disposable uninitialized || 23
|-
| BASERESOURCE_NUMBEROFBASERESOURCETYPES || || 4
| disposable uninitialized || 3
|}

Revision as of 08:35, 15 March 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 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

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
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
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
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
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 Swapped endian

Xbox 360

Offset Length Type Name Description Comments
0x0 0x4 void* mpResource Resource data memory address
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 Swapped endian

PC

Offset Length Type Name Description Comments
0x0 0x4 void* mpResource Resource data memory address
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 Swapped endian

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