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.
A path carries each point as two world floats (see Space), stated against no origin and no other point.
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 0.8.13.26–0.9.22.13
A client reads nothing of
EnterSight.
In 0.9.25.24–1.0.0.24
A unit coming into sight while standing carries its place and facing in
EnterSightinstead.
Resolving a path
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
In 0.8.13.26–0.9.22.13
A movement with no points empties the unit’s path.
In 0.9.25.24–1.0.0.24
A sending end MUST NOT send a movement with no points; a receiving end refuses it.
In 0.9.25.24–1.0.0.24
A client reads nothing after a refused movement in its group, and still answers the group.
The origin
A server needs no origin.
Relocating rather than walking
A path carries no flag and no token, so nothing relocates a unit: every path is walked.
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.
An order carries no path: only its destination, in world floats. A server works out the route itself and sends it in the path that answers the order.
In 0.9.22.14–1.0.0.24
A server moves the champion by answering the
MoveOrderwith aWaypointGroup, and the client returns that group’ssyncIdin aWaypointAck(see Ordering).
In 0.9.25.24–1.0.0.24
A client takes a
WaypointGroupor aWaypointGroupAtSpeedon channels 2, 3 and 4 alike.
In 0.9.25.24–1.0.0.24
A client sends the
WaypointAckbefore reading any movement in the group, and lists no units in it.
Marking the ground
NavigationFlags marks the ground within circles.
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 0.9.22.14–1.0.0.24
Command 122 on events, sent by the server, reliable.
A client answers each with WaypointAck, naming this sync id alone, before it reads any movement and whatever movementCount is.
| 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 counts as none, as zero does. |
| 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 0.9.22.14–1.0.0.24
Command 120 on requests, sent by the client, unsequenced.
What a client sends for every WaypointGroup it takes, and for every WaypointGroupAtSpeed, Path and PathWithSpeed, as it takes it and before it moves any unit. The header names no object: it carries zero.
| Field | Type | What it is |
|---|---|---|
| syncId | u32 | The number of the group it answers, as the group named itself. |
MoveOrder
What a client sends to tell a server what it wants a unit to do. The header names the sender’s champion.
In every range of this book
Command 20 on requests, sent by the client, reliable.
What a client sends as its player gives an order. It carries no path. The header names the unit ordered: the player’s champion, or a unit it controls alongside, which gets its own copy of the order.
| Field | Type | What it is |
|---|---|---|
| kind | u8 | What the order is. Values: 2 moveToPosition, 3 attack, 10 stop. |
| targetX | f32 | Where the order points, along one ground axis, in world units. |
| targetY | f32 | The height of the place ordered. |
| targetZ | f32 | Where the order points, along the other ground axis. |
| target | u32 | The network object the order is aimed at, or zero where it is aimed at open ground. |
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 0.9.22.14–1.0.0.24
Command 121 on transient, sent by the server, unreliable.
What a server sends to set units walking paths, which each walks at its own speed.
| Field | Type | What it is |
|---|---|---|
| syncId | u32 | The number of this statement; a client applies a path to a unit only where it is not behind the last the unit took. A client returns it in WaypointAck to say the group arrived. |
| movementCount | u16 | How many paths follow, one for each unit. A client reads it as signed, so a count above 32767 counts as none, as zero does, and a client still answers. |
| movements | count in movementCount × Movement | One path for each unit. |
FaceDirection
What a server sends to turn a unit to face a direction. The header names the unit acting.
In 0.8.13.26–0.9.22.13
Command 96 on events, sent by the server, reliable.
Where towardX and towardZ are both zero, a client does nothing.
| Field | Type | What it is |
|---|---|---|
| towardX | f32 | The direction faced, along one ground axis. |
| towardY | f32 | The direction faced, in height. A client reads nothing here. |
| towardZ | f32 | The direction faced, along the other ground axis. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 93 on events, sent by the server, reliable.
Where towardX and towardZ are both zero, a client does not turn the unit at once, but it still keeps the zero direction as the one the unit is to face. What follows from that is not recorded.
| 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. |
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 every range of this book
Carried on requests, sent by the client, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.8.13.26–0.9.22.13 | 96 |
| 0.9.22.14–1.0.0.24 | 93 |
| 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 (1)
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 0.9.22.14–0.9.25.35
Command 127 on events, sent by the server, reliable.
A client keeps its camera within the circle, and nothing else.
| 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. |
Vectors (1)
In 0.9.25.36–1.0.0.24
Command 126 on events, sent by the server, reliable.
A client keeps its camera within the circle, and nothing else.
| Field | Type | What it is |
|---|---|---|
| x | f32 | The circle’s centre, in world units. |
| y | f32 | The centre’s height, in world units. A client does not use it. |
| 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. |
Path
What a server sends to set a unit walking along a path, facing the way it walks. The header names the unit.
In 0.8.13.26–0.9.22.13
Command 80 on events, sent by the server, reliable.
A client acknowledges nothing and drops no path as stale. A body shorter than 4 bytes leaves a client failing.
| Field | Type | What it is |
|---|---|---|
| syncId | i32 | A client reads nothing here and answers nothing. |
| points | to the end × record | The path’s points, to the end of the message. A client takes the ground’s height for each, and passes over a remainder shorter than a point. |
| points[].x | f32 | A point on the path, in world units. |
| points[].z | f32 | A point on the path, in world units. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 77 on events, sent by the server, reliable.
A client answers every one at once, before applying it and whatever its sync id, unsequenced on the transient channel, with WaypointAck carrying this sync id. 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, and passes over a remainder shorter than a point. |
| 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 0.8.13.26–0.9.22.13
Command 81 on events, sent by the server, reliable.
A client acknowledges nothing and drops no path as stale. No unit to follow is carried.
| Field | Type | What it is |
|---|---|---|
| syncId | i32 | A client reads nothing here and answers nothing. |
| 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. |
| points | to the end × record | The path’s points, to the end of the message. A client takes the ground’s height for each, and passes over a remainder shorter than a point. |
| points[].x | f32 | A point on the path, in world units. |
| points[].z | f32 | A point on the path, in world units. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 78 on events, sent by the server, reliable.
A client answers every one at once, before applying it and whatever its sync id, as it answers Path. It applies it only where the sync id is not older than the last the unit took, and does not count it as the last itself.
| 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. |
| points | to the end × record | The path’s points, to the end of the message. A client takes the ground’s height for each, and passes over a remainder shorter than a point. |
| points[].x | f32 | A point on the path, in world units. |
| points[].z | f32 | A point on the path, in world units. |
UnitStopped
What a server sends to stop a unit where it stands. The header names the unit.
In 0.8.13.26–0.9.22.13
Command 24 on events, sent by the server, reliable.
It carries no sync id: a client always applies the position and facing, then stops the unit.
| 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. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 24 on events, sent by the server, reliable.
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. A client drops the message where it is behind the last the unit took by less than 1073741824. |