Data Types: Difference between revisions

From Heavy Iron Modding
Content added Content deleted
Battlepedia>Seil
(→‎Motion: TSSM mechanism)
Battlepedia>Seil
Line 132: Line 132:
* 4 - Mechanism
* 4 - Mechanism
* 5 - Pendulum?
* 5 - Pendulum?
* 6 - None? (no movement)
|-
|-
| 0x01 || byte (bool?) || '''Use Banking''' - unknown
| 0x01 || byte (bool?) || '''Use Banking''' - unknown
Line 308: Line 309:
|-
|-
| 0x18 || byte[0x18] || null
| 0x18 || byte[0x18] || null
|-
! colspan="3" | None only
|-
| 0x04 || byte[0x2C] || null
|}
|}



Revision as of 03:27, 1 May 2019

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 (0x3C in TSSM) used in several asset types (PLAT and BUTN) which contains some settings defining how the object should move.

Offset Type Description
0x00 byte Type
  • 0 - Extend/Retract (move forward/back?)
  • 1 - Orbit (rotate around point)
  • 2 - Spline (unused?)
  • 3 - Move Point
  • 4 - Mechanism
  • 5 - Pendulum?
  • 6 - None? (no movement)
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 (BFBB)
0x04 byte Type - Movement Mode:
  • 0 - Move only
  • 1 - Rotate only
  • 2 - Move and rotate at the same time
  • 3 - Move, then rotate, then wait
  • 4 - Move, then wait, then rotate
  • 5 - Faster rotate only

To do: investigate more values

0x05 byte Flags - Movement Loop Type:
  • 0 - Single direction (never return)
  • 1 - Move back and forth
  • 2 - Move on event
  • 3 - Move on event

To do: investigate more values and difference between 2 and 3

0x06 byte Slide Axis
  • 0 - X
  • 1 - Y
  • 2 - Z
  • 3 - Z?

To do: investigate more values and see how some PLATs move in more than one direction

0x07 byte Rotate Axis
  • 0 - X
  • 1 - Y
  • 2 - Z
  • 3 - Z?

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
Mechanism only (TSSM)
0x04 byte Type - Movement Mode:
  • 0 - Move only
  • 1 - Rotate only
  • 2 - Move and rotate at the same time
  • 3 - Move, then rotate, then wait
  • 4 - Move, then wait, then rotate
  • 5 - Faster rotate only

To do: investigate more values

0x05 byte Flags - Movement Loop Type:
  • 0 - Single direction (never return)
  • 1 - Move back and forth
  • 2 - Move on event
  • 3 - Move on event

To do: investigate more values and difference between 2 and 3

0x06 byte Slide Axis
  • 0 - X
  • 1 - Y
  • 2 - Z
  • 3 - Z?

To do: investigate more values and see how some PLATs move in more than one direction

0x07 byte Rotate Axis
  • 0 - X
  • 1 - Y
  • 2 - Z
  • 3 - Z?

To do: investigate more values and see how some PLATs rotate in more than one direction

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 Retract Delay - End wait time
0x30 float Post-Retract Delay - Start wait time
0x34 float unknown
0x38 float unknown
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
None only
0x04 byte[0x2C] null