Structs
The groups of fields messages hold, each with the layout it has across the book’s patches.
Choice
One choice made before the match, and how far it was taken.
In every range of this book
| Field | Type | What it is |
|---|---|---|
| choice | u32 | Which choice, by the number the client knows it as. Zero where the place stands empty. |
| rank | u8 | How far it was taken. |
Movement
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.
In every range of this book
| Field | Type | What it is |
|---|---|---|
| header | 2-byte bits | |
| header.pointCount | bit 0 to 15 | 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. |
| path.points[].x | f32 | Along one ground axis, in world units. |
| path.points[].z | f32 | Along the other, in world units. |
MovementAtSpeed
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.
In every range of this book
| Field | Type | What it is |
|---|---|---|
| header | 2-byte bits | |
| header.pointCount | bit 0 to 15 | 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.terms | SpeedParams | How the unit is made to travel. |
| 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. |
| path.points[].x | f32 | Along one ground axis, in world units. |
| path.points[].z | f32 | Along the other, in world units. |
Particle
One drawn particle: where it sits, what it hangs off, and how far into its run it is.
In every range of this book
| Field | Type | What it is |
|---|---|---|
| target | u32 | The unit the particle is aimed at, or zero. |
| particle | u32 | 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. |
ParticleGroup
A set of drawn particles that share the art, the sound, and the place on a unit they hang from.
In every range of this book
| Field | Type | What it is |
|---|---|---|
| particle | u32 | Which particle, by the number its name gives, as Objects and identifiers works it out. |
| flags | u16 | 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. |
| particleCount | u8 | How many particles follow. |
| particles | count in particleCount × Particle | The particles themselves. |
Replication
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.
In every range of this book
| Field | Type | Present when | What it is |
|---|---|---|---|
| present | 1-byte bits | ||
| present.group0 | bit 0 | Set where this group’s values follow. | |
| present.group1 | bit 1 | Set where this group’s values follow. | |
| present.group2 | bit 2 | Set where this group’s values follow. | |
| present.group3 | bit 3 | Set where this group’s values follow. | |
| present.group4 | bit 4 | Set where this group’s values follow. They come after every other group’s, whatever the flags. | |
| present.unused | bit 5 to 7 | A client takes only groups 0 to 4. | |
| unit | u32 | The unit whose values these are. | |
| group0 | record | present.group0 set | The values of group 0, where the flag says they follow. |
| group0.which | u32 | Says which of the group’s values follow, one bit each, lowest first. | |
| group0.values | count in the bits set in which × bytes | The values themselves, four bytes each, in the order the bits above name them. | |
| group1 | record | present.group1 set | The values of group 1, where the flag says they follow. |
| group1.which | u32 | Says which of the group’s values follow, one bit each, lowest first. | |
| group1.values | count in the bits set in which × bytes | The values themselves, four bytes each, in the order the bits above name them. | |
| group2 | record | present.group2 set | The values of group 2, where the flag says they follow. |
| group2.which | u32 | Says which of the group’s values follow, one bit each, lowest first. | |
| group2.values | count in the bits set in which × bytes | The values themselves, four bytes each, in the order the bits above name them. | |
| group3 | record | present.group3 set | The values of group 3, where the flag says they follow. |
| group3.which | u32 | Says which of the group’s values follow, one bit each, lowest first. | |
| group3.values | count in the bits set in which × bytes | The values themselves, four bytes each, in the order the bits above name them. | |
| group4 | record | present.group4 set | The values of group 4, where the flag says they follow. |
| group4.which | u32 | Says which of the group’s values follow, one bit each, lowest first. | |
| group4.values | count in the bits set in which × bytes | The values themselves, four bytes each, in the order the bits above name them. |
Seat
One place at the match: who holds it, what they brought, and what the client shows for them.
In every range of this book
| Field | Type | What it is |
|---|---|---|
| player | i64 | 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. |
SpeedParams
How a unit is made to travel, in place of what a receiving end would otherwise choose for it.
In every range of this book
| Field | Type | What it is |
|---|---|---|
| speed | f32 | 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. |
SpellCast
One casting of a spell: which spell, who cast it, at what, and the timings a client plays it out with.
In every range of this book
| Field | Type | What it is |
|---|---|---|
| size | u16 | How many bytes the casting takes, this field included. Where it differs from the bytes the casting takes, a client still gives the cast its spell. |
| spell | u32 | Which spell, by the number its name gives, as Objects and identifiers works it out. |
| cast | u32 | The name this casting answers to, so later messages can name it. |
| level | u8 | The rank the spell stands at, counting from 1: a spell at its first rank carries 1. |
| attackSpeed | f32 | What the caster’s attack rhythm is scaled by while this runs. |
| caster | u32 | The unit casting. |
| chainOwner | u32 | The unit the casting is credited to, where a chain of casts leads back to another. |
| targetX | f32 | Where the casting is aimed, along one ground axis, in world units. |
| targetY | f32 | Where the casting is aimed, in height, in world units. |
| targetZ | f32 | Where the casting is aimed, along the other ground axis, in world units. |
| targetEndX | f32 | Where the casting stops being aimed, for a spell that sweeps, along one ground axis, in world units. |
| targetEndY | f32 | Where the casting stops being aimed, for a spell that sweeps, in height, in world units. |
| targetEndZ | f32 | Where the casting stops being aimed, for a spell that sweeps, along the other ground axis, in world units. |
| hitCount | u8 | How many units the casting names as hit, at most 32. A client sets no bound of its own. |
| hits | count in hitCount × SpellHit | The units the casting hits, each a unit then a one-byte result. |
| castTime | f32 | How long the casting takes before it takes effect, in seconds. |
| extraCastTime | f32 | What is added to that, in seconds. |
| totalTime | f32 | How long the whole casting runs, in seconds. |
| cooldown | f32 | How long until the spell can be cast again, in seconds. |
| how | 1-byte bits | |
| how.basicAttack | bit 0 | Set where the casting is the caster’s own swing rather than a spell. |
| how.secondBasicAttack | bit 1 | Set where the swing is the second of a pair. |
| how.unused | bit 2 to 7 | A client reads nothing here; a server writes zero. |
| slot | u8 | Which of the caster’s slots the spell sits in. |
| cost | f32 | What the casting spends from the caster’s resource. |
| launchX | f32 | Where what the casting throws leaves from, along one ground axis, in world units. |
| launchY | f32 | Where what the casting throws leaves from, in height, in world units. |
| launchZ | f32 | Where what the casting throws leaves from, along the other ground axis, in world units. |
SpellHit
One unit a casting names as hit, and how it was hit.
In every range of this book
| Field | Type | What it is |
|---|---|---|
| unit | u32 | The unit hit. |
| result | u8 | How the hit landed. |