Common Data Types (Burnout Paradise): Difference between revisions
Common Data Types (Burnout Paradise) (view source)
Revision as of 22:10, 2 November 2021
, 2 years agoVectors 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.
Though technically separate, <code>Set</code> and <code>Array</code> have the same structure.
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
|-
| 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>
{| class="wikitable"
|-
Line 40:
|}
=
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.
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.
=== VectorIntrinsic ===
{| 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 =
|