Data Types: Difference between revisions
m (→Basic types) |
(→Structs: Add official names and source code for data types) |
||
Line 62: | Line 62: | ||
} |
} |
||
=== |
===xVec2=== |
||
xVec2 is a set of 2 floats, which usually represent a 2D vector on the world; it is used mostly for texture coordinates. |
|||
Source code: [https://github.com/bfbbdecomp/bfbb/blob/master/src/Core/x/xMath2.h#L35 xMath2.h] |
|||
<source lang=cpp> |
|||
struct xVec2 |
|||
{ |
|||
F32 x; |
|||
F32 y; |
|||
}; |
|||
</source> |
|||
{| class="wikitable" |
{| class="wikitable" |
||
Line 75: | Line 85: | ||
|} |
|} |
||
=== |
===xVec3=== |
||
xVec3 is a set of 3 floats, which usually represent a 3D vector on the world, be it position, rotation or scale. |
|||
Source code: [https://github.com/bfbbdecomp/bfbb/blob/master/src/Core/x/xVec3.h#L6 xVec3.h] |
|||
<source lang=cpp> |
|||
struct xVec3 |
|||
{ |
|||
F32 x; |
|||
F32 y; |
|||
F32 z; |
|||
}; |
|||
</source> |
|||
{| class="wikitable" |
{| class="wikitable" |
||
Line 90: | Line 111: | ||
|} |
|} |
||
=== |
===xVec4=== |
||
xVec4 is a set of 4 floats. They can represent a vector in 4D space, and also a color with R, G, B, A components ranging from 0 to 1. |
|||
Source code: [https://github.com/bfbbdecomp/bfbb/blob/master/src/Core/x/xMath3.h#L67 xMath3.h] |
|||
<source lang=cpp> |
|||
struct xVec4 |
|||
{ |
|||
F32 x; |
|||
F32 y; |
|||
F32 z; |
|||
F32 w; |
|||
}; |
|||
</source> |
|||
{| class="wikitable" |
{| class="wikitable" |
||
Line 107: | Line 140: | ||
|} |
|} |
||
=== |
===xColor=== |
||
xColor is a set of 4 bytes, which represent a 32 bit color with red, blue, green and alpha components. |
|||
In the source code, xColor is a typedef for iColor_tag, which can be different per platform (usually not though). |
|||
Source code: [https://github.com/bfbbdecomp/bfbb/blob/master/src/Core/p2/iColor.h#L6 iColor.h] |
|||
<source lang=cpp> |
|||
struct iColor_tag |
|||
{ |
|||
uint8 r; |
|||
uint8 g; |
|||
uint8 b; |
|||
uint8 a; |
|||
}; |
|||
</source> |
|||
{| class="wikitable" |
{| class="wikitable" |
||
Line 127: | Line 174: | ||
===Motion=== |
===Motion=== |
||
Motion is a 0x30-byte structure (0x3C in TSSM) used in several asset types ([[PLAT]] and [[BUTN]]) which contains some settings defining how the object should move. |
Motion is a 0x30-byte structure (0x3C in TSSM) used in several asset types ([[PLAT]] and [[BUTN]]) which contains some settings defining how the object should move. |
||
Source code: [https://github.com/bfbbdecomp/bfbb/blob/master/src/Core/x/xEntMotion.h#L66 xEntMotion.h] |
|||
{| class="wikitable" |
{| class="wikitable" |
Revision as of 15:17, 16 September 2022
Basic types
Type | Description |
---|---|
long, int64, S64 | 64-bit signed integer |
ulong, uint64, U64 | 64-bit unsigned integer |
int, int32, S32 | 32-bit signed integer |
uint, uint32, U32 | 32-bit unsigned integer |
short, int16, S16 | 16-bit signed integer |
ushort, uint16, U16 | 16-bit unsigned integer |
byte, int8, S8 | 8-bit signed integer |
ubyte, uint8, U8 | 8-bit unsigned integer |
char | 8-bit unsigned ASCII integer |
float, F32 | IEEE 754 floating point number |
Structs
AssetID
Asset ID is a type derived from uint32 (EvilEngine) or uint64 (GoodEngine). It is considered its own type due to how the game uses Asset IDs to uniquely identify an asset and manage communication between them.
Type | Description |
---|---|
uint | 32-bit unsigned integer |
ulong | 64-bit unsigned integer |
EvilEngine
To calculate the asset ID for the original game's assets, the game runs the BKDR hash algorithm on the asset's name converted to upper case. This is specially important to know when editing RWTX assets; to be able to refer to them from MODL, BSP and JSP assets, the game calculates the hash at runtime and finds the textures based on that.
This is HipHopTool's implementation of the algorithm in C#:
public static uint BKDRHash(string str) { str = str.ToUpper(); uint seed = 131; uint hash = 0; int length = str.Length; if (length > 31) length = 31; for (int i = 0; i < length; i++) hash = (hash * seed) + str[i]; return hash; }
xVec2
xVec2 is a set of 2 floats, which usually represent a 2D vector on the world; it is used mostly for texture coordinates.
Source code: xMath2.h
struct xVec2
{
F32 x;
F32 y;
};
Type | Description |
---|---|
float | X - The X coordinate of this vector |
float | Y - The Y coordinate of this vector |
xVec3
xVec3 is a set of 3 floats, which usually represent a 3D vector on the world, be it position, rotation or scale.
Source code: xVec3.h
struct xVec3
{
F32 x;
F32 y;
F32 z;
};
Type | Description |
---|---|
float | X - The X coordinate of this vector |
float | Y - The Y coordinate of this vector |
float | Z - The Z coordinate of this vector |
xVec4
xVec4 is a set of 4 floats. They can represent a vector in 4D space, and also a color with R, G, B, A components ranging from 0 to 1.
Source code: xMath3.h
struct xVec4
{
F32 x;
F32 y;
F32 z;
F32 w;
};
Type | Description |
---|---|
float | X - The X coordinate of this vector |
float | Y - The Y coordinate of this vector |
float | Z - The Z coordinate of this vector |
float | W - The W coordinate of this vector |
xColor
xColor is a set of 4 bytes, which represent a 32 bit color with red, blue, green and alpha components.
In the source code, xColor is a typedef for iColor_tag, which can be different per platform (usually not though).
Source code: iColor.h
struct iColor_tag
{
uint8 r;
uint8 g;
uint8 b;
uint8 a;
};
Type | Description |
---|---|
byte | R - red (0-255) |
byte | G - green (0-255) |
byte | B - blue (0-255) |
byte | A - alpha (0-255) |
Motion
Motion is a 0x30-byte structure (0x3C in TSSM) used in several asset types (PLAT and BUTN) which contains some settings defining how the object should move.
Source code: xEntMotion.h
Offset | Type | Description |
---|---|---|
0x00 | byte | Type
|
0x01 | byte (bool?) | Use Banking - unknown, always 0 |
0x02 | short | Flags
|
Extend/Retract only | ||
0x04 | Vector3 | Retract Position - Start position |
0x10 | Vector3 | Extend Delta Position - Distance to move from start position |
0x1C | float | Extend Time - Move forward time |
0x20 | float | Extend Wait Time - Wait time after moving forward |
0x24 | float | Retract Time - Move backward time |
0x28 | float | Retract Wait Time - Wait time after moving backward |
0x2C | byte[0x4] | null |
Orbit only | ||
0x04 | Vector3 | Center - Point to move around |
0x10 | float | Width - X scale of orbit |
0x14 | float | Height - Z scale of orbit |
0x18 | float | Period - Time it takes to complete one orbit |
0x1C | byte[0x14] | null |
Spline only | ||
0x04 | int | Unknown - Yes, this field is actually called "unknown" |
0x08 | byte[0x28] | null |
Move Point only | ||
0x04 | unsigned int | Flags - Always 0 |
0x08 | Asset ID | Move Point ID - Move Point to start at |
0x0C | float | Speed - Speed to move at, in units per second |
0x10 | byte[0x20] | null |
Mechanism only (BFBB) | ||
0x04 | byte | Type
All other values default to Rotate only |
0x05 | byte | Movement Loop Mode Flags
|
0x06 | byte | Slide Axis
|
0x07 | byte | Rotate Axis
|
0x08 | float | Slide Distance |
0x0C | float | Slide Time |
0x10 | float | Slide Accel Time - Ease in time |
0x14 | float | Slide Decel Time - Ease out time |
0x18 | float | Rotate Distance - In degrees |
0x1C | float | Rotate Time |
0x20 | float | Rotate Accel Time - Ease in time |
0x24 | float | Rotate Decel Time - Ease out time |
0x28 | float | Return Delay - Wait time after moving forward |
0x2C | float | Post-Return Delay - Wait time after moving backward |
Mechanism only (TSSM) | ||
0x04 | byte | Type
All other values default to Rotate only |
0x05 | byte | Flags
|
0x06 | byte | Slide Axis
|
0x07 | byte | Rotate Axis
|
0x08 | byte[4] | unknown |
0x0C | float | Slide Distance |
0x10 | float | Slide Time |
0x14 | float | Slide Accel Time - Ease in time |
0x18 | float | Slide Decel Time - Ease out time |
0x1C | float | Rotate Distance - In degrees |
0x20 | float | Rotate Time |
0x24 | float | Rotate Accel Time - Ease in time |
0x28 | float | Rotate Decel Time - Ease out time |
0x2C | float | Return Delay - Wait time after moving forward |
0x30 | float | Post-Return Delay - Wait time after moving backward |
0x34 | float | unknown |
0x38 | float | unknown |
Pendulum only | ||
0x04 | byte | Flags |
0x05 | byte | Plane - Unknown |
0x06 | byte[2] | Padding |
0x08 | float | Length - The height of the pivot point |
0x0C | float | Range - The amount (in radians) the pendulum swings on each side |
0x10 | float | Period - The time one full swing takes |
0x14 | float | Phase - Start swing offset (in radians), e.g. 6.28 = 1 full swing |
0x18 | byte[0x18] | null |
None only | ||
0x04 | byte[0x2C] | null |