EvilEngine/UIM: Difference between revisions

From Heavy Iron Modding
Content added Content deleted
No edit summary
Line 6: Line 6:


==Format==
==Format==
A UI Motion asset begins with a 0x18-byte header which extends from [[Base|xBaseAsset]]:

<source lang=cpp>
struct zUIMotionAsset : xBaseAsset
{
uint8 cmdCount;
uint8 in;
uint8 pad[2];
uint32 cmdSize;
float totalTime;
float loopTime;
};
</source>


{| class="wikitable"
{| class="wikitable"
! Offset !! Type !! Variable !! Description
! Offset !! Type !! Variable !! Description
|-
|-
| 0x08 || char || '''cmdcount''' ||
| 0x08 || uint8 || '''cmdCount''' || Number of commands after the header
|-
|-
| 0x09 || char || '''in''' ||
| 0x09 || uint8 || '''in''' ||
|-
|-
| 0x0A || char[2] || '''pad[2]''' ||
| 0x0A || uint8[2] || '''pad''' || Padding
|-
|-
| 0x0C || int || '''cmdSize''' ||
| 0x0C || uint32 || '''cmdSize''' ||
|-
|-
| 0x10 || float || '''totalTime''' ||
| 0x10 || float || '''totalTime''' ||
|-
|-
| 0x14 || float || '''loopTime''' ||
| 0x14 || float || '''loopTime''' ||
|}

Following the header is a list of Commands (with a length of '''cmdCount'''). The format of each command is explained below.

===Commands===
There are 8 types of Commands defined:

* 0 - Move
* 1 - Scale
* 2 - Rotate
* 3 - Opacity
* 4 - AbsoluteScale
* 5 - Brightness
* 6 - Color
* 7 - UVScroll

Each command type has an 0x18-byte header:

<source lang=cpp>
struct zUIMotionCmdAsset
{
uint32 type;
float startTime;
float endTime;
float accelTime;
float decelTime;
uint8 enabled;
// 3 bytes of padding
};
</source>

{| class="wikitable"
! Offset !! Type !! Variable !! Description
|-
| 0x00 || uint32 || '''type''' || Type ID (see above)
|-
| 0x04 || float || '''startTime''' ||
|-
| 0x08 || float || '''endTime''' ||
|-
| 0x0C || float || '''accelTime''' ||
|-
| 0x10 || float || '''decelTime''' ||
|-
| 0x14 || uint8 || '''enabled''' ||
|-
| 0x15 || - || - || 3 bytes of padding
|}

====Move (Type 0)====
Size = 0x20 bytes
<source lang=cpp>
struct zUIMotionCmdMove : zUIMotionCmdAsset
{
float distX;
float distY;
};
</source>

{| class="wikitable"
! Offset !! Type !! Variable !! Description
|-
| 0x18 || float || '''distX''' ||
|-
| 0x1C || float || '''distY''' ||
|}

====Scale (Type 1)====
Size = 0x2C bytes
<source lang=cpp>
struct zUIMotionCmdScale : zUIMotionCmdAsset
{
float amountX;
float amountY;
uint8 centerPivot;
// 3 bytes of padding
float centerOffsetX;
float centerOffsetY;
};
</source>

{| class="wikitable"
! Offset !! Type !! Variable !! Description
|-
| 0x18 || float || '''amountX''' ||
|-
| 0x1C || float || '''amountY''' ||
|-
| 0x20 || uint8 || '''centerPivot''' ||
|-
| 0x21 || - || - || 3 bytes of padding
|-
| 0x24 || float || '''centerOffsetX''' ||
|-
| 0x28 || float || '''centerOffsetY''' ||
|}

====Rotate (Type 2)====
Size = 0x24 bytes
<source lang=cpp>
struct zUIMotionCmdRotate : zUIMotionCmdAsset
{
float rotation;
float centerOffsetX;
float centerOffsetY;
};
</source>

{| class="wikitable"
! Offset !! Type !! Variable !! Description
|-
| 0x18 || float || '''rotation''' ||
|-
| 0x1C || float || '''centerOffsetX''' ||
|-
| 0x20 || float || '''centerOffsetY''' ||
|}

====Opacity (Type 3)====
Size = 0x1C bytes
<source lang=cpp>
struct zUIMotionCmdOpacity : zUIMotionCmdAsset
{
uint8 startOpacity;
uint8 endOpacity;
// 2 bytes of padding
};
</source>

{| class="wikitable"
! Offset !! Type !! Variable !! Description
|-
| 0x18 || uint8 || '''startOpacity''' ||
|-
| 0x19 || uint8 || '''endOpacity''' ||
|-
| 0x1A || - || - || 2 bytes of padding
|}

====AbsoluteScale (Type 4)====
Size = 0x2C bytes
<source lang=cpp>
struct zUIMotionCmdAbsoluteScale : zUIMotionCmdAsset
{
float startX;
float startY;
float endX;
float endY;
uint8 centerPivot;
uint8 textScale;
// 2 bytes of padding
};
</source>

{| class="wikitable"
! Offset !! Type !! Variable !! Description
|-
| 0x18 || float || '''startX''' ||
|-
| 0x1C || float || '''startY''' ||
|-
| 0x20 || float || '''endX''' ||
|-
| 0x24 || float || '''endY''' ||
|-
| 0x28 || uint8 || '''centerPivot''' ||
|-
| 0x29 || uint8 || '''textScale''' ||
|-
| 0x2A || - || - || 2 bytes of padding
|}

====Brightness (Type 5)====
Size = 0x1C bytes
<source lang=cpp>
struct zUIMotionCmdBrightness : zUIMotionCmdAsset
{
uint8 startBrightness;
uint8 endBrightness;
// 2 bytes of padding
};
</source>

{| class="wikitable"
! Offset !! Type !! Variable !! Description
|-
| 0x18 || uint8 || '''startBrightness''' ||
|-
| 0x19 || uint8 || '''endBrightness''' ||
|-
| 0x1A || - || - || 2 bytes of padding
|}

====Color (Type 6)====
Size = 0x20 bytes
<source lang=cpp>
struct zUIMotionCmdColor : zUIMotionCmdAsset
{
uint8 startRed;
uint8 startGreen;
uint8 startBlue;
uint8 endRed;
uint8 endGreen;
uint8 endBlue;
// 2 bytes of padding
};
</source>

{| class="wikitable"
! Offset !! Type !! Variable !! Description
|-
| 0x18 || uint8 || '''startRed''' ||
|-
| 0x19 || uint8 || '''startGreen''' ||
|-
| 0x1A || uint8 || '''startBlue''' ||
|-
| 0x1B || uint8 || '''endRed''' ||
|-
| 0x1C || uint8 || '''endGreen''' ||
|-
| 0x1D || uint8 || '''endBlue''' ||
|-
| 0x1E || - || - || 2 bytes of padding
|}

====UVScroll (Type 7)====
Size = 0x20 bytes
<source lang=cpp>
struct zUIMotionCmdUVScroll : zUIMotionCmdAsset
{
float amountU;
float amountV;
};
</source>

{| class="wikitable"
! Offset !! Type !! Variable !! Description
|-
| 0x18 || float || '''amountU''' ||
|-
| 0x1C || float || '''amountV''' ||
|}
|}



