Bundle (original): Difference between revisions

Updated with new information.
(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
|}