Vehicle Data/Burnout 3

From Burnout Wiki

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

Hmmm...
Hmmm...
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

Hmmm...
Hmmm...
To do:
Update with correct information: goes up to at least 5
Name Value Comments
? 0 Wheel
? 1 Body part

EPartialType

Hmmm...
Hmmm...
To do:
Check what high nibble means (sometimes marked as 1).
Name Value Comments
ePartialNormal 0
ePartialTurbo 1
ePartialGinsu 2