Revision as of 03:39, 25 May 2021

UIM
UI Motion
TypeBase
Games usedThe Incredibles


Format

A UI Motion asset begins with a 0x18-byte header which extends from xBaseAsset:

struct zUIMotionAsset : xBaseAsset
{
	uint8 cmdCount;
	uint8 in;
	uint8 pad[2];
	uint32 cmdSize;
	float totalTime;
	float loopTime;
};
Offset Type Variable Description
0x08 uint8 cmdCount Number of commands after the header
0x09 uint8 in
0x0A uint8[2] pad Padding
0x0C uint32 cmdSize
0x10 float totalTime
0x14 float loopTime

Following the header is a list of Commands (with a length of cmdCount). The format of each command is explained below.

Commands

There are 8 types of Commands defined:

  • 0 - Move
  • 1 - Scale
  • 2 - Rotate
  • 3 - Opacity
  • 4 - AbsoluteScale
  • 5 - Brightness
  • 6 - Color
  • 7 - UVScroll

Each command type has an 0x18-byte header:

struct zUIMotionCmdAsset
{
	uint32 type;
	float startTime;
	float endTime;
	float accelTime;
	float decelTime;
	uint8 enabled;
	// 3 bytes of padding
};
Offset Type Variable Description
0x00 uint32 type Type ID (see above)
0x04 float startTime
0x08 float endTime
0x0C float accelTime
0x10 float decelTime
0x14 uint8 enabled
0x15 - - 3 bytes of padding

