What one unit is told to do, in the compact shape: a path of points on the ground plane, each after the first stated against the one before it. Other shapes of movement exist, and which one a payload holds is settled by the message carrying it rather than by anything inside the movement.
How many points the path holds. A client takes none as no path and reads nothing more of the message. It sets no upper bound, and reads a count from 32768 up as negative, which no server sends.
path
record
Everything the movement carries after its point count.
path.unit
u32
The unit the path belongs to.
path.points
count in header.pointCount × record
Every point of the path, each stated in world units. A client reads them even for a unit it does not hold, and takes each point’s height from the ground.
How many points the path holds. A client takes none, or more than 2048, as no path and reads nothing more of the message.
path
record
Everything the movement carries after its point count.
path.unit
u32
The unit the path belongs to.
path.points
count in header.pointCount × record
Every point of the path, each stated in world units. A client reads them even for a unit it does not hold, and takes each point’s height from the ground.
Set where a token sits beside the unit. A client sends it clear, so a token travels only from a server.
header.unused
bit 1 to 15
Unused; a client reads nothing here.
header.pointCount
bit 16 to 30
How many points the path holds. A client takes none, or more than 2048, as no path and reads nothing more of the movement.
header.unusedHigh
bit 31
Unused; a client reads nothing here.
path
record
Everything the movement carries beyond its first byte.
path.unit
u32
The unit the path belongs to.
path.teleportToken
u8
header.hasTeleportToken set
Tells one relocation from another. Movement says what a receiving end does with it.
path.points
count in header.pointCount × record
Every point of the path, each stated in world units. A client reads them even for a unit it does not hold, and takes each point’s height from the ground.
Set where a token sits beside the unit. A client sends it clear, so a token travels only from a server.
header.unused
bit 1 to 15
Unused; a client reads nothing here.
header.pointCount
bit 16 to 22
How many points the path holds; a sending end writes at least one. A client takes a movement claiming none as the end of the whole group: it reads no movement after it.
header.unusedHigh
bit 23 to 31
Unused; a client reads nothing here.
path
record
Everything the movement carries beyond its first four bytes.
path.unit
u32
The unit the path belongs to. A server names only a unit the client holds and can move: for any other, a client reads the unit and the token alone and misreads everything after them.
path.teleportToken
u8
header.hasTeleportToken set
Tells one relocation from another. Movement says what a receiving end does with it.
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.
path.flags.xIsStep
bit 0
Set where this point states its first coordinate as a step.
path.flags.zIsStep
bit 1
Set where this point states its second coordinate as a step.
path.firstX
i16
The first point, along one ground axis, in the units Movement gives.
path.firstZ
i16
The first point, along the other.
path.steps
count in header.pointCount minus 1 × record
path.steps[].xStep
i8
flags[step].xIsStep set
Added to the first coordinate of the point before, as that point resolved.
path.steps[].xWhole
i16
flags[step].xIsStep = 0
The first coordinate, stated without reference to the point before.
path.steps[].zStep
i8
flags[step].zIsStep set
Added to the second coordinate of the point before, as that point resolved.
path.steps[].zWhole
i16
flags[step].zIsStep = 0
The second coordinate, stated without reference to the point before.
What one unit is told to do where a server states how it travels: the same path of points as the compact shape, with the terms of its travel stated before them.
How many points the path holds. A client takes none as no path and reads nothing more of the message. It sets no upper bound, and reads a count from 32768 up as negative, which no server sends.
path
record
Everything the movement carries after its point count.
Every point of the path, each stated in world units. A client reads them even for a unit it does not hold, and takes each point’s height from the ground.
Every point of the path, each stated in world units. A client reads them even for a unit it does not hold, and takes each point’s height from the ground.
Every point of the path, each stated in world units. A client reads them even for a unit it does not hold, and takes each point’s height from the ground.
Set where a token sits beside the unit. A client sends it clear, so a token travels only from a server.
header.unused
bit 1 to 15
Unused; a client reads nothing here.
header.pointCount
bit 16 to 22
How many points the path holds; a sending end writes at least one. A client takes a movement claiming none as the end of the whole group: it reads no movement after it.
header.unusedHigh
bit 23 to 31
Unused; a client reads nothing here.
path
record
Everything the movement carries beyond its first four bytes.
path.unit
u32
The unit the path belongs to. A server names only a unit the client holds and can move: for any other, a client reads the unit, the token and the terms alone and misreads everything after them.
path.teleportToken
u8
header.hasTeleportToken set
Tells one relocation from another, as in the compact shape (see Movement).
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.
path.flags.xIsStep
bit 0
Set where this point states its first coordinate as a step.
path.flags.zIsStep
bit 1
Set where this point states its second coordinate as a step.
path.firstX
i16
The first point, along one ground axis, in the units Movement gives.
path.firstZ
i16
The first point, along the other.
path.steps
count in header.pointCount minus 1 × record
path.steps[].xStep
i8
flags[step].xIsStep set
Added to the first coordinate of the point before, as that point resolved.
path.steps[].xWhole
i16
flags[step].xIsStep = 0
The first coordinate, stated without reference to the point before.
path.steps[].zStep
i8
flags[step].zIsStep set
Added to the second coordinate of the point before, as that point resolved.
path.steps[].zWhole
i16
flags[step].zIsStep = 0
The second coordinate, stated without reference to the point before.
The name this particle answers to, so later messages can name it.
boundTo
u32
The unit the particle hangs off, or zero. Where it names a unit the client does not hold, the particle waits until it does, unless the group’s flags say otherwise.
atX
f32
Where the particle sits, along one ground axis, in world units.
atY
f32
Where it sits, in height, in world units.
atZ
f32
Where it sits, along the other ground axis, in world units.
towardX
f32
Where the particle is aimed, along one ground axis, in world units.
towardY
f32
Where it is aimed, in height, in world units.
towardZ
f32
Where it is aimed, along the other ground axis, in world units.
ownerX
f32
Where the unit that made it stood, along one ground axis, in world units.
ownerY
f32
Where that unit stood, in height, in world units.
ownerZ
f32
Where that unit stood, along the other ground axis, in world units.
runningFor
f32
How far into its run the particle already is, in seconds.
The name this particle answers to, so later messages can name it.
boundTo
u32
The unit the particle hangs off, or zero. Where it names a unit the client does not hold, the particle waits until it does, unless the group’s flags say otherwise.
atX
i16
Where the particle sits, along one ground axis. Carried in the units a path uses rather than in world units.
atY
f32
Where it sits, in height, in world units.
atZ
i16
Where it sits, along the other ground axis. It shares the reading of the first.
towardX
i16
Where the particle is aimed, along one ground axis, in the form of the first pair above.
towardY
f32
Where it is aimed, in height, in world units.
towardZ
i16
Where it is aimed, along the other ground axis.
ownerX
i16
Where the unit that made it stood, along one ground axis, in the form of the first pair above.
ownerY
f32
Where that unit stood, in height, in world units.
ownerZ
i16
Where that unit stood, along the other ground axis.
facingX
f32
Which way the particle faces, along one ground axis.
facingY
f32
Which way it faces, in height.
facingZ
f32
Which way it faces, along the other ground axis.
runningFor
f32
How far into its run the particle already is, in seconds.
How each particle of the group behaves, one bit each: 1 kept alive, not ending by itself; 2 of no effect; 4 scaled to the bound unit’s bounding box and its effect scale (to 1 where the bound object cannot be attacked); 8 placed at the positions given rather than hung on bone and targetBone, made even where a nonzero boundTo is unknown and with an unknown target; 16 not turned to follow its direction; 32 simulated while off screen; 64 laid flat on the ground’s slope, facing as forward (+Z where facing is zero); 128 facing its target; 256 driven by the bound unit’s resource bar. Bits 9 to 15 have no effect.
targetBone
u32
Where on the unit aimed at they hang, by the number the name of that place gives, as Objects and identifiers works it out.
bone
u32
Where on the unit that made them they hang, by the same reading.
How each particle of the group behaves, one bit each: 1 kept alive, not ending by itself; 4 scaled to the bound unit’s bounding box and its effect scale (to 1 where the bound object cannot be attacked); 8 placed at the positions given rather than hung on bone and targetBone; 32 simulated while off screen. A client makes the particles whether or not it knows a nonzero boundTo or the target. 2, 16, 64, 128, 256 and bits 9 to 15 have no effect.
targetBone
u32
Where on the unit aimed at they hang, by the number the name of that place gives, as Objects and identifiers works it out.
bone
u32
Where on the unit that made them they hang, by the same reading.
What has changed about one unit. A flag byte says which groups of values follow, and each group that follows says which of its values it holds and carries them as a run of bytes. The groups follow in a fixed order that is not the order of the flags: the last flag’s values come before the one before it, and the rest run in flag order. Replication says what settles the reading of a run, and records what a champion’s groups carry.
Which player holds the place, or a negative number where it stands empty. It has a player identifier’s width.
level
u16
The level the seat holder has reached across matches.
summoner
u32
The spell in one of the seat’s summoner slots, as the name hash of the spell; drawn as its icon on the loading screen. It has no effect on a bot’s seat.
Which player holds the place, or a negative number where it stands empty. It has a player identifier’s width.
level
u16
The level the seat holder has reached across matches.
summoner
u32
The spell in one of the seat’s summoner slots, as the name hash of the spell; drawn as its icon on the loading screen. It has no effect on a bot’s seat.
otherSummoner
u32
The spell in the other.
flags
u8
How the seat is treated. Two bits take effect: bit 0, set where a bot holds the seat, which the loading screen then shows from the bot fields below as already loaded; and bit 1, set to show the seat’s champion on the loading screen in its skin’s vintage art. The others have no effect.
side
u32
The side the seat is on, or zero where it stands empty.
botName
bytes, 28
What the seat is called where nobody holds it, written and padded as above. A 28-byte text the client takes as it stands in its own memory: bytes 4 to 19 hold the text, the u32 at 20 its length and the u32 at 24 a capacity that must be 15 or less, so the text holds at most 15 bytes; bytes 0 to 3 are not read.
botAsset
bytes, 28
The name the client loads art for it under where nobody holds it, written and padded as above. A 28-byte text the client takes as it stands in its own memory: bytes 4 to 19 hold the text, the u32 at 20 its length and the u32 at 24 a capacity that must be 15 or less, so the text holds at most 15 bytes; bytes 0 to 3 are not read.
botDifficulty
i32
How well it plays where nobody holds it: 0 beginner, 1 intermediate, 2 advanced, 3 top, 4 tutorial, 5 intro.
Which player holds the place, or a negative number where it stands empty. It has a player identifier’s width.
level
u16
The level the seat holder has reached across matches.
summoner
u32
The spell in one of the seat’s summoner slots, as the name hash of the spell; drawn as its icon on the loading screen. It has no effect on a bot’s seat.
otherSummoner
u32
The spell in the other.
flags
u8
How the seat is treated. Two bits take effect: bit 0, set where a bot holds the seat, which the loading screen then shows from the bot fields below as already loaded; and bit 1, set to show the seat’s champion on the loading screen in its skin’s vintage art. The others have no effect.
side
u32
The side the seat is on, or zero where it stands empty.
botName
bytes, 28
What the seat is called where nobody holds it, written and padded as above. A 28-byte text the client takes as it stands in its own memory: bytes 4 to 19 hold the text, the u32 at 20 its length and the u32 at 24 a capacity that must be 15 or less, so the text holds at most 15 bytes; bytes 0 to 3 are not read.
botAsset
bytes, 28
The name the client loads art for it under where nobody holds it, written and padded as above. A 28-byte text the client takes as it stands in its own memory: bytes 4 to 19 hold the text, the u32 at 20 its length and the u32 at 24 a capacity that must be 15 or less, so the text holds at most 15 bytes; bytes 0 to 3 are not read.
botDifficulty
i32
How well it plays where nobody holds it: 0 beginner, 1 intermediate, 2 advanced, 3 top, 4 tutorial, 5 intro.
icon
i32
Which profile icon the client shows on the seat’s loading-screen card; a negative number, or one with no art, shows icon 0’s.
How fast the unit travels along the path, in world units a second, standing in for its own pace.
gravity
f32
How sharply the unit arcs through the air along the way. Zero where it keeps to the ground.
fromX
f32
Where the unit starts, along one ground axis, in world units. It holds the same place the path’s first point states, and is carried whether the unit arcs or not.
How fast the unit travels along the path, in world units a second, standing in for its own pace.
gravity
f32
How sharply the unit arcs through the air along the way. Zero where it keeps to the ground.
fromX
f32
Where the unit starts, along one ground axis, in world units. It holds the same place the path’s first point states, and is carried whether the unit arcs or not.
fromZ
f32
Where it starts, along the other.
keepFacing
u8
0 to face the way the unit travels, 1 to keep its facing. Values: 0 faceTheWayItGoes, 1 holdItsFacing.
How fast the unit travels along the path, in world units a second, standing in for its own pace.
gravity
f32
How sharply the unit arcs through the air along the way. Zero where it keeps to the ground.
fromX
f32
Where the unit starts, along one ground axis, in world units. It holds the same place the path’s first point states, and is carried whether the unit arcs or not.
fromZ
f32
Where it starts, along the other.
follows
u32
The unit this one is made to follow, or zero where it follows none.
followDistance
f32
How far from that unit it is made to stay, in world units.
followBackDistance
f32
How far behind that unit it is made to stay, in world units.
keepFacing
u8
0 to face the way the unit travels, 1 to keep its facing. Values: 0 faceTheWayItGoes, 1 holdItsFacing.
How fast the unit travels along the path, in world units a second, standing in for its own pace.
gravity
f32
How sharply the unit arcs through the air along the way. Zero where it keeps to the ground.
fromX
f32
Where the unit starts, along one ground axis, in world units. It holds the same place the path’s first point states, and is carried whether the unit arcs or not.
fromZ
f32
Where it starts, along the other.
keepFacing
u8
0 to face the way the unit travels, 1 to keep its facing. Values: 0 faceTheWayItGoes, 1 holdItsFacing.
follows
u32
The unit this one is made to follow, or zero where it follows none.
followDistance
f32
How far from that unit it is made to stay, in world units.
followBackDistance
f32
How far behind that unit it is made to stay, in world units.
followTime
f32
Seconds to reach the followed unit, from when a client applies the message; it applies only where follows is nonzero. Above zero, a client sets the speed each update to the ground distance left to the followed unit (moved back by followBackDistance) over the time left, at least 0.0001 seconds, overriding speed, and keeps the last speed once the time is up; an arcing unit takes it as its first flight time. Zero or below does nothing.