Movement
A unit is moved by a path: a run of points on the ground plane, the first of which is where the unit is and the last where it is going.
Coordinates
A path names one axis of the ground plane and then the other. The height of a point is not carried, and a receiving end takes it from the ground beneath.
Movement and MovementAtSpeed are compact: a path is a run of integer
points, each stated against the one before it, while positions elsewhere are
world floats covering a far larger range (see Space). The two are
related by an origin and a step:
encoded = truncate_toward_zero((world - origin) / 2)
world = origin + 2 * encoded
A path resolves a position to two world units, rounded toward the origin.
Other shapes
MovementAtSpeed carries the same points as Movement with the terms of the
travel stated before them, and WaypointGroupAtSpeed is what carries it. Other
messages carry their points as world floats, and their definitions say so. The
message carrying a movement says which shape it holds.
In 1.0.0.130–1.0.0.140
A unit coming into sight while standing carries its place and facing in
EnterSightinstead.
Resolving a path
A path is read into points by taking the first as it stands and then, for each point after it, taking each coordinate either as it stands or by adding the step to the coordinate of the point before. The point before means as that point resolved, not what the wire carried for it, which matters wherever a coordinate stated afresh is followed by one stated as a step.
conformance/vectors/algorithm records the resolution of the paths the
movement vectors carry. They give decoded fields and the points they resolve
to.
What a group can carry
A sending end MUST NOT send a movement with no points; a receiving end refuses it.
A client reads nothing after a refused movement in its group, and still answers the group.
In 1.0.0.130–1.0.0.140
A client does not read the points of a movement whose unit it does not hold, and so misreads every later movement in the group. A server MUST name in a group only units the client holds.
The origin
The origin is the midpoint of the bounds a map’s navigation data covers, truncated to a whole number on each axis. Nothing on the wire carries it. Both ends hold it before a match begins, and an end holding a different one misplaces every position it reads.
A server MUST take the origin from the map it is hosting. A server MUST NOT derive the origin from anything a client sent.
Space gives the origin of each map, keyed by the map number a
server sends in VersionSync. A server hosting a map the table leaves out
takes its origin from that map’s navigation data.
Relocating rather than walking
A client answers each group with one WaypointAck, listing every unit in it
that carried a token, with an empty list where none did. A server MAY ignore
it.
A movement whose flag says so carries a token beside the unit (see
Movement). A receiving end remembers one token for each unit, beginning at
zero.
A token unlike the remembered one puts the unit where the path begins rather than walking it there, but only where the unit is far enough away to warrant it: either ground axis differing by more than fifty world units, taken on its own. Fifty exactly does not, and height is not weighed.
A token the receiving end already holds changes nothing, and neither does an unfamiliar one arriving while the unit is near enough. In both the path is followed and the remembered token kept, so a token is taken up only once it has moved something.
A client leaves the flag clear in what it sends, so a token travels only from a server.
What a client asks for and what a server answers
An order from a client is a request: what a unit does is whatever the server sends back.
A client does not move its own champion on a right click by itself: the champion moves only along a path a server sends.
A server moves the champion by answering the MoveOrder with a
WaypointGroup, and the client returns that group’s syncId in a
WaypointAck (see Ordering).
A client sends the path it would take, with its destination beside it in
world floats. A WaypointGroup carrying that path back unchanged moves the
champion along it.
In 1.0.0.140
A server MUST send the
WaypointGroupthat answers aMoveOrderon the transient channel.
Marking the ground
NavigationFlags marks the ground within circles.
In 1.0.0.140
A server MUST NOT send
NavigationFlags: a client fails on the first one a match brings.
Messages
Each message of this system in this book, with each layout it has across the book’s patches and every note its definition carries. A layout is the message’s body, after the header its channel’s family puts in front (see Messages).
WaypointGroupAtSpeed
What a server sends to move units along paths of its own choosing, stating how each one travels rather than leaving it to the receiving end. It is what carries a unit thrown, dragged, or carried along by something other than its own walking. The header names no object: it carries zero.
In every range of this book
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.130–1.0.0.131 | 103 |
| 1.0.0.132–1.0.0.137 | 104 |
| 1.0.0.138–1.0.0.140 | 106 |
| 1.0.0.141–1.0.0.143 | 106 |
| 1.0.0.144–1.0.0.149 | 100 |
| 1.0.0.150–3.1.0.0 | 97 |
| Field | Type | What it is |
|---|---|---|
| syncId | u32 | Names this statement of movement. |
| movementCount | u16 | How many units follow. A client reads it as signed, so a count above 32767 carries none. |
| movements | count in movementCount × MovementAtSpeed | What each unit is told to do. |
WaypointAck
What a client sends once it has taken in a group of movements, naming which group. The header names no object: it carries zero.
In every range of this book
Carried on requests, sent by the client, unsequenced, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.130–1.0.0.131 | 122 |
| 1.0.0.132–1.0.0.137 | 123 |
| 1.0.0.138–1.0.0.143 | 125 |
| 1.0.0.144–1.0.0.149 | 119 |
| 1.0.0.150–3.1.0.0 | 116 |
It lists the units the group asked it to relocate.
| Field | Type | What it is |
|---|---|---|
| syncId | u32 | Which group is being acknowledged, as the group named itself. |
| relocationCount | u8 | How many relocations follow. Answering WaypointGroup a client counts them; answering a path for one unit it sends only syncId and this byte, unwritten, on the transient channel, and no relocations, so a server reads nothing in it there. |
| relocations | count in relocationCount × record | |
| relocations[].unit | u32 | The unit the token belonged to. |
| relocations[].token | u8 | The token that arrived with it. |
Vectors (5)
one-on-1-0-0-131, one-on-1-0-0-136, one-on-1-0-0-143, one-on-1-0-0-149, one-on-1-0-0-154
MoveOrder
What a client sends to tell a server what it wants a unit to do. The header names the sender’s champion.
In 1.0.0.130–1.0.0.137
Carried on requests, sent by the client, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.130–1.0.0.131 | 117 |
| 1.0.0.132–1.0.0.137 | 118 |
The path it carries is what the client would take; where the unit actually goes is whatever the server answers with.
| Field | Type | Present when | What it is |
|---|---|---|---|
| kind | u8 | What is being asked for. Values: 2 moveToPosition, 3 attack, 10 stop. | |
| targetX | f32 | Where the order points, along one ground axis. Carried in world units rather than in the units a path uses. | |
| targetY | f32 | The height of the place ordered. | |
| targetZ | f32 | Where the order points, along the other. | |
| target | u32 | The network object the order is aimed at, or zero where it is aimed at open ground. | |
| movement | record | ||
| movement.header | 4-byte bits | ||
| movement.header.hasTeleportToken | bit 0 | Set where a token sits beside the unit. A client sends it clear, so a token travels only from a server. | |
| movement.header.unused | bit 1 to 15 | Unused; a client reads nothing here. | |
| movement.header.pointCount | bit 16 to 22 | How many points the path holds. A client sends none for an order that takes no path, and then only the unit follows it. | |
| movement.header.unusedHigh | bit 23 to 31 | Unused; a client reads nothing here. | |
| movement.path | record | Everything the movement carries beyond its first byte. | |
| movement.path.unit | u32 | The unit the path belongs to. | |
| movement.path.teleportToken | u8 | header.hasTeleportToken set | Tells one relocation from another. Movement says what a receiving end does with it. |
| movement.path.flags | bits, count in header.pointCount minus 1 | One pair for each point after the first, in the order the points follow. Pairs run on from the low bits of the first byte, and the run reaches to the byte holding the last pair. The bits past it are clear. | |
| movement.path.flags.xIsStep | bit 0 | Set where this point states its first coordinate as a step. | |
| movement.path.flags.zIsStep | bit 1 | Set where this point states its second coordinate as a step. | |
| movement.path.firstX | i16 | header.pointCount set | The first point, along one ground axis, in the units Movement gives. |
| movement.path.firstZ | i16 | header.pointCount set | The first point, along the other. |
| movement.path.steps | count in header.pointCount minus 1 × record | ||
| movement.path.steps[].xStep | i8 | flags[step].xIsStep set | Added to the first coordinate of the point before, as that point resolved. |
| movement.path.steps[].xWhole | i16 | flags[step].xIsStep = 0 | The first coordinate, stated without reference to the point before. |
| movement.path.steps[].zStep | i8 | flags[step].zIsStep set | Added to the second coordinate of the point before, as that point resolved. |
| movement.path.steps[].zWhole | i16 | flags[step].zIsStep = 0 | The second coordinate, stated without reference to the point before. |
In 1.0.0.138–1.0.0.140
Command 120 on requests, sent by the client, reliable.
The path it carries is what the client would take; where the unit actually goes is whatever the server answers with.
| Field | Type | Present when | What it is |
|---|---|---|---|
| kind | u8 | What is being asked for. Values: 2 moveToPosition, 3 attack, 10 stop. | |
| targetX | f32 | Where the order points, along one ground axis. Carried in world units rather than in the units a path uses. | |
| targetZ | f32 | Where the order points, along the other. | |
| target | u32 | The network object the order is aimed at, or zero where it is aimed at open ground. | |
| movement | record | ||
| movement.header | 4-byte bits | ||
| movement.header.hasTeleportToken | bit 0 | Set where a token sits beside the unit. A client sends it clear, so a token travels only from a server. | |
| movement.header.unused | bit 1 to 15 | A client sends whatever it held in these bits; they carry no meaning, and a server ignores them. | |
| movement.header.pointCount | bit 16 to 22 | How many points the path holds. A client sends none for an order that takes no path, and then only the unit follows it. | |
| movement.header.unusedHigh | bit 23 to 31 | A client sends whatever it held in these bits; they carry no meaning, and a server ignores them. | |
| movement.path | record | Everything the movement carries beyond its first four bytes. | |
| movement.path.unit | u32 | The unit the path belongs to. | |
| movement.path.teleportToken | u8 | header.hasTeleportToken set | Tells one relocation from another. Movement says what a receiving end does with it. |
| movement.path.flags | bits, count in header.pointCount minus 1 | One pair for each point after the first, in the order the points follow. Pairs run on from the low bits of the first byte, and the run reaches to the byte holding the last pair. The bits past it are clear. | |
| movement.path.flags.xIsStep | bit 0 | Set where this point states its first coordinate as a step. | |
| movement.path.flags.zIsStep | bit 1 | Set where this point states its second coordinate as a step. | |
| movement.path.firstX | i16 | header.pointCount set | The first point, along one ground axis, in the units Movement gives. |
| movement.path.firstZ | i16 | header.pointCount set | The first point, along the other. |
| movement.path.steps | count in header.pointCount minus 1 × record | ||
| movement.path.steps[].xStep | i8 | flags[step].xIsStep set | Added to the first coordinate of the point before, as that point resolved. |
| movement.path.steps[].xWhole | i16 | flags[step].xIsStep = 0 | The first coordinate, stated without reference to the point before. |
| movement.path.steps[].zStep | i8 | flags[step].zIsStep set | Added to the second coordinate of the point before, as that point resolved. |
| movement.path.steps[].zWhole | i16 | flags[step].zIsStep = 0 | The second coordinate, stated without reference to the point before. |
In 1.0.0.141–3.1.0.0
Carried on requests, sent by the client, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.141–1.0.0.143 | 120 |
| 1.0.0.144–1.0.0.149 | 114 |
| 1.0.0.150–3.1.0.0 | 111 |
The path it carries is what the client would take; where the unit actually goes is whatever the server answers with.
| Field | Type | What it is |
|---|---|---|
| kind | u8 | What is being asked for. Values: 2 moveToPosition, 3 attack, 10 stop. |
| targetX | f32 | Where the order points, along one ground axis. Carried in world units rather than in the units a path uses. |
| targetZ | f32 | Where the order points, along the other. |
| target | u32 | The network object the order is aimed at, or zero where it is aimed at open ground. |
| movement | Movement |
WaypointGroup
What a server sends to move units. It carries a number a client returns to say it has taken the group in. The header carries zero or names the object this is about, and a client accepts either.
In every range of this book
Carried on transient, sent by the server, unreliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.130–1.0.0.131 | 100 |
| 1.0.0.132–1.0.0.137 | 101 |
| 1.0.0.138–1.0.0.140 | 103 |
| 1.0.0.141–1.0.0.143 | 103 |
| 1.0.0.144–1.0.0.149 | 97 |
| 1.0.0.150–3.1.0.0 | 94 |
| Field | Type | What it is |
|---|---|---|
| syncId | u32 | Names this group. A client returns it to say the group arrived. |
| movementCount | u16 | How many units the group moves. A client reads it as signed, so a count above 32767 carries none. |
| movements | count in movementCount × Movement |
NavigationFlags
What a server sends to mark the ground within circles, in place of the circles it marked before: each circle’s flags apply to the ground within it. The header carries zero.
In every range of this book
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.130–1.0.0.131 | 71 |
| 1.0.0.132–1.0.0.143 | 72 |
| 1.0.0.144–1.0.0.149 | 67 |
| 1.0.0.150–3.1.0.0 | 64 |
A client fails on the first of these in a match: it stops, marking no circle and sending no answer.
| Field | Type | What it is |
|---|---|---|
| count | u16 | The count of circles that follow. |
| syncId | i32 | A number naming this marking. |
| circles | count in count × record | The circles. |
| circles[].x | f32 | The circle’s centre, along one ground axis, in world units. |
| circles[].z | f32 | The circle’s centre, along the other ground axis, in world units. |
| circles[].radius | f32 | Its radius, in world units. A circle of radius 1000 or more marks nothing. |
| circles[].flags | u32 | The flags to add to each cell. Only the low 16 bits take effect. |
Vectors (3)
FaceDirection
What a server sends to turn a unit to face a direction. The header names the unit acting.
In 1.0.0.130–1.0.0.135
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.130–1.0.0.131 | 83 |
| 1.0.0.132–1.0.0.135 | 84 |
| Field | Type | What it is |
|---|---|---|
| towardX | f32 | The direction faced, along one ground axis. |
| towardY | f32 | The direction faced, in height. |
| towardZ | f32 | The direction faced, along the other ground axis. |
Vectors (2)
In 1.0.0.136–1.0.0.137
Command 84 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| towardX | f32 | The direction faced, along one ground axis. |
| towardY | f32 | The direction faced, in height. |
| towardZ | f32 | The direction faced, along the other ground axis. |
| how | 1-byte bits | |
| how.turnOverTime | bit 0 | Set to turn over turnTime, at least 0.0001 seconds; clear to face the direction at once, with turnTime having no effect and the usual turn rate restored. |
| how.unused | bit 1 to 7 | Unused; a server writes zero. |
Vectors (1)
In 1.0.0.138–1.0.0.143
Command 86 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| towardX | f32 | The direction faced, along one ground axis. |
| towardY | f32 | The direction faced, in height. |
| towardZ | f32 | The direction faced, along the other ground axis. |
| how | 1-byte bits | |
| how.turnOverTime | bit 0 | Set to turn the unit toward the direction at its ordinary turning rate; clear to face the direction at once. |
| how.unused | bit 1 to 7 | Unused; a server writes zero. |
Vectors (1)
In 1.0.0.144–3.1.0.0
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.144–1.0.0.149 | 80 |
| 1.0.0.150–3.1.0.0 | 77 |
| Field | Type | What it is |
|---|---|---|
| towardX | f32 | The direction faced, along one ground axis. |
| towardY | f32 | The direction faced, in height. |
| towardZ | f32 | The direction faced, along the other ground axis. |
| how | 1-byte bits | |
| how.turnOverTime | bit 0 | Set to turn over turnTime, at least 0.0001 seconds; clear to face the direction at once, with turnTime having no effect and the usual turn rate restored. |
| how.unused | bit 1 to 7 | Unused; a server writes zero. |
| turnTime | f32 | How long the turn takes, in seconds. |
Vectors (2)
FacePosition
What a client sends when a script it runs turns a unit to face a point. A server need do nothing with it. The header names the unit turned.
In 1.0.0.130–1.0.0.135
Carried on requests, sent by the client, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.130–1.0.0.131 | 83 |
| 1.0.0.132–1.0.0.135 | 84 |
| Field | Type | What it is |
|---|---|---|
| directionX | f32 | Which way the unit now faces, as a direction of length one, along one ground axis. |
| directionY | f32 | Which way the unit now faces, as a direction of length one, in height. |
| directionZ | f32 | Which way the unit now faces, as a direction of length one, along the other ground axis. |
Vectors (2)
In 1.0.0.136–1.0.0.137
Command 84 on requests, sent by the client, reliable.
| Field | Type | What it is |
|---|---|---|
| directionX | f32 | Which way the unit now faces, as a direction of length one, along one ground axis. |
| directionY | f32 | Which way the unit now faces, as a direction of length one, in height. |
| directionZ | f32 | Which way the unit now faces, as a direction of length one, along the other ground axis. |
| unused | u8 | A client writes zero. |
Vectors (1)
In 1.0.0.138–1.0.0.143
Command 86 on requests, sent by the client, reliable.
| Field | Type | What it is |
|---|---|---|
| directionX | f32 | Which way the unit now faces, as a direction of length one, along one ground axis. |
| directionY | f32 | Which way the unit now faces, as a direction of length one, in height. |
| directionZ | f32 | Which way the unit now faces, as a direction of length one, along the other ground axis. |
| unused | u8 | 1 where the script turns the unit toward the point rather than snapping it there, and 0 otherwise. |
Vectors (1)
In 1.0.0.144–3.1.0.0
Carried on requests, sent by the client, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.144–1.0.0.149 | 80 |
| 1.0.0.150–3.1.0.0 | 77 |
| Field | Type | What it is |
|---|---|---|
| directionX | f32 | Which way the unit now faces, as a direction of length one, along one ground axis. |
| directionY | f32 | Which way the unit now faces, as a direction of length one, in height. |
| directionZ | f32 | Which way the unit now faces, as a direction of length one, along the other ground axis. |
| unused | u8 | A client writes zero. |
| unknown | f32 | A client never writes these bytes, so they carry whatever it held there; a server ignores them. |
Vectors (2)
MovementBounds
What a server sends to set a circle that a client keeps its view or its champion’s orders within. The header carries zero.
In 1.0.0.130–1.0.0.146
Command 6 on events, sent by the server, reliable.
A client pulls an order to a point outside onto the circle’s edge before sending it, and drops an order at an object outside.
| Field | Type | What it is |
|---|---|---|
| x | f32 | The circle’s centre, in world units. |
| y | f32 | The centre’s height, in world units. |
| z | f32 | The circle’s centre, in world units. |
| radius | f32 | The circle’s radius, in world units. Zero lifts the bounds; a negative radius counts as zero. |
| camera | u8 | Set to keep the camera within the circle too. Clear leaves the camera as it was, bound or not. Any nonzero value sets it. |
Vectors (1)
In 1.0.0.147–3.1.0.0
Command 6 on events, sent by the server, reliable.
A client pulls an order to a point outside onto the circle’s edge before sending it, and drops an order at an object outside.
| Field | Type | What it is |
|---|---|---|
| x | f32 | The circle’s centre, in world units. |
| y | f32 | The centre’s height, in world units. |
| z | f32 | The circle’s centre, in world units. |
| radius | f32 | The circle’s radius, in world units. Zero lifts the bounds; a negative radius counts as zero. |
| flags | 1-byte bits | What else the circle holds. |
| flags.camera | bit 0 | Set to keep the camera within the circle too. Clear leaves the camera as it was, bound or not. |
| flags.unused | bit 1 to 7 | Unused; a server writes zero. |
Path
What a server sends to set a unit walking along a path, facing the way it walks. The header names the unit.
In every range of this book
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.130–1.0.0.131 | 193 |
| 1.0.0.132–1.0.0.134 | 194 |
| 1.0.0.135 | 196 |
| 1.0.0.136–1.0.0.137 | 194 |
| 1.0.0.138 | 196 |
| 1.0.0.139–1.0.0.140 | 195 |
| 1.0.0.141–1.0.0.143 | 197 |
| 1.0.0.144–1.0.0.149 | 185 |
| 1.0.0.150–3.1.0.0 | 182 |
A client answers every one at once, unsequenced on the transient channel, with ten bytes: WaypointAck’s command, a net id of zero, this sync id, and one byte that is arbitrary and carries no meaning. It applies it only where the sync id is not older than the last the unit took (as UnitStopped).
| Field | Type | What it is |
|---|---|---|
| syncId | i32 | The unit’s movement count. |
| points | to the end × record | The path’s points, to the end of the message. A client takes the ground’s height for each. |
| points[].x | f32 | A point on the path, in world units. |
| points[].z | f32 | A point on the path, in world units. |
PathWithSpeed
What a server sends to set a unit moving along a path at a speed of its own, perhaps in an arc. The header names the unit.
In 1.0.0.130–1.0.0.151
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.130–1.0.0.131 | 136 |
| 1.0.0.132–1.0.0.137 | 137 |
| 1.0.0.138 | 139 |
| 1.0.0.139–1.0.0.143 | 138 |
| 1.0.0.144–1.0.0.149 | 132 |
| 1.0.0.150–1.0.0.151 | 129 |
A client answers every one at once, as it answers Path, whatever its sync id. It applies it only where the sync id is not older than the last the unit took (as UnitStopped). A unit can follow another unit.
| Field | Type | What it is |
|---|---|---|
| syncId | i32 | The unit’s movement count. |
| speed | f32 | The speed to move at, in world units a second. |
| gravity | f32 | The arc’s gravity, for a leap, in units of 150 world units a second squared. Zero or less moves the unit flat. |
| arcX | f32 | Where the arc begins, in world units. |
| arcZ | f32 | Where the arc begins, in world units. |
| facing | i8 | Which way the unit faces as it moves. Values: 0 along, 1 keep. |
| follow | u32 | A unit to follow, or zero for none. |
| followDistance | f32 | How near to keep to it, in world units. It takes effect only where follow is not zero. |
| backOff | f32 | How far to fall back from it, in world units. It takes effect only where follow is not zero. |
| travelTime | f32 | How long the move takes, in seconds. It takes effect only where follow is not zero. |
| points | to the end × record | The path’s points, to the end of the message. A client takes the ground’s height for each. |
| points[].x | f32 | A point on the path, in world units. |
| points[].z | f32 | A point on the path, in world units. |
In 1.0.0.152–3.1.0.0
Command 129 on events, sent by the server, reliable.
A client answers every one at once, as it answers Path, whatever its sync id. It applies it only where the sync id is not older than the last the unit took (as UnitStopped). A unit can follow another unit.
| Field | Type | What it is |
|---|---|---|
| syncId | i32 | The unit’s movement count. |
| speed | f32 | The speed to move at, in world units a second. |
| gravity | f32 | The arc’s gravity, for a leap, in units of 150 world units a second squared. Zero or less moves the unit flat. |
| arcX | f32 | Where the arc begins, in world units. |
| arcZ | f32 | Where the arc begins, in world units. |
| facing | u8 | Which way the unit faces as it moves. Values: 0 along, 1 keep. |
| follow | u32 | A unit to follow, or zero for none. |
| followDistance | f32 | How near to keep to it, in world units. It takes effect only where follow is not zero. |
| backOff | f32 | How far to fall back from it, in world units. It takes effect only where follow is not zero. |
| travelTime | f32 | How long the move takes, in seconds. It takes effect only where follow is not zero. |
| points | to the end × record | The path’s points, to the end of the message. A client takes the ground’s height for each. |
| points[].x | f32 | A point on the path, in world units. |
| points[].z | f32 | A point on the path, in world units. |
Vectors (1)
UnitStopped
What a server sends to stop a unit where it stands. The header names the unit.
In every range of this book
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.130–1.0.0.143 | 51 |
| 1.0.0.144–3.1.0.0 | 48 |
A client applies it only where its sync id is not older than the last the unit took, counting a wrap: this message, PathWithSpeed and Path share one count per unit, starting at -1.
| Field | Type | What it is |
|---|---|---|
| x | f32 | Where the unit stands, in world units; a client keeps this height rather than the ground’s. |
| y | f32 | Its height, in world units. |
| z | f32 | Where it stands, in world units. |
| facingX | f32 | The way it faces. |
| facingY | f32 | The way it faces. |
| facingZ | f32 | The way it faces. |
| syncId | i32 | The unit’s movement count. |