Move (Type 0)

Size = 0x20 bytes

struct zUIMotionCmdMove : zUIMotionCmdAsset
{
	float distX;
	float distY;
};
Offset Type Variable Description
0x18 float distX
0x1C float distY

Scale (Type 1)

Size = 0x2C bytes

struct zUIMotionCmdScale : zUIMotionCmdAsset
{
	float amountX;
	float amountY;
	uint8 centerPivot;
	// 3 bytes of padding
	float centerOffsetX;
	float centerOffsetY;
};
Offset Type Variable Description
0x18 float amountX
0x1C float amountY
0x20 uint8 centerPivot
0x21 - - 3 bytes of padding
0x24 float centerOffsetX
0x28 float centerOffsetY

Rotate (Type 2)

Size = 0x24 bytes

struct zUIMotionCmdRotate : zUIMotionCmdAsset
{
	float rotation;
	float centerOffsetX;
	float centerOffsetY;
};
Offset Type Variable Description
0x18 float rotation
0x1C float centerOffsetX
0x20 float centerOffsetY

Opacity (Type 3)

Size = 0x1C bytes

struct zUIMotionCmdOpacity : zUIMotionCmdAsset
{
	uint8 startOpacity;
	uint8 endOpacity;
	// 2 bytes of padding
};
Offset Type Variable Description
0x18 uint8 startOpacity
0x19 uint8 endOpacity
0x1A - - 2 bytes of padding

AbsoluteScale (Type 4)

Size = 0x2C bytes

struct zUIMotionCmdAbsoluteScale : zUIMotionCmdAsset
{
	float startX;
	float startY;
	float endX;
	float endY;
	uint8 centerPivot;
	uint8 textScale;
	// 2 bytes of padding
};
Offset Type Variable Description
0x18 float startX
0x1C float startY
0x20 float endX
0x24 float endY
0x28 uint8 centerPivot
0x29 uint8 textScale
0x2A - - 2 bytes of padding

Brightness (Type 5)

Size = 0x1C bytes

struct zUIMotionCmdBrightness : zUIMotionCmdAsset
{
	uint8 startBrightness;
	uint8 endBrightness;
	// 2 bytes of padding
};
Offset Type Variable Description
0x18 uint8 startBrightness
0x19 uint8 endBrightness
0x1A - - 2 bytes of padding

Color (Type 6)

Size = 0x20 bytes

struct zUIMotionCmdColor : zUIMotionCmdAsset
{
	uint8 startRed;
	uint8 startGreen;
	uint8 startBlue;
	uint8 endRed;
	uint8 endGreen;
	uint8 endBlue;
	// 2 bytes of padding
};
Offset Type Variable Description
0x18 uint8 startRed
0x19 uint8 startGreen
0x1A uint8 startBlue
0x1B uint8 endRed
0x1C uint8 endGreen
0x1D uint8 endBlue
0x1E - - 2 bytes of padding

UVScroll (Type 7)

Size = 0x20 bytes

struct zUIMotionCmdUVScroll : zUIMotionCmdAsset
{
	float amountU;
	float amountV;
};
Offset Type Variable Description
0x18 float amountU
0x1C float amountV