Vehicle Data: Difference between revisions

From Burnout Wiki
Content added Content deleted
(simplify layout)
No edit summary
Line 1: Line 1:
The '''Burnout Vehicle''' file format is used to store data for a particular vehicle in all Burnout games from Takedown to Dominator. It uses the file extension '''.bgv''', or '''.btv''' for traffic vehicles. It is the successor to Point of Impact's [[Burnout_2_Race_Car|Burnout 2 Race Car]] file format.
The '''Burnout Vehicle''' file format is used to store data for a particular vehicle in all Burnout games from Takedown to Dominator. It uses the file extension <code>.BGV</code> for player vehicles, and <code>.BTV</code> for traffic vehicles. It is the successor to Point of Impact's [[Burnout_2_Race_Car|Burnout 2 Race Car]] file format.


This format contains most of the data related to any given vehicle, including mesh data, Level of Detail models, texture data, pointers to external files, deformation matrices, collision detection parameters and physics configuration info.
This format contains most of the data related to any given vehicle, including mesh data, Level of Detail models, texture data, pointers to external files, deformation matrices, collision detection parameters and physics configuration info.
Line 20: Line 20:


* Version 0x1D and onward store deformation matrices in a different order to previous revisions.
* Version 0x1D and onward store deformation matrices in a different order to previous revisions.
* The LOD Database version present in revision 0x14 BGVs are the only version to use '''global pointers''' for their submesh tables. These point to the exact location in the file of each submesh, whereas '''local pointers''', used in all subsequent versions of the format, use offsets relative to the beginning of the LOD. For example, a pointer to offset <tt>0x1820</tt> in a 0x14-era LOD Database would appear to point to <tt>0x140</tt> in all other versions.
* The LOD Database version present in revision 0x14 BGVs are the only version to use '''global pointers''' for their Vehicle Object tables. These point to the exact location in the file of each object, whereas '''local pointers''', used in all subsequent versions of the format, use offsets relative to the beginning of the LOD. For example, a pointer to offset <tt>0x1820</tt> in a 0x14-era LOD Database would appear to point to <tt>0x140</tt> in all other versions.


