Bundle (original): Difference between revisions

m
Memory address comments
(Add per-platform info and base resource info. Remove overview as the information is redundant with the main Bundle page.)
m (Memory address comments)
 
(3 intermediate revisions by 2 users not shown)
Line 8:
Separate data chunks are used to define what memory type resources are loaded into. These chunks are platform specific (see [[#Base resource types|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.
 
Keep these in mind when viewing the structures.
 
= 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 || Set at runtime
|-
| 0x54 || 0x4 || uint32_t || mHashTableOffset || Resource IDs offset || List of [[Resource ID|resource IDs]]
|-
| 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 ⟶ 41:
! 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 || Set at runtime
|-
| 0x48 || 0x4 || uint32_t || mHashTableOffset || Resource IDs offset || List of [[Resource ID|resource IDs]]
|-
| 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 ⟶ 66:
! 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 || Set at runtime
|-
| 0x3C || 0x4 || uint32_t || mHashTableOffset || Resource IDs offset || List of [[Resource ID|resource IDs]]
|-
| 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 ||
| 0x3C || 0x30 || [[#rw::BaseResourceDescriptor|BaseResourceDescriptor]][6] || mauDiskOffset || Offsets in bundle || Alignment is unused (always 1)
|-
| 0x64 || 0x4 || [[#rw::ResourceDescriptor|ResourceDescriptor]]* || mpUncompressedResourceDescriptors || Compression information offset ||
| 0x6C || 0x18 || uint32_t[6] || || Memory addresses || Swapped endian
|}
 
==== 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 || ||
|-
| 0x78 || 0x4 || int32_t || miGraphicsMemAlignment || ||
|}
 
==== Xbox 360 ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x68 || [[#CgsResource::BundleV4ExtendedData|BundleV4ExtendedData]] || || Base class ||
|-
| 0x68 || 0x4 || int32_t || miMainMemAlignment || ||
|-
| 0x6C || 0x4 || int32_t || miGraphicsMemAlignment || ||
|}
 
==== 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 || Set at runtime
|-
| 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 || Set at runtime
|}
 
Line 114 ⟶ 183:
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x4 || uint32_tvoid* || mpResource || Resource data memory address || Set at runtime
|-
| 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 || 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 || SwappedSet at endianruntime
|}
 
Line 131 ⟶ 200:
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x4 || uint32_tvoid* || mpResource || Resource data memory address || Set at runtime
|-
| 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 || SwappedSet at endianruntime
|}
 
=== 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 ⟶ 289:
|}
 
=== 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 ⟶ 323:
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x280x14 || [[#rw::BaseResourceDescriptorBaseResource|BaseResourceDescriptorBaseResource]][5] || mauUncompressedSizeAndAlignmentm_baseResources || UncompressedPer sizestype base resource pointers ||
|}
 
Line 199 ⟶ 330:
! 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
|}