Data Types
Basic types
Type | Description |
---|---|
int, int32 | 32-bit signed integer |
uint, uint32 | 32-bit unsigned integer |
short, int16 | 16-bit signed integer |
ushort, uint16 | 16-bit unsigned integer |
byte | 8-bit signed integer |
char | 8-bit unsigned ASCII integer |
float | IEEE 754 floating point number |
Structs
AssetID
Asset ID is a type derived from uint32 (unsigned integer). 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 |
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; }
Vector2
Vector2 is a set of 2 floats, which usually represent a 2D vector on the world; it is used mostly for texture coordinates.
Type | Description |
---|---|
float | X - The X coordinate of this vector |
float | Y - The Y coordinate of this vector |
Vector3
Vector3 is a set of 3 floats, which usually represent a 3D vector on the world, be it position, rotation or scale.
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 |
Vector4
Vector4 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.
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 |
Color
Color is a set of 4 bytes, which represent a 32 bit color with red, blue, green and alpha components.
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 used in several asset types (PLAT and BUTN) which contains some settings defining how the object should move.
Offset | Type | Description |
---|---|---|
0x00 | byte | Type
|
0x01 | byte (bool?) | Use Banking - unknown |
0x02 | short | Flags |
Extend/Retract only | ||
0x04 | Vector3 | Retract Position - Start position? |
0x10 | Vector3 | Extend Delta Position - End position (offset)? |
0x1C | float | Extend Time - Move forward time? |
0x20 | float | Extend Wait Time - Wait time after moving forward? |
0x24 | float | Retract Time - Move back time? |
0x28 | float | Retract Wait Time - Wait time after moving back? |
0x2C | byte[0x4] | null |
Orbit only | ||
0x04 | Vector3 | Center - Point to rotate around |
0x08 | float | Width |
0x0C | float | Height |
0x10 | float | Period |
0x14 | byte[0x1C] | null |
Spline only | ||
0x04 | int | Unknown - Yes, this field is actually called "unknown" |
0x08 | byte[0x28] | null |
Move Point only | ||
0x04 | unsigned int | Flags |
0x08 | Asset ID | Move Point ID |
0x0C | float | Speed |
0x10 | byte[0x20] | null |
Mechanism only | ||
0x04 | byte | Type - Movement Mode:
To do: investigate more values |
0x05 | byte | Flags - Movement Loop Type:
To do: investigate more values and difference between 2 and 3 |
0x06 | byte | Slide Axis
To do: investigate more values and see how some PLATs move in more than one direction |
0x07 | byte | Rotate Axis
To do: investigate more values and see how some PLATs rotate in more than one direction |
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 | Retract Delay - End wait time |
0x2C | float | Post-Retract Delay - Start wait time |
Pendulum only | ||
0x04 | byte | Flags |
0x05 | byte | Plane - Axis to swing on? |
0x06 | byte[2] | Padding |
0x08 | float | Length |
0x0C | float | Range |
0x10 | float | Period |
0x14 | float | Phase |
0x18 | byte[0x18] | null |