Vehicle Data: Difference between revisions

From Burnout Wiki
Content added Content deleted
m (Added article to the Takedown-era file formats category page)
(Restructured version table, moved structure definitions to subpages.)
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 <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.
The '''Vehicle Data''' 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 5: Line 5:
= Versions =
= Versions =
{| class="wikitable"
{| class="wikitable"
! Format version !! Game !! Date
! rowspan="2" |
! colspan="6" | Burnout Vehicle version
|-
|-
! 0x14 || 0x15 || 0x17 || 0x1D || 0x1F || 0x25
| 20 || Burnout 3 (Early Demo) || Apr 2004
|-
|-
| Date || Apr 2004 || May 2004 || Jul 2004 || May 2005 || Jul 2005 || Jan 2006
| 21 || Burnout 3 (Preview Build) || May 2004
|-
|-
| Games || Takedown (Early Demo) || Takedown (Preview Build) || Takedown<br>Legends<br>Dominator (PSP) || Revenge (2005, Early Demo) || Revenge (2005)<br>Dominator (PS2) || Revenge (360)
| 23 || Burnout 3<br>Burnout Legends<br>Burnout Dominator (PSP) || Jul 2004
|-
|-
| 29 || Burnout Revenge (2005, Early Demo) || May 2005
! Body parts !! colspan="6" |
|-
|- align="right"
| 31 || Burnout Revenge (2005)<br>Burnout Dominator (PS2) || Jul 2005
| Max body parts || 6 || 6 || 8 || 8 || 8 || 8
|-
| 37 || Burnout Revenge (360) || Jan 2006
|}
|}


* 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 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.
* 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.
* Version 0x17 and later support up to 8 body parts. Prior versions support up to 6.


= Information =
= Layout (Version 0x17) =
{{subpage|Burnout 3|text=Information on the Vehicle Data format used in Burnout 3.}}
{|class="wikitable
{{subpage|Burnout Revenge|text=Information on the Vehicle Data format used in Burnout Revenge.}}
|-
! 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 || [[Burnout_Vehicle#LOD_Database|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<br>0x01 = large bone rig<br>0x02 = no bone rig
|-
| 0xAC4 || Body part types || EBodyPartType[6] || || 0x00 = Wheel<br>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 || [[Burnout_Vehicle#Engine_Sound_Model_(ESM)|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.

{|class="wikitable"
|-
! Offset
! Name
! Type
|-
| 0x00 || Body object offset || [[Burnout_Vehicle#Vehicle_Object|Vehicle Object]]*
|-
| 0x04 || Body part offsets || Vehicle Object*[5]
|-
| 0x18 || Wheel object offsets || Vehicle Object*[4]
|}

=== Vehicle Object ===
{|class="wikitable"
|-
! Offset
! Name
! Type
! Description
|-
| 0x00 || Mesh count || sbyte ||
|-
| 0x01 || Glass mesh index || sbyte ||
|-
| 0x04 || Mesh array offset || [[Burnout_Vehicle#Vehicle_Mesh|Vehicle Mesh]]*[] || Pointer to an array of Vehicle Meshes
|-
| 0x08 || Normal shift || float ||
|}

=== Vehicle Mesh ===
The format for a Vehicle Mesh definition differs by platform.
==== PS2 ====
{|class="wikitable"
|-
! 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 ||
|}
==== Xbox ====
{|class="wikitable"
|-
! Offset
! Name
! Type
! Description
|-
| 0x00 || unk0 || float ||
|-
| 0x04 || unk1 || float ||
|-
| 0x08 || unk2 || float ||
|-
| 0x0C || Render Data || byte* ||
|-
| 0x10 || Render Data Size || int ||
|-
| 0x14 || unk3 || int ||
|-
| 0x18 || unk4 || byte ||
|-
| 0x19 || unk5 || byte ||
|-
| 0x1A || unk6 || byte ||
|-
| 0x1B || unk7 || 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 <code>.HSM</code> and <code>.LSM</code>.


[[Category:Formats_(Takedown-Dominator)]]
[[Category:Formats_(Takedown-Dominator)]]

Revision as of 07:14, 1 February 2023

The Vehicle Data 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

Format version Game Date
20 Burnout 3 (Early Demo) Apr 2004
21 Burnout 3 (Preview Build) May 2004
23 Burnout 3
Burnout Legends
Burnout Dominator (PSP)
Jul 2004
29 Burnout Revenge (2005, Early Demo) May 2005
31 Burnout Revenge (2005)
Burnout Dominator (PS2)
Jul 2005
37 Burnout Revenge (360) Jan 2006
  • 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.
  • Version 0x17 and later support up to 8 body parts. Prior versions support up to 6.

Information

Burnout 3
Information on the Vehicle Data format used in Burnout 3.
Burnout Revenge
Information on the Vehicle Data format used in Burnout Revenge.