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
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.
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... To do: Move this and other texture-related structures to their own page if it doesn't already exist.
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
GtTextureExt
Enumerations
EBoneRigType
Name
Value
Comments
eNormalBoneRig
0
Normal bone rig
eLargeBoneRig
1
Large bone rig
eNoBoneRig
2
No bone rig
EBodyPartType
Hmmm... To do: Update with correct information: goes up to at least 5
Name
Value
Comments
?
0
Wheel
?
1
Body part
EPartialType
Hmmm... To do: Check what high nibble means (sometimes marked as 1).
Name
Value
Comments
ePartialNormal
0
ePartialTurbo
1
ePartialGinsu
2