Common Data Types (Burnout Paradise): Difference between revisions

Vectors and matrices.
(Created page.)
 
(Vectors and matrices.)
Line 2:
 
= Set/Array =
A <code>Set</code> or <code>Array</code>, sometimes called <code>CgsSet</code> and <code>CgsArray</code>, is a contiguous series of elements of a specified data type, followed by the number of elements in use. ThoughIf technicallythe separate,elements <code>Set</code>are and64 <code>Array</code>bits havelong, the sameelement count will usually (but not always) be succeeded by 4 bytes of padding; otherwise, it will have no structurepadding.
 
Though technically separate, <code>Set</code> and <code>Array</code> have the same structure.
Typically, the element count is succeeded by 4 bytes of padding; however, as seen in Profile 1.9, it may have no padding.
 
As an example, the below is the structure of <code>Set<uint16_t, 8></code>.
Line 13:
| 0x0 || 0x10 || uint16_t[8] || maElements || The elements in the array
|-
| 0x10 || 0x4 || uint32_t || muLength || The number of elements in the arrayuse
|-
| 0x14 || 0x4 || || || padding
Line 19:
 
= BitArray =
As the name would suggest, a <code>BitArray</code>, sometimes called <code>CgsBitArray</code>, is an array of bits. Unlike an <code>Array</code>, the element count is not part of the structure, making it hardcoded.
 
Note that a <code>BitArray</code> is stored as a series of <code>uint64_t</code>. This can be confusing if the data is in little endian byte order. Due to this, every <code>BitArray</code>, even when below 64 bits in length, is padded to 64 bits.
Line 32:
 
= CgsID =
A <code>CgsID</code>, though technically justis a typedef of <code>uint64_t</code>, which is heavily used across the game. Its original intent appears to be as a new moniker for [[GtID]], Criterion's in-house compressed string type, and it sees extensive use in this role. However, at times, it is also used to store the IDs colloquially referred to as GameDB IDs. Conversely, GameDB IDs are not always stored as a <code>CgsID</code>, commonly being a normal <code>uint64_t</code> or <code>uint32_t</code> instead.
{| class="wikitable"
|-
Line 40:
|}
 
= VectorsVector =
Vectors in Burnout Paradise are structures made up of floats. They are primarily used for positional values but have been used in other cases, such as colors and gear ratios. Though a number of types besides floats are technically supported, they are seemingly never used.
Criterion used several vector formats, including <code>Vector3</code>, <code>Vector3Plus</code>, and <code>Vector4</code>. Todo.
 
The below structures represent the data held, but many vectors use the <code>VectorIntrinsic</code> type, causing them to be 0x10 long regardless of their structure.
= Matrices =
=== VectorIntrinsic ===
Criterion used several matrix formats, including <code>Matrix33</code>, <code>Matrix44</code>, and <code>Matrix44Affine</code>. Todo.
{| class="wikitable"
|-
! Name !! Type !! Size
|-
| VectorIntrinsic || float[4] || 0x10
|}
=== Vector2 ===
{| class="wikitable"
|-
! Offset !! Size !! Type !! Name !! Description
|-
| 0x0 || 0x4 || float || x || X value
|-
| 0x4 || 0x4 || float || y || Y value
|}
=== Vector3 ===
{| class="wikitable"
|-
! Offset !! Size !! Type !! Name !! Description
|-
| 0x0 || 0x4 || float || x || X value
|-
| 0x4 || 0x4 || float || y || Y value
|-
| 0x8 || 0x4 || float || z || Z value
|}
=== Vector3Plus/Vector4 ===
{| class="wikitable"
|-
! Offset !! Size !! Type !! Name !! Description
|-
| 0x0 || 0x4 || float || x || X value
|-
| 0x4 || 0x4 || float || y || Y value
|-
| 0x8 || 0x4 || float || z || Z value
|-
| 0xC || 0x4 || float || w || W value
|}
= Matrix =
Matrices are structures made up of vectors. They see similar use to vectors but are three-dimensional rather than planar.
=== Matrix33 ===
{| class="wikitable"
|-
! Offset !! Size !! Type !! Name !! Description
|-
| 0x0 || 0x10 || Vector3 || xAxis || X axis
|-
| 0x10 || 0x10 || Vector3 || yAxis || Y axis
|-
| 0x20 || 0x10 || Vector3 || zAxis || Z axis
|}
=== Matrix44 ===
{| class="wikitable"
|-
! Offset !! Size !! Type !! Name !! Description
|-
| 0x0 || 0x10 || Vector4 || xAxis || X axis
|-
| 0x10 || 0x10 || Vector4 || yAxis || Y axis
|-
| 0x20 || 0x10 || Vector4 || zAxis || Z axis
|-
| 0x30 || 0x10 || Vector4 || wAxis || W axis
|}
=== Matrix44Affine ===
{| class="wikitable"
|-
! Offset !! Size !! Type !! Name !! Description
|-
| 0x0 || 0x10 || Vector3 || xAxis || X axis
|-
| 0x10 || 0x10 || Vector3 || yAxis || Y axis
|-
| 0x20 || 0x10 || Vector3 || zAxis || Z axis
|-
| 0x30 || 0x10 || Vector3 || wAxis || W axis
|}
=== Matrix44AffinePacked ===
{| class="wikitable"
|-
! Offset !! Size !! Type !! Name !! Description
|-
| 0x0 || 0x10 || Vector4 || xAxis || X axis
|-
| 0x10 || 0x10 || Vector4 || yAxis || Y axis
|-
| 0x20 || 0x10 || Vector4 || zAxis || Z axis
|}
 
= Hashes =