Packet specification
The packet is designed to be always padded to 4 bytes. All values are
little endian encoded. All packets have a 4 byte header representing an
integer, specifying the type of data:
Type |
Value |
0 |
null |
1 |
bool |
2 |
integer |
3 |
float |
4 |
string |
5 |
vector2 |
6 |
rect2 |
7 |
vector3 |
8 |
matrix32 |
9 |
plane |
10 |
quaternion |
11 |
aabb (rect3) |
12 |
matrix3x3 |
13 |
transform (matrix 4x3) |
14 |
color |
15 |
image |
16 |
node path |
17 |
rid (unsupported) |
18 |
object (unsupported) |
19 |
input event |
20 |
dictionary |
21 |
array |
22 |
byte array |
23 |
int array |
24 |
float array |
25 |
string array |
26 |
vector2 array |
27 |
vector3 array |
28 |
color array |
Following this is the actual packet contents, which varies for each type
of packet:
0: null
1: bool
Offset |
Len |
Type |
Description |
4 |
4 |
Integer |
0 for False, 1 for True |
2: integer
Offset |
Len |
Type |
Description |
4 |
4 |
Integer |
Signed, 32-Bit Integer |
3: float
Offset |
Len |
Type |
Description |
4 |
4 |
Float |
IEE 754 32-Bits Float |
4: string
Offset |
Len |
Type |
Description |
4 |
4 |
Integer |
String Length (in Bytes) |
8 |
X |
Bytes |
UTF-8 Encoded String |
This field is padded to 4 bytes.
5: vector2
Offset |
Len |
Type |
Description |
4 |
4 |
Float |
X Coordinate |
8 |
4 |
Float |
Y Coordinate |
6: rect2
Offset |
Len |
Type |
Description |
4 |
4 |
Float |
X Coordinate |
8 |
4 |
Float |
Y Coordinate |
12 |
4 |
Float |
X Size |
16 |
4 |
Float |
Y Size |
7: vector3
Offset |
Len |
Type |
Description |
4 |
4 |
Float |
X Coordinate |
8 |
4 |
Float |
Y Coordinate |
12 |
4 |
Float |
Z Coordinate |
8: matrix32
Offset |
Len |
Type |
Description |
4 |
4 |
Float |
[0][0] |
8 |
4 |
Float |
[0][1] |
12 |
4 |
Float |
[1][0] |
16 |
4 |
Float |
[1][1] |
20 |
4 |
Float |
[2][0] |
24 |
4 |
Float |
[2][1] |
9: plane
Offset |
Len |
Type |
Description |
4 |
4 |
Float |
Normal X |
8 |
4 |
Float |
Normal Y |
12 |
4 |
Float |
Normal Z |
16 |
4 |
Float |
Distance |
10: quaternion
Offset |
Len |
Type |
Description |
4 |
4 |
Float |
Imaginary X |
8 |
4 |
Float |
Imaginary Y |
12 |
4 |
Float |
Imaginary Z |
16 |
4 |
Float |
Real W |
11: aabb (rect3)
Offset |
Len |
Type |
Description |
4 |
4 |
Float |
X Coordinate |
8 |
4 |
Float |
Y Coordinate |
12 |
4 |
Float |
Z Coordinate |
16 |
4 |
Float |
X Size |
20 |
4 |
Float |
Y Size |
24 |
4 |
Float |
Z Size |
12: matrix3x3
Offset |
Len |
Type |
Description |
4 |
4 |
Float |
[0][0] |
8 |
4 |
Float |
[0][1] |
12 |
4 |
Float |
[0][2] |
16 |
4 |
Float |
[1][0] |
20 |
4 |
Float |
[1][1] |
24 |
4 |
Float |
[1][2] |
28 |
4 |
Float |
[2][0] |
32 |
4 |
Float |
[2][1] |
36 |
4 |
Float |
[2][2] |
14: color
Offset |
Len |
Type |
Description |
4 |
4 |
Float |
Red (0..1) |
8 |
4 |
Float |
Green (0..1) |
12 |
4 |
Float |
Blue (0..1) |
16 |
4 |
Float |
Alpha (0..1) |
15: image
Offset |
Len |
Type |
Description |
4 |
4 |
Integer |
Format (see FORMAT_* in “Image”:class_image |
8 |
4 |
Integer |
Mip-Maps (0 means no mip-maps). |
12 |
4 |
Integer |
Width (Pixels) |
16 |
4 |
Integer |
Height (Pixels) |
20 |
4 |
Integer |
Data Length |
24..24+DataLength |
1 |
Byte |
Image Data |
This field is padded to 4 bytes.
16: node path
Offset |
Len |
Type |
Description |
4 |
4 |
Integer |
String Length, or New Format (val&0x80000000!=0 and NameCount=val&0x7FFFFFFF) |
17: rid (unsupported)
18: object (unsupported)
19: input event
20: dictionary
Offset |
Len |
Type |
Description |
4 |
4 |
Integer |
val&0x7FFFFFFF = elements, val&0x80000000 = shared (bool) |
Then what follows is, for amount of “elements”, pairs of key and value,
one after the other, using this same format.
21: array
Offset |
Len |
Type |
Description |
4 |
4 |
Integer |
val&0x7FFFFFFF = elements, val&0x80000000 = shared (bool) |
Then what follows is, for amount of “elements”, values one after the
other, using this same format.
22: byte array
Offset |
Len |
Type |
Description |
4 |
4 |
Integer |
Array Length (Bytes) |
8..8+length |
1 |
Byte |
Byte (0..255) |
The array data is padded to 4 bytes.
23: int array
Offset |
Len |
Type |
Description |
4 |
4 |
Integer |
Array Length (Integers) |
8..8+length*4 |
4 |
Integer |
32 Bits Signed Integer |
24: float array
Offset |
Len |
Type |
Description |
4 |
4 |
Integer |
Array Length (Floats) |
8..8+length*4 |
4 |
Integer |
32 Bits IEE 754 Float |
25: string array
Offset |
Len |
Type |
Description |
4 |
4 |
Integer |
Array Length (Strings) |
For each String:
Offset |
Len |
Type |
Description |
X+0 |
4 |
Integer |
String Length |
X+4 |
X |
Bytes |
UTF-8 Encoded String |
Every string is is padded to 4 bytes.
26: vector2 array
Offset |
Len |
Type |
Description |
4 |
4 |
Integer |
Array Length |
8..8+length*8 |
4 |
Float |
X Coordinate |
8..12+length*8 |
4 |
Float |
Y Coordinate |
27: vector3 array
Offset |
Len |
Type |
Description |
4 |
4 |
Integer |
Array Length |
8..8+length*12 |
4 |
Float |
X Coordinate |
8..12+length*12 |
4 |
Float |
Y Coordinate |
8..16+length*12 |
4 |
Float |
Z Coordinate |
28: color array
Offset |
Len |
Type |
Description |
4 |
4 |
Integer |
Array Length |
8..8+length*16 |
4 |
Float |
Red (0..1) |
8..12+length*16 |
4 |
Float |
Green (0..1) |
8..16+length*16 |
4 |
Float |
Blue (0..1) |
8..20+length*16 |
4 |
Float |
Alpha (0..1) |