Vehicle Data/Burnout 3: Difference between revisions
(Added engine structures and texture typedefs.) |
(Added payload structure) |
||
(6 intermediate revisions by the same user not shown) | |||
Line 404: | Line 404: | ||
=== CB3VehiclePayloadSet === |
=== CB3VehiclePayloadSet === |
||
{| class="wikitable" |
|||
{{todo|List payload set structure.}} |
|||
! Offset !! Length !! Type !! Name !! Description !! Comments |
|||
|- |
|||
| 0x0 || 0x1 || RwInt8 || mn8NumPayloads || || |
|||
|- |
|||
| 0x1 || 0x3 || || || Padding || |
|||
|- |
|||
| 0x4 || 0x4 || RwUInt32 || mxFlags || || |
|||
|- |
|||
| 0x8 || 0x4 || [[#CB4VehiclePayload|CB4VehiclePayload]]* || mpaPayloads || || |
|||
|} |
|||
=== CB3VehiclePayload === |
=== CB3VehiclePayload === |
||
{| class="wikitable" |
|||
{{todo|List payload structure.}} |
|||
! Offset !! Length !! Type !! Name !! Description !! Comments |
|||
|- |
|||
| 0x0 || 0x8 || [[GtID]] || mPartID || || |
|||
|- |
|||
| 0x8 || 0x4 || RwUInt32 || mxFlags || || No flags used in retail game |
|||
|- |
|||
| 0xC || 0x1 || RwInt8 || mnPartIndex || || |
|||
|- |
|||
| 0xD || 0x3 || || || Padding || |
|||
|- |
|||
| 0x10 || 0x40 || [[CGtMatrix3x4]] || mPosition || || |
|||
|} |
|||
=== CB3SoundESMStruct === |
=== CB3SoundESMStruct === |
||
Line 452: | Line 474: | ||
|} |
|} |
||
=== |
=== CB3SoundESMGraphStruct === |
||
{| class="wikitable" |
{| class="wikitable" |
||
! Offset !! Length !! Type !! Name !! Description !! Comments |
! Offset !! Length !! Type !! Name !! Description !! Comments |
||
Line 467: | Line 489: | ||
|} |
|} |
||
=== |
=== CB3SoundESMPointStruct === |
||
{| class="wikitable" |
{| class="wikitable" |
||
! Offset !! Length !! Type !! Name !! Description !! Comments |
! Offset !! Length !! Type !! Name !! Description !! Comments |
||
Line 511: | Line 533: | ||
|- |
|- |
||
| ? || 1 || Body part |
| ? || 1 || Body part |
||
|} |
|||
=== EPartialType === |
|||
{{todo|Check what high nibble means (sometimes marked as 1).}} |
|||
{| class="wikitable" |
|||
! Name !! Value !! Comments |
|||
|- |
|||
| ePartialNormal || 0 || |
|||
|- |
|||
| ePartialTurbo || 1 || |
|||
|- |
|||
| ePartialGinsu || 2 || |
|||
|} |
|} |
Latest revision as of 00:54, 6 February 2023
Based on information from Burnout Revenge Alpha 7 debugging symbols.
Structures
CB3VehicleData
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x4 | RwUInt32 | mxVersionNumber | Version number | 29 |
0x4 | 0x4 | RwInt32 | mxLoadedState | Loaded state | Always 0 in asset. Set in memory |
0x8 | 0x4 | RwInt32 | ? | File size (bytes) | |
0xC | 0x1 | RwInt8 | mn8NumBodyParts | Body Part count | |
0xD | 0x1 | RwInt8 | mn8NumWheels | Wheel count | |
0xE | 0x2 | RwInt16 | mn16MinLOD | Minimum LOD | |
0x10 | 0x2 | RwInt16 | mn16MaxLOD | Maximum LOD | |
0x12 | 0x2 | Padding | |||
0x14 | 0x4 | RwReal | mrObjectRadius | Object radius | |
0x18 | 0x4 | RwReal | mrWheelRadius | Wheel radius | |
0x1C | 0x18 | RwReal[6] | marWheelScales | Wheel scales | |
0x34 | 0x18 | RwReal[6] | marBodyPartRadii | Body part radii | |
0x4C | 0x14 | CB3VehicleLODData*[5] | mapLODData | LODs | |
0x60 | 0x4 | CGtTexture* | mpTexture | Vehicle texture | |
0x64 | 0x4 | CB3VehicleObject* | mpShadowBodyObject | Shadow body object | |
0x68 | 0x4 | CB3VehicleObject* | mpShadowWheelObject | Shadow wheel object | |
0x6C | 0x4 | CGtTexture* | mpTextureColourOverlay | Texture colour overlay | |
0x70 | 0x500 | CGtMatrix3x4[20] | ? | Chassis bone deform matrices | |
0x570 | 0x500 | CGtMatrix3x4[20] | ? | Chassis skin-to-bone deform matrices | |
0xA70 | 0x50 | RwReal[20] | ? | Chassis bone lengths | |
0xAC0 | 0x4 | EBoneRigType | meMainBoneRigType | Chassis bone rig type | |
0xAC4 | 0x18 | EBodyPartType[6] | maeBodyPartType | Body part types | |
0xADC | 0x6 | RwUInt8[6] | mau8HingeAxes | Hinge axes | |
0xAE2 | 0xC | RwUInt8[6][2] | maau8BodyPartBoneIndices | Body part bone indices | |
0xAEE | 0xC | RwUInt8[6][2] | maau8WheelBoneIndices | Wheel bone indices | |
0xAFA | 0x2 | Padding | |||
0xAFC | 0x18 | RwReal[6] | marHingeMaxAngles | Hinge max angles | |
0xB14 | 0x30 | RwReal[6][2] | maarBodyPartBoneWeights | Body part bone weights | |
0xB44 | 0x30 | RwReal[6][2] | maarWheelBoneWeights | Wheel bone weights | |
0xB74 | 0xC | Padding | |||
0xB80 | 0x180 | CGtMatrix3x4[6] | maWheelMatrices | Wheel matrices | |
0xD00 | 0x180 | CGtMatrix3x4[6] | maBodyPartMatrices | Body part matrices | |
0xE80 | 0x20 | CGtAxisAlignedBox | mBBox | ||
0xEA0 | 0xC0 | CGtAxisAlignedBox[6] | maBodyPartBBoxes | ||
0xF60 | 0x100 | ? | ? | Null in available samples | |
0x1060 | 0x500 | CB3ConvexHullVehicle | mHull | Hull | |
0x1660 | 0x4 | RwBool | mbHullExists | Does hull exist | |
0x1664 | 0x48 | CB3VehicleTag*[18] | mpaTagPoints | Tag points | |
0x16AC | 0x12 | RwUInt8[18] | mauTagPointCounts | Tag point counts | |
0x16BE | 0x2 | Padding | |||
0x16C0 | 0x4 | CB3VehiclePayloadSet* | mpaPayloadSets | ||
0x16C4 | 0x4 | CB3VehiclePayload* | mpaPayloads | ||
0x16C8 | 0x1 | RwInt8 | mn8NumPayloadSets | Number of payload sets | |
0x16C9 | 0x1 | RwInt8 | mn8NumPayloads | Number of payloads | |
0x16CA | 0x1 | RwInt8 | mn8CurrentPayloadSet | Current payload set | -1 if not set |
0x16CB | 0x1 | Padding | |||
0x16CC | 0x10 | ? | ? | Null in available samples | |
0x16DC | 0x8 | CB3SoundESMStruct*[2] | mapESMs | ESMs |
CB3VehicleLODData
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x40 | CB3VehicleLODDataBase | Base class |
CB3VehicleLODDataBase
The LOD Database format stores a given vehicle's LOD model.
LODs, or Levels of Detail, are lower-poly, lower-detail (hence the name) models that games use for objects that are far away from the player, to keep framerates smooth. BGVs contain 4 LOD Databases, which in turn each contain one LOD model of minimum (LOD 3), low (LOD 2), medium (LOD 1) and high (LOD 0) quality.
It seems a LOD Database can contain a maximum of 12 vehicle objects, though it's unknown if this rule is enforced by the game or if it can be larger than that.
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x4 | CB3VehicleObject* | mpBodyObject | Body object | |
0x4 | 0x18 | CB3VehicleObject*[6] | mapBodyParts | Body parts | |
0x18 | 0xC | CB3VehicleObject*[3] | mapWheelObject | Wheel objects |
CB3VehicleObject
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x1 | RwInt8 | mn8NumMeshes | Mesh count | |
0x1 | 0x1 | RwInt8 | mn8GlassMeshIndex | Glass mesh index | |
0x2 | 0x2 | Padding | |||
0x4 | 0x4 | CB3VehicleMesh* | mpaMeshes | Meshes | |
0x8 | 0x4 | RwReal | Normal shift |
CB3VehicleMesh
The format for a Vehicle Mesh definition differs by platform.
PS2
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x4 | RwUInt8* | mpRenderDataFirst | Render data (first) | |
0x4 | 0x4 | RwUInt8* | mpRenderDataRest | Render data (rest) | |
0x8 | 0x2 | RwUInt16 | mx16MeshFlags | Mesh flags | TODO: List flags |
0xA | 0x1 | RwUInt8 | mu8Alpha1 | Alpha1 | |
0xB | 0x1 | RwUInt8 | mu8TextureIndex | Texture index | |
0xC | 0x1 | RwUInt8 | mu8SourceOpacity | Source opacity | |
0xD | 0x1 | RwUInt8 | mu8CurrentOpacity | Current opacity | |
0xE | 0x1 | RwUInt8 | mu8Shininess | Shininess | |
0xF | 0x1 | RwUInt8 | mu8UNUSED | Unused |
Xbox
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x4 | RwReal | ? | ||
0x4 | 0x4 | RwReal | ? | ||
0x8 | 0x4 | RwReal | ? | ||
0xC | 0x4 | RwInt8* | ? | Render data | |
0x10 | 0x4 | RwUInt32 | ? | Render data size | |
0x14 | 0x4 | RwUInt32 | ? | ||
0x18 | 0x1 | RwUInt8 | ? | ||
0x19 | 0x1 | RwUInt8 | ? | ||
0x1A | 0x1 | RwUInt8 | ? | ||
0x1B | 0x1 | RwUInt8 | ? |
CGtTexture
To do: Move this and other texture-related structures to their own page if it doesn't already exist. |
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x34 | RwRaster | mRwRaster | ||
0x34 | 0x5C | GtSkyRasterExt | mSkyRasterExt | ||
0x90 | 0x38 | GtTextureExt | mTextureExt |
RwRaster
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x4 | RwRaster* | parent | ||
0x4 | 0x4 | RwUInt8* | cpPixels | ||
0x8 | 0x4 | RwUInt8* | palette | ||
0xC | 0x4 | RwInt32 | width | ||
0x10 | 0x4 | RwInt32 | height | ||
0x14 | 0x4 | RwInt32 | depth | ||
0x18 | 0x4 | RwInt32 | stride | ||
0x1C | 0x2 | RwInt16 | nOffsetX | ||
0x1E | 0x2 | RwInt16 | nOffsetY | ||
0x20 | 0x1 | RwUInt8 | cType | ||
0x21 | 0x1 | RwUInt8 | cFlags | ||
0x22 | 0x1 | RwUInt8 | privateFlags | ||
0x23 | 0x1 | RwUInt8 | cFormat | ||
0x24 | 0x4 | RwUInt8* | originalPixels | ||
0x28 | 0x4 | RwInt32 | originalWidth | ||
0x2C | 0x4 | RwInt32 | originalHeight | ||
0x30 | 0x4 | RwInt32 | originalStride |
GtSkyRasterExtTag
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x4 | RwInt32 | dmaRefCount | ||
0x4 | 0x4 | RwInt32 | dmaClrCount | ||
0x8 | 0x4 | RwUInt32 | lsb | ||
0xC | 0x4 | RwUInt32 | msb | ||
0x10 | 0x4 | RwUInt32 | palOffset | ||
0x14 | 0x2 | RwUInt16 | mipmapKL | ||
0x16 | 0x1 | RwUInt8 | maxMipLevel | ||
0x17 | 0x1 | RwUInt8 | bLocked | ||
0x18 | 0x4 | RwUInt32 | miptbp1Lsb | ||
0x1C | 0x4 | RwUInt32 | miptbp1Msb | ||
0x20 | 0x4 | RwUInt32 | miptbp2Lsb | ||
0x24 | 0x4 | RwUInt32 | miptbp2Msb | ||
0x28 | 0x4 | RwUInt32 | sysMemSize | ||
0x2C | 0x4 | RwUInt32 | sysMemPalSize | ||
0x30 | 0x4 | RwUInt32 | nTexCacheSize | ||
0x34 | 0x1 | RwUInt8 | cachePkts | ||
0x35 | 0x1 | RwUInt8 | lockedMipLevel | ||
0x36 | 0x1 | RwUInt8 | flags | ||
0x37 | 0x1 | RwUInt8[1] | pad | ||
0x38 | 0x4 | void* | palUploadPkt | ||
0x3C | 0x1C | void*[7] | mipUploadPkts | ||
0x58 | 0x4 | _SkyMemBlock* | mpCacheEntry |
GtTextureExtTag
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x10 | RwUInt16[8] | mau16PaletteGSOffsets | ||
0x10 | 0x1 | RwUInt8 | mu8NumPalettes | ||
0x11 | 0x1 | RwUInt8 | mu8PaletteWidth | ||
0x12 | 0x1 | RwUInt8 | mu8PaletteHeight | ||
0x13 | 0x1 | RwUInt8 | mu8CurrentPalette | ||
0x14 | 0x4 | RwUInt32 | muSizeInMemory | ||
0x18 | 0x20 | char[32] | macName |
CB3ConvexHullVehicle
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x1C | CB3ConvexHull | Base class | ||
0x1C | 0x78 | CB3ConvexHullPlane[40] | maPlaneVertData | Max used is 28 | |
0x94 | 0xC | Padding | |||
0xA0 | 0x280 | CGtPlane[40] | maPlaneData | Max used is 28 | |
0x320 | 0x100 | CGtV3d[16] | maVertData | ||
0x420 | 0x60 | ? | ? | Possibly space for maVertData. Unusable if so as vert map is limited to 16 | |
0x480 | 0x78 | CB3ConvexHullEdge[60] | maEdgeData | Max used is 42 | |
0x4F8 | 0xC0 | CB3ConvexHullVertMap[16] | maVertWeightData | ||
0x5B8 | 0x8 | Padding |
CB3ConvexHull
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x4 | CB3ConvexHullPlane* | maPlaneVerts | ||
0x4 | 0x4 | CGtPlane* | maPlanes | ||
0x8 | 0x4 | CGtV3d* | maVerts | ||
0xC | 0x4 | CB3ConvexHullEdge* | maEdges | ||
0x10 | 0x4 | CB3ConvexHullVertMap* | maVertWeights | ||
0x14 | 0x4 | RwUInt32 | mxFlags | ||
0x18 | 0x1 | RwUInt8 | mu8NumVerts | ||
0x19 | 0x1 | RwUInt8 | mu8NumPlanes | ||
0x1A | 0x1 | RwUInt8 | mu8NumEdges | ||
0x1B | 0x1 | Padding |
CB3ConvexHullPlane
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x3 | RwUInt8[3] | mau8Verts | TODO: Confirm this is 3 and not 4 like in Revenge |
CB3ConvexHullEdge
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x1 | RwUInt8 | mu8Vert0 | ||
0x1 | 0x1 | RwUInt8 | mu8Vert1 |
CB3ConvexHullVertMap
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x8 | RwReal[2] | marWeights | ||
0x8 | 0x2 | RwUInt8[2] | mau8Bones | ||
0xA | 0x2 | Padding |
CB3VehicleTag
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x10 | CGtV3dPlus | mPosAndSize | ||
0x10 | 0x10 | CGtV3dPlus | mNormalAndConeAngle | ||
0x20 | 0x4 | RwRGBA | mColour | ||
0x24 | 0x8 | RwReal[2] | marWeights | ||
0x2C | 0x2 | RwUInt8[2] | mau8BoneIndices | ||
0x2E | 0x2 | Padding |
CB3VehiclePayloadSet
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x1 | RwInt8 | mn8NumPayloads | ||
0x1 | 0x3 | Padding | |||
0x4 | 0x4 | RwUInt32 | mxFlags | ||
0x8 | 0x4 | CB4VehiclePayload* | mpaPayloads |
CB3VehiclePayload
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x8 | GtID | mPartID | ||
0x8 | 0x4 | RwUInt32 | mxFlags | No flags used in retail game | |
0xC | 0x1 | RwInt8 | mnPartIndex | ||
0xD | 0x3 | Padding | |||
0x10 | 0x40 | CGtMatrix3x4 | mPosition |
CB3SoundESMStruct
This format contains playback parameters and pitching info for a given vehicle's engine sound effects, stored mostly as floating-point numbers. BGVs use two of these files for high and low speed ranges. The files were merged into the BGV starting with revision 0x17; prior to this, they were stored externally in the same folder as the BGV, with the file extensions .HSM
and .LSM
.
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x38 | CB3SoundESMInputLag[7] | maInputLags | ||
0x38 | 0x4 | RwUInt32 | mun32VersionNumber | 4 | |
0x3C | 0x4 | CB3SoundESMPartialStruct* | mpPartials | ||
0x40 | 0x1 | RwUInt8 | mun8PartialCount | ||
0x41 | 0x3 | Padding | |||
0x44 | 0x4 | RwBool | mbHighDetail |
CB3SoundESMInputLag
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x4 | RwReal | mrMin | ||
0x4 | 0x4 | RwReal | mrMax |
CB3SoundESMPartialStruct
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x8 | GtID | mWaveID | ||
0x8 | 0x4 | CB3SoundESMGraphStruct* | mpGraphs | Negative pointer relative to partial start | |
0xC | 0x1 | RwUInt8 | mun8GraphCount | ||
0xD | 0x1 | RwUInt8 | mun8Type | See EPartialType | |
0xE | 0x2 | Padding |
CB3SoundESMGraphStruct
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x4 | CB3SoundESMPointStruct* | mpPoints | Negative pointer relative to graph start | |
0x4 | 0x1 | RwUInt8 | mun8PointCount | ||
0x5 | 0x1 | RwInt8 | mn8XAxis | ||
0x6 | 0x1 | RwInt8 | mn8YAxis | ||
0x7 | 0x1 | Padding |
CB3SoundESMPointStruct
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x4 | RwReal | mrXpos | ||
0x4 | 0x4 | RwReal | mrYpos |
Typedefs
GtSkyRasterExt
Name | Type | Length | Comments |
---|---|---|---|
GtSkyRasterExt | GtSkyRasterExtTag | 0x38 |
GtTextureExt
Name | Type | Length | Comments |
---|---|---|---|
GtTextureExt | GtTextureExtTag | 0x5C |
Enumerations
EBoneRigType
Name | Value | Comments |
---|---|---|
eNormalBoneRig | 0 | Normal bone rig |
eLargeBoneRig | 1 | Large bone rig |
eNoBoneRig | 2 | No bone rig |
EBodyPartType
To do: Update with correct information: goes up to at least 5 |
Name | Value | Comments |
---|---|---|
? | 0 | Wheel |
? | 1 | Body part |
EPartialType
To do: Check what high nibble means (sometimes marked as 1). |
Name | Value | Comments |
---|---|---|
ePartialNormal | 0 | |
ePartialTurbo | 1 | |
ePartialGinsu | 2 |