Structs
The groups of fields messages hold, each with the layout it has across the book’s patches.
AnimationOverride
One set of movements standing in for another.
In every range of this book
| Field | Type | What it is |
|---|---|---|
| fromLength | u32 | How many bytes the name below occupies, where it is from 1 to 2147483647. |
| from | text, sized by fromLength | The name of what is replaced. It is not padded and carries nothing closing it. |
| toLength | u32 | How many bytes the name below occupies, where it is from 1 to 2147483647. |
| to | text, sized by toLength | The name of what replaces it, written as above. |
Appearance
One layer of what a unit looks like. Layers are stated in the order a client lays them on.
In every range of this book
| Field | Type | What it is |
|---|---|---|
| assetSize | u32 | How many bytes the name below occupies. |
| asset | text, sized by assetSize | The name the client loads this layer’s art under. It is not padded, and it carries no terminator. |
| skin | u32 | Which look within that art. |
| how | 1-byte bits | |
| how.overrideSpells | bit 0 | Set where this layer replaces the unit’s spells as well as its art. |
| how.modelOnly | bit 1 | Set where it replaces the shape alone. |
| how.replacePackage | bit 2 | Set where it replaces the whole set of art and sound. |
| how.unused | bit 3 to 7 | Unused; a server writes zero. |
| layer | u32 | The name this layer answers to, so a later message can take it off. |
CarriedMessage
One whole message carried inside another, behind the count of its bytes.
In every range of this book
| Field | Type | What it is |
|---|---|---|
| size | u16 | How many bytes the message occupies. |
| body | bytes, sized by size | The message itself, taking effect as though it had arrived on its own on the channel that carried the message holding it. |
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. |
Death
How a unit died: who did it, with what, and how long it stays down.
In 4.18–4.20
| Field | Type | What it is |
|---|---|---|
| how | 1-byte bits | |
| how.zombie | bit 0 | Set to leave the champion standing in a zombie state rather than dead: no death animation and no death screen. |
| how.unused | bit 1 to 7 | Unused; a server writes zero. |
| kind | u32 | What sort of death this is. |
| killer | u32 | The unit credited with it, or zero where nothing is. |
| damageType | u8 | The sort of damage that finished it. |
| damageSource | u8 | Where that damage came from. |
| stayDown | f32 | How long the unit stays down, in seconds. |
EffectStack
How many of a lasting effect are stacked in one of a unit’s effect slots.
In every range of this book
| Field | Type | What it is |
|---|---|---|
| slot | u8 | Which slot. |
| count | u32 | How many are stacked there. |
HeldItem
One item a unit holds, as it is stated when the unit first comes into sight.
In every range of this book
| Field | Type | What it is |
|---|---|---|
| slot | u8 | Which slot it sits in. |
| inSlot | u8 | How many of it are in that slot. |
| charges | u8 | How many uses it carries. |
| item | u32 | Which item, by the number the client knows it as. |
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 | Present when | What it is |
|---|---|---|---|
| header | 1-byte bits | ||
| 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. | |
| header.pointCount | bit 1 to 7 | How many points the path holds; a sending end writes at least one. A receiving end refuses a movement claiming none and takes nothing further from it. | |
| 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.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. |
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 | Present when | What it is |
|---|---|---|---|
| header | 1-byte bits | ||
| 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. | |
| header.pointCount | bit 1 to 7 | How many points the path holds; a sending end writes at least one. A receiving end refuses a movement claiming none and takes nothing further from it. | |
| 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, as in the compact shape (see Movement). |
| path.terms | SpeedParams | How the unit is made to travel. | |
| 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. |
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. |
| caster | u32 | The unit that made the particle, or zero. |
| boundTo | u32 | The unit the particle hangs off, or zero. |
| settingsFrom | u32 | A second unit the particle takes unit-specific settings from, where a 4.17 client knows it: its skin picks the particle’s skin-specific version where caster is zero or unknown, and, where it is not boundTo, the particle’s substitutions come from it. Zero or unknown is ignored. |
| 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. |
| scale | f32 | What the particle’s drawn size is scaled by. |
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 |
|---|---|---|
| package | u32 | Which set of art and sound the client draws them with. |
| 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, on a 4.17 client: 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. A server sends it clear. | |
| present.group5 | bit 5 | Set where this group’s values follow. They come before group 4’s. | |
| present.unused | bit 6 to 7 | Unused; a server writes zero. A presence byte with no group set is valid. | |
| 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 the run below holds, one bit each, lowest first. | |
| group0.length | u8 | How many bytes the run below holds. | |
| group0.values | bytes, sized by length | The values themselves, one after another in the order the bits above name them, lowest first. What each one is, and which of the two shapes it takes, is settled by the kind of unit rather than by anything here. Replication says so, and records what a champion’s groups carry. | |
| 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 the run below holds, one bit each, lowest first. | |
| group1.length | u8 | How many bytes the run below holds. | |
| group1.values | bytes, sized by length | The values themselves, one after another in the order the bits above name them, lowest first. What each one is, and which of the two shapes it takes, is settled by the kind of unit rather than by anything here. Replication says so, and records what a champion’s groups carry. | |
| 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 the run below holds, one bit each, lowest first. | |
| group2.length | u8 | How many bytes the run below holds. | |
| group2.values | bytes, sized by length | The values themselves, one after another in the order the bits above name them, lowest first. What each one is, and which of the two shapes it takes, is settled by the kind of unit rather than by anything here. Replication says so, and records what a champion’s groups carry. | |
| 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 the run below holds, one bit each, lowest first. | |
| group3.length | u8 | How many bytes the run below holds. | |
| group3.values | bytes, sized by length | The values themselves, one after another in the order the bits above name them, lowest first. What each one is, and which of the two shapes it takes, is settled by the kind of unit rather than by anything here. Replication says so, and records what a champion’s groups carry. | |
| group5 | record | present.group5 set | The values of group 5, where the flag says they follow. |
| group5.which | u32 | Says which of the group’s values the run below holds, one bit each, lowest first. | |
| group5.length | u8 | How many bytes the run below holds. | |
| group5.values | bytes, sized by length | The values themselves, one after another in the order the bits above name them, lowest first. What each one is, and which of the two shapes it takes, is settled by the kind of unit rather than by anything here. Replication says so, and records what a champion’s groups carry. | |
| group4 | record | present.group4 set | The values of group 4, where the flag says they follow. For a 4.17 client it comes last, after group 5. A server sends its flag clear. |
| group4.which | u32 | Says which of the group’s values the run below holds, one bit each, lowest first. | |
| group4.length | u8 | How many bytes the run below holds. What comes next starts after this many bytes, whatever the values inside take. | |
| group4.values | bytes, sized by length | The values themselves, as for the other groups. |
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. A 4.17 client does not draw it on the loading screen. |
| 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 on a 4.17 client: 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 | text, 64 bytes | What the seat is called where nobody holds it, written and padded as above. A 4.17 client shows its own name for a bot of the champion instead. |
| botAsset | text, 64 bytes | The name the client loads art for it under where nobody holds it, written and padded as above. |
| standing | text, 16 bytes | What the seat’s standing across matches is called, written and padded as above. A 4.17 client frames the seat’s loading-screen card with its own image of that name, where it has one; UNRANKED and BRONZE draw nothing. |
| botSkin | i32 | Which look it wears where nobody holds it. |
| botDifficulty | i32 | How well it plays where nobody holds it: 0 beginner, 1 intermediate, 2 advanced, 3 top, 4 tutorial, 5 intro. A 4.17 client draws it nowhere and picks the bot’s summoner spells by it. |
| 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. |
| allyBadge | u8 | The badge a 4.17 client shows on the seat’s card to the seat’s own side (and to a client on neither side), where it is one of the badges the client’s own data names. |
| enemyBadge | u8 | The badge it shows where the ally badge is not shown and this is nonzero. |
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. |
| 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. |
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 gives the cast no 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. |
| package | u32 | Which set of art and sound the client draws it with. |
| missile | u32 | The name the missile this casting throws will answer to, or zero where it throws none. |
| 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. |
| hits | count in hitCount × SpellHit | The units the casting hits, each a unit then a one-byte result; a 4.17 client takes at most 32. |
| 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. |
| startedAt | f32 | When the casting began, 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.forced | bit 2 | Set where the casting was not asked for by whoever holds the caster. |
| how.overrideCastPosition | bit 3 | Set where the aim above replaces the one the caster would have used. |
| how.clicked | bit 4 | Set where a click on the spell’s own button started the casting. A client does nothing with it. |
| how.unused | bit 5 to 7 | Unused; 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. |
| ammoUsed | i32 | How many charges the casting spends. |
| ammoRecharge | f32 | How long until a spent charge returns, in seconds. |
SpellHit
One unit a casting names as hit, and how it was hit.
In 4.1–4.16
| Field | Type | What it is |
|---|---|---|
| unit | u32 | The unit hit. |
| atX | f32 | Where the hit is, along one ground axis, in world units. A client gives it to the missile it makes for this hit. |
| atY | f32 | Where the hit is, in height, in world units. A client gives it to the missile it makes for this hit. |
| atZ | f32 | Where the hit is, along the other ground axis, in world units. A client gives it to the missile it makes for this hit. |
| result | u8 | How the hit landed. |
Vectors (1)
In 4.17–4.20
| Field | Type | What it is |
|---|---|---|
| unit | u32 | The unit hit. |
| result | u8 | How the hit landed. |
SpellNumberSet
The numbers a client shows beside one of a unit’s spells, and which of them it keeps from the other side.
In 4.7–4.20
| Field | Type | What it is |
|---|---|---|
| unit | u32 | The unit whose spell this is. |
| slot | u8 | Which slot. |
| values | 16 × f32 | The numbers themselves, one place each. |
| hidden | 16 × u8 | Which of those places the other side is not shown, one for each. |
Strike
One swing of a unit’s own weapon: what it is aimed at, when it lands, and the missile it throws.
In 4.18–4.20
| Field | Type | What it is |
|---|---|---|
| target | u32 | The unit swung at. A server sends a nonzero unit. |
| timing | u8 | A shift in time: the value less 128, in hundredths of a second, from -1.28 to 1.27; 128 shifts nothing. It moves when the swing lets go and ends, and when the unit may next attack. |
| missile | u32 | The name the missile this swing throws will answer to. |
| slot | u8 | Which of the unit’s attacks this is. |
| targetX | f32 | Where the unit swung at stands, along one ground axis. Carried in the units a path uses rather than in world units, and a server sends a whole number. Movement says how the two relate. |
| targetY | f32 | Where it stands, in height. Carried in world units. |
| targetZ | f32 | Where it stands, along the other ground axis. It shares the reading of the first. |