Bundle 2/Burnout Paradise: Difference between revisions

m
no edit summary
mNo edit summary
mNo edit summary
 
(One intermediate revision by the same user not shown)
Line 5:
Bundle debug data is also important to understand. Sometimes called Bundle imports, this was originally only available in development builds but shipped with every Bundle in the game in ''Remastered''. Consisting of XML data headed by the <code>ResourceStringTable</code> element, it contains the ID, name, and type name of every resource in a respective bundle. This means that effectively every resource name in the game is known. Despite this, the resource names given by the debug data sometimes do not match the hash when encoded. In some cases, such as with Registry resources, this means the name is hardcoded.
 
== Memory types ==
Separate data chunks are used to define what memory type resources are loaded into. These chunks are platform specific (see [[#CgsResource::ESmallResourceMemType|ESmallResourceMemType]]). 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 Graphics Local on PS3, Physical on X360, and Disposable on PC and all Remastered variants. '''In resource documentation, these will be simplified to a "secondary" type.''' On PS3, some resources' secondary portion may be loaded into Graphics System; in that case, it will be listed separately.
 
Note that resources only ever have primary and secondary portions, never a tertiary one. Even in instancesbundles where all three memory types are used, such as <code>SHADERS.BUNDLE</code> on PS3, resources only have two portions.
 
== Structures ==
=== CgsResource::BundleV2 ===
{| class="wikitable"
Line 21:
| 0x4 || 0x4 || uint32_t || muVersion || Bundle version || 2
|-
| 0x8 || 0x4 || uint32_t || muPlatform || Platform the bundle was built for || See [[#Platform|Platformplatform]]
|-
| 0xC || 0x4 || uint32_t || muDebugDataOffset || Bundle debug data offset || ResourceStringTable XML
Line 29:
| 0x14 || 0x4 || uint32_t || muResourceEntriesOffset || Resource entries offset ||
|-
| 0x18 || 0xC || uint32_t[3] || mauResourceDataOffset || ResourcePer-memory type resource data offsetoffsets ||
|-
| 0x24 || 0x4 || uint32_t || muFlags || Bundle flags || See [[#Flags|Flagsflags]]
|}
 
=== CgsResource::BundleV2::ResourceEntry ===
Entries are sorted sequentially by resource ID.
 
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
Line 42 ⟶ 44:
| 0x8 || 0x8 || uint64_t || muImportHash || Dependency name(s) CRC32(s) || Multiple are combined with a bitwise OR
|-
| 0x10 || 0xC || uint32_t[3] || mauUncompressedSizeAndAlignment || ResourcePer-memory sizestype (uncompressed)resource for each chunksizes || Has high nibble for alignment; changes between platforms<br>1 << [nibble] equals the memory alignment value
|-
| 0x1C || 0xC || uint32_t[3] || mauSizeAndAlignmentOnDisk || ResourcePer-memory sizestype (compressed) forresource each chunksizes || Has high nibble for alignment; changes between platforms<br>1 << [nibble] equals the memory alignment value
|-
| 0x28 || 0xC || uint32_t[3] || mauDiskOffset || ResourcePer-memory offsetstype forresource each chunkoffsets || Relative to the start of the respective chunkmemory type's data offset
|-
| 0x34 || 0x4 || uint32_t || muImportOffset || Bundle importsImports offset ||
|-
| 0x38 || 0x4 || uint32_t || muResourceTypeId || Resource type || See [[#ResourceType|ResourceTypeResource Types]]
|-
| 0x3C || 0x2 || uint16_t || muImportCount || Number of imports ||
|-
| 0x3E || 0x1 || uint8_t || muFlags || Resource flags || Unused?
|-
| 0x3F || 0x1 || uint8_t || muStreamIndex || || Unused
|}
 
Line 64 ⟶ 66:
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x8 || [[Resource ID|ID]] || mResourceId || ResourceImported nameresource CRC32ID ||
|-
| 0x8 || 0x4 || uint32_t || muOffset || Offset of the pointer to be set at runtime ||
|-
| 0xC || 0x4 || || || paddingPadding ||
|}
 
== Enumerations ==
=== Platform ===
Three constants used by the platform field.
 
{| class="wikitable"
! Name !! Value !! Comments
|-
| KU_BUNDLE_DX9? || 1 || PC. Reused for all platforms in Remastered
|-
| ?KU_BUNDLE_X360 || 2 || Xbox 360
|-
| ?KU_BUNDLE_PS3 || 3 || PlayStation 3
|}
 
Line 87 ⟶ 91:
! Name !! Value !! Comments
|-
| IsCompressedE_BUNDLEFLAG_COMPRESSED? || 0x1 || Resources are zlib compressed
|-
| ? || 0x2 || Is main mem optimised. Always set same as is graphics mem optimised
| IsMainMemOptimised || 0x2 || Possibly IsGraphicsMemOptimised - always used together
|-
| ? || 0x4 || Is graphics mem optimised. Always set same as is main mem optimised
| IsGraphicsMemOptimised || 0x4 || Possibly IsMainMemOptimised - always used together
|-
| ContainsDebugDataE_BUNDLEFLAG_HAS_DEBUG_DATA? || 0x8 || Contains ResourceStringTable/Bundle Imports XML data
|}
 
=== ResourceType ===
See [[Resource Types]].
 
=== CgsResource::ESmallResourceMemType ===