= Layout (Version 0x17) =
= Layout (Version 0x17) =
Line 54: Line 54:
| 0x34 || Body part radii || float[6] || ||
| 0x34 || Body part radii || float[6] || ||
|-
|-
| 0x4C || LOD database offset(s) || [[Burnout_Vehicle#LOD_Database|LOD Database]]*[5] || ||
| 0x4C || LOD database offsets || [[Burnout_Vehicle#LOD_Database|LOD Database]]*[5] || ||
|-
|-
| 0x60 || Vehicle texture offset || Texture* || ||
| 0x60 || Vehicle texture offset || Texture* || ||
Line 70: Line 70:
| 0xA70 || Chassis bone lengths || float[20] || ||
| 0xA70 || Chassis bone lengths || float[20] || ||
|-
|-
| 0xAC0 || Chassis bone rig type || EBoneRigType || ||
| 0xAC0 || Chassis bone rig type || EBoneRigType || || 0x00 = normal bone rig<br>0x01 = large bone rig<br>0x02 = no bone rig
|-
|-
| 0xAC4 || Body part types || EBodyPartType[6] || ||
| 0xAC4 || Body part types || EBodyPartType[6] || || 0x00 = Wheel<br>0x01 = Body part
|-
|-
| 0xADC || Hinge axes || byte[6] || ||
| 0xADC || Hinge axes || byte[6] || ||
Line 106: Line 106:
| 0x16CA || Current payload set || sbyte || -1 if not set ||
| 0x16CA || Current payload set || sbyte || -1 if not set ||
|-
|-
| 0x16DC || HSM offset || [[Burnout_Vehicle#Engine_Sound_Model_(ESM)|Engine Sound Model]]* || ||
| 0x16DC || ESM offsets || [[Burnout_Vehicle#Engine_Sound_Model_(ESM)|Engine Sound Model]]*[2] || ||
|-
| 0x16E0 || LSM offset || Engine Sound Model* || ||
|}
|}


=== LOD Database ===
=== LOD Database ===
The '''LOD Database''' format stores both a given vehicle's LOD model as well as the model's rendering parameters.
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 0), low (LOD 1), medium (LOD 2) and high (LOD 3) quality.
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 the maximum amount of vehicle objects a LOD Database can contain is 12, though it's unknown if this rule is enforced by the game or if it can be larger than that.
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.


{|class="wikitable"
{|class="wikitable"
Line 143: Line 141:
| 0x01 || Glass mesh index || sbyte ||
| 0x01 || Glass mesh index || sbyte ||
|-
|-
| 0x04 || Meshes || Vehicle Mesh(*)[] || Pointer to an array of Vehicle Meshes
| 0x04 || Mesh array offset || [[Burnout_Vehicle#Vehicle_Mesh|Vehicle Mesh]]*[] || Pointer to an array of Vehicle Meshes
|-
|-
| 0x08 || Normal shift || float ||
| 0x08 || Normal shift || float ||
Line 173: Line 171:
|-
|-
| 0x0F || Unused || byte ||
| 0x0F || Unused || byte ||
|-
|}
|}


=== Engine Sound Model (ESM) ===
=== Engine Sound Model ===
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 <code>.HSM</code> and <code>.LSM</code>.
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 <code>.HSM</code> and <code>.LSM</code>.

Revision as of 16:50, 19 April 2021

The Burnout Vehicle file format is used to store data for a particular vehicle in all Burnout games from Takedown to Dominator. It uses the file extension .BGV for player vehicles, and .BTV for traffic vehicles. It is the successor to Point of Impact's Burnout 2 Race Car file format.

This format contains most of the data related to any given vehicle, including mesh data, Level of Detail models, texture data, pointers to external files, deformation matrices, collision detection parameters and physics configuration info.

Versions

Burnout Vehicle version
0x14 0x15 0x17 0x1D 0x1F 0x25
Date Apr 2004 May 2004 Jul 2004 May 2005 Jul 2005 Jan 2006
Games Takedown (Early Demo) Takedown (Preview Build) Takedown
Legends
Dominator (PSP)
Revenge (2005, Early Demo) Revenge (2005)
Dominator (PS2)
Revenge (360)
Body parts
Max body parts 6 6 8 8 8 8
  • Version 0x1D and onward store deformation matrices in a different order to previous revisions.
  • The LOD Database version present in revision 0x14 BGVs are the only version to use global pointers for their Vehicle Object tables. These point to the exact location in the file of each object, whereas local pointers, used in all subsequent versions of the format, use offsets relative to the beginning of the LOD. For example, a pointer to offset 0x1820 in a 0x14-era LOD Database would appear to point to 0x140 in all other versions.

Layout (Version 0x17)

Vehicle Data

Offset Name Type Value Notes
0x00 Version number uint 0x17
0x04 Loaded state int 0x00
0x08 File size (bytes) int
0x0C Body Part count byte
0x0D Wheel count byte
0x0E Minimum LOD short
0x10 Maximum LOD short
0x14 Object radius float
0x18 Wheel radius float
0x1C Wheel scales float[6]
0x34 Body part radii float[6]
0x4C LOD database offsets LOD Database*[5]
0x60 Vehicle texture offset Texture*
0x64 Shadow body object offset Vehicle Object*
0x68 Shadow wheel object offset Vehicle Object*
0x6C Texture colour overlay offset Texture*
0x70 Chassis bone deform matrices Matrix3x4[20]
0x570 Chassis skin-to-bone deform matrices Matrix3x4[20]
0xA70 Chassis bone lengths float[20]
0xAC0 Chassis bone rig type EBoneRigType 0x00 = normal bone rig
0x01 = large bone rig
0x02 = no bone rig
0xAC4 Body part types EBodyPartType[6] 0x00 = Wheel
0x01 = Body part
0xADC Hinge axes byte[6]
0xAE2 Body part bone indices byte[6][2]
0xAEE Wheel bone indices byte[6][2]
0xAFC Hinge max angles float[6]
0xB14 Body part bone weights float[6][2]
0xB44 Wheel bone weights float[6][2]
0xB80 Wheel matrices Matrix3x4[6]
0xD00 Body part matrices Matrix3x4[6]
0xEA0 Body part attach points Vector3[6]
0x1060 Hull Vehicle Hull
0x1660 Hull exists? Bool32
0x1664 Tag points Tag Point*[18]
0x16AC Tag point counts byte[18]
0x16C8 Number of payload sets sbyte
0x16C9 Number of payloads sbyte
0x16CA Current payload set sbyte -1 if not set
0x16DC ESM offsets Engine Sound Model*[2]

LOD Database

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 Name Type
0x00 Body object offset Vehicle Object*
0x04 Body part offsets Vehicle Object*[5]
0x18 Wheel object offsets Vehicle Object*[4]

Vehicle Object

Offset Name Type Description
0x00 Mesh count sbyte
0x01 Glass mesh index sbyte
0x04 Mesh array offset Vehicle Mesh*[] Pointer to an array of Vehicle Meshes
0x08 Normal shift float

Vehicle Mesh

Offset Name Type Description
0x00 Render data (first) byte*
0x04 Render data (rest) byte*
0x08 Mesh flags ushort
0x0A Alpha1 byte
0x0B Texture index byte
0x0C Source opacity byte
0x0D Current opacity byte
0x0E Shininess byte
0x0F Unused byte

Engine Sound Model

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.