Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

About this book

A wire protocol specification for League of Legends game servers: what a server sends for a client to connect, load a match and play, and what the client does with it. The chapters are meant to be enough to build a conforming server. Each builds on the ones before it, so read them in order.

A chapter holds for every client build covered, except a passage set apart and headed with ranges, which holds for those alone. What a chapter says of a message holds wherever that message has a layout: a build with no layout for a message has no such message, and nothing said of it applies there. Field layouts are not restated in prose: they live in schema/, machine readable, and each system’s chapter ends with its messages and every layout each has. Where a field’s meaning is undetermined, its note says so.

The rules of the game are out of scope: how much a spell deals, what an item costs, how fast a champion levels. A server decides those; the specification says how it tells a client the results.

Check your work against conformance/ as you go; its vectors are this specification’s measure of a conforming server.

If the specification does not answer something you need, do not guess: report it as a defect, as CONTRIBUTING.md explains.

This book covers client builds from 0.8.13.26 up to, not including, 1.0.0.25, in 6 ranges. Every build in a range is held to the same facts.

PatchFromUp toPatch notesBuilds checked
0.8.13.26–0.9.22.130.8.13.260.9.22.14V0.8.13.261
0.9.22.14–0.9.22.150.9.22.140.9.22.16V0.9.22.141
0.9.22.16–0.9.25.200.9.22.160.9.25.21V0.9.22.16, V0.9.22.182
0.9.25.21–0.9.25.230.9.25.210.9.25.24V0.9.25.211
0.9.25.24–0.9.25.350.9.25.240.9.25.36V0.9.25.241
0.9.25.36–1.0.0.240.9.25.361.0.0.25V0.9.25.341

What the chapters say of a message says nothing of a patch that has no layout for it. A message the chapters name with a link is one this book has; one named without a link is one no build of this book has. The index of messages finds any message, and the appendix on patches gives each patch’s checks, every message it carries, and how it differs from the one before it.

Transport

A server and a client exchange messages over UDP, carried by ENet 1.2.5 with the header each range’s definitions give.

Layering

Four layers carry a message to a socket.

  1. UDP moves datagrams.
  2. ENet turns datagrams into ordered, acknowledged deliveries on numbered channels.
  3. A cipher covers each channel payload.
  4. A message occupies the deciphered payload, opening with the header its family carries, as Messages defines.

This chapter covers layers 1 to 3.

Stock ENet

This document does not restate ENet. Connection setup, acknowledgement, sequence numbers, retransmission, throttling, and fragmentation behave as ENet 1.2.5 defines them.

Stock ENet 1.2.5 serves a client as it stands: the header, the constants and the commands are the release’s own, and the verify connect stock ENet sends states what the client’s connect asked for.

The packet header

Each range has its own header, below with the constants it is read under. A server MUST use the layout of the version it serves, because a client establishes no connection under any other layout.

Packet headers and constants

In every range of this book

ENet 1.2.5 beneath; little-endian fields. Blowfish in ECB mode over 8-byte blocks, each read big-endian, under a 16-byte key given as text. A client pads what it sends to whole blocks.

FieldTypePresent whenWhat it is
sessionIdbytes, 4The four bytes the client put in its connect command, carried unchanged on every packet. A client drops a packet carrying any other four.
peer2-byte bits
peer.peerIdbit 0 to 1432767 marks an unassigned peer, which is what a connecting client sends. A server gives the client peer 0.
peer.sentTimeFlagbit 15Set when the header carries a sent time.
sentTimeu16, big-endianpeer.sentTimeFlag setMilliseconds since the connection opened.
ConstantValueStock ENetWhat it is
maximumPeerId3276732767Follows from the peer id occupying fifteen bits.
maximumTransmissionUnit40964096A client asks for 1400 in its connect command, and takes datagrams up to 4096 bytes.
minimumDatagram88A client discards any datagram shorter than this many bytes.

A header built from the schema is necessary to reach a client, and not sufficient on its own. Where a field’s content is free rather than fixed, its note in the schema says so.

conformance/vectors/transport holds a header with a sent time and one without.

A client discards any datagram shorter than the minimumDatagram constant of its range. A server MUST NOT send a shorter datagram.

The connect command

A server’s verify connect MUST state the channel count, and the throttle interval, acceleration and deceleration, the connect command carried: a client abandons a connection whose verify connect states anything else.

In 0.9.25.24–1.0.0.24

A client asks for 7 channels.

Maximum transmission unit

A client asks for a transmission unit of 1400 bytes, and discards any datagram whose UDP payload, packet header included, exceeds the maximumTransmissionUnit constant of its range. A server MUST NOT send a larger datagram.

That constant is above what a client asks for, so a server needs no clamp.

The cipher

Whether a payload is enciphered follows from the state of the connection rather than from the channel it travels on. A connection begins with no cipher state, and the request that establishes it travels in the clear apart from one field it carries enciphered as proof. Everything after that is enciphered, on every channel and in both directions, the answer to that request included.

schema/protocol.json records which cipher, in which mode, and the shape of a block. A server MUST use that cipher; a client accepts no other. A standard implementation of Blowfish interoperates with a client.

What a server sends carries no padding. Trailing bytes that do not fill a block travel unchanged, so a payload shorter than one block travels in the clear.

A client pads what it sends to a whole number of blocks and enciphers all of it. The bytes it adds follow the message’s own fields to the end of the payload and hold nothing in particular.

conformance/vectors/cipher covers a whole block, a payload with a tail too short to fill one, and a payload shorter than a block.

The key

Both ends hold the key before a connection opens. Nothing on the wire negotiates it, and no exchange derives it. A client receives it as a launch argument.

A client decodes nothing: its key is the first sixteen characters of the argument, as they stand. A key both this and later builds take alike is sixteen characters of text.

Registration associates the key with a connection. Register travels in the clear apart from one field enciphered under the key, and a server MUST refuse a connection whose deciphered field is not what it expects, since that field is all that shows the client holds the key. schema/messages records the exchange, as Register and Registered.

Channels

In every range of this book

ChannelNameFamily
0registrationregistration
1requestsgame
2clockgame
3eventsgame
4transientgame
5chatchat
6rostersession

Messages

A message occupies one deciphered channel payload. The payload opens with the header the message’s family carries, and the body begins where that header ends.

schema/messages holds one file per message identity, and each file records one or more revisions. A revision carries the value identifying the message, the channel it travels on, its direction, how the transport delivers it, and the fields of its body.

Families

Every channel carries one family of messages, and schema/channels.json says which. A family fixes two things: the numbering its command values are drawn from, and the header that precedes every body on it. schema/families.json records both. Two channels of one family share a numbering, so a value identifies at most one message across both, and the same value on channels of different families is two unrelated messages.

A family whose header carries no command field has one message each way on each channel it rides, read from the payload’s first byte; its revisions number that message 0.

The family, not the channel, selects the header.

A revision names the channel it travels on, and names any others in alsoOn. Those channels carry the same family, so the command value means the same message on each, and the body is byte for byte the one the revision records. What changes between them is delivery: each entry states how the transport carries the message there. A server MAY send such a message on any channel the revision names, and what it gets is the delivery stated for that channel. A client reads it the same way on every one of them, so a server MUST NOT vary the body with the channel it chooses.

The command

A revision records the value that identifies it, and the family’s header says where that value sits on the wire. That value is not a field of the message: it belongs to the header, along with anything else the family carries before a body begins.

A family can keep some values of the leading byte for framing rather than for messages, and schema/families.json lists which. Where a family names an escape, that value means the real identifier is wider than a byte and travels elsewhere in the header, which is how a family numbers more messages than a byte holds. A revision records the identifier either way, and never the escape.

Directions

A revision states whether it travels clientToServer, serverToClient, or bidirectional. Direction is part of what identifies a message, so one value serves two messages travelling opposite ways within a family. A bidirectional revision claims that value both ways.

A container of several messages

A client unwraps no container: a payload whose command is 255 does nothing, on any channel. A server MUST NOT send one, because nothing inside it reaches the client.

Reading a body

A body begins where its family’s header ends. Fields occupy it in the order the revision lists them, each beginning where the one before it ended. A revision never restates a field its family’s header already carries, and never takes a name from it. Nothing is aligned and nothing is padded between fields. A field’s size is fixed by its type, given as a literal, carried by an earlier field, or one of the two words below.

Where a size or a count names an earlier field, it names one that has already been read and one holding an unsigned integer. It names either a whole field or one run of bits inside a field, and a run is written as the field name, a full stop, and the run name. remaining and terminated are reserved words rather than names, so no field carries either.

A field of a body names only fields of that body. A family’s header is read first, but it belongs to every message of the family rather than to this one, so nothing in a body is sized or governed by it.

What counts as an earlier field depends on what encloses the field doing the naming. An item of an array reaches the fields of the body around it. The fields of a struct reach only each other, because a struct is used wherever it occurs, so it cannot depend on what surrounds any one use.

remaining means every byte from where the field begins to the end of what encloses it: the message body, or the byte length of the struct or array the field sits inside. A field measured that way is the last one its enclosure defines, because nothing inside that enclosure can follow it.

An enclosure that states a byte length is itself an ordinary field, and fields follow it as usual. An enclosure that states none ends where the body ends, so it is the last field too, and so is any struct whose own last field is one of these.

A body ends where its last field ends, with one exception: a client accepts a Registered carrying bytes past its record, and takes no meaning from them. A sender MUST write the fields a revision lists and nothing after them.

Byte order

A revision of schema/protocol.json states the byte order that covers a version range, and every multi byte field in that range is read that way. A field that differs states its own order, which overrides the range.

The types

Integers. u8 through u64 and i8 through i64, in two’s complement. f32 and f64 are IEEE 754 binary floating point.

Bytes. A run of bytes with no interpretation. Its size is fixed, named by an earlier field, or remaining.

Strings. A run of bytes and an encoding, either utf8 or ascii. A size is a literal or the name of an earlier field. A string given one occupies that many bytes whatever its content, and the zero bytes at its end are padding rather than content, so they are dropped. A zero anywhere else belongs to the text and stays. A string sized terminated ends at the first zero byte, that byte belongs to the field, and it is the only one dropped. A string sized remaining carries every byte to the end of its enclosure, zeros included. A size counts bytes rather than characters.

Arrays. A run of one repeated shape. An array states either a count of items or a size in bytes, and never both. A count is a literal, the name of an earlier field, or remaining, which repeats to the end of the enclosure. A size in bytes repeats until those bytes are consumed, which is how a run whose length travels as a byte count is recorded.

Structs. A named group of fields, defined in schema/types and used wherever it occurs. A struct has revisions as a message does, and a message revision that holds one lies wholly within one of the struct’s revisions, which gives the layout it holds there. A struct occupies exactly the bytes its own fields occupy. Where its length travels on the wire instead, the field states a size in bytes, as a literal or as the name of an earlier field. A sending end MUST write a struct’s fields to fill that size exactly.

Bits. A field of one or more bytes divided into named runs, whose widths total exactly the bits those bytes hold. No run is wider than 32 bits. The bytes form one little endian word whatever the range’s byte order, or a big endian one where the field says so. Runs are listed from the least significant bit upward, and each reads as an unsigned integer of its own width.

Bit arrays. A run of the same group of bit runs, repeated a stated number of times. The groups follow one another from the low bits of the first byte upward, crossing byte boundaries without padding, and the field occupies as many whole bytes as the groups need. The bits above the last group are clear. A count is written as an array’s is.

Records. A group of fields named together and read one after another, with nothing between them and nothing around them. A record occupies exactly what its fields occupy. Unlike a struct it is written where it is used rather than defined in schema/types, and its fields reach the fields around it, so a record is a way of naming part of a message rather than a shape reused elsewhere.

What a field names

A size, a count, or a rule about whether a field is present names an earlier field. Five forms are written:

  • a name on its own, which is a field of the same enclosure;
  • a name, a full stop, and a run inside it, where that field is bits;
  • a name, square brackets, and a name inside them, which is the item of an earlier array standing at the same position as the item doing the naming, so that two arrays run together;
  • either of the first two inside {"field": …, "minus": N}, which is that field’s value less the literal N, and N is never larger than the value;
  • either of the first two inside {"field": …, "bitsSet": true}, which is how many bits of that field’s value are one.

Nothing else is computed.

Presence

A field states a presence rule when it occupies bytes only under a condition, and a field whose condition does not hold occupies no bytes at all. The rule names an earlier field or bit run holding an integer, and states a value it carries, or a set of values, any one of which satisfies it. Without one, any value other than zero satisfies the rule. A field its own rule left out holds no value, so a rule naming that field does not hold either.

A rule can instead name remaining, which no field is called. A field under that rule is present where the payload has bytes left at that point and absent where it has ended, so a message whose sender stops early reads as one whose later fields are absent. A sender that stops early MUST stop where a field under such a rule begins.

A rule can mark one of its sides unseen; that side’s layout is the one the field states.

A field that travels enciphered

A payload is enciphered as a whole once a connection has a cipher state, and a message says nothing about that. Before a cipher state exists, a payload can carry one field enciphered under the key both ends hold, and the field says so.

Such a field occupies whole cipher blocks, because a field filling part of one would travel half in the clear. Its recorded value is what the bytes mean once deciphered, so a reader deciphers the field alone and leaves the payload around it untouched.

Enumerated values

Where an integer field, or a run of bits inside one, takes a fixed set of values, the field lists what they mean, keyed by the value on the wire. Each entry names the value, in the same form a field name takes, and no two entries of one field share a name. A key fits the width and sign of what it names. A value with no entry has no meaning this specification states.

Revisions

A revision covers a range of client versions, from one version inclusive to another exclusive. Every revision states where it stops. Ranges of one message never overlap. A version no revision of a message covers has no such message: a client there neither sends nor takes it, and what a chapter says of it does not apply.

A revision covers no version that schema/protocol.json, schema/channels.json and schema/families.json do not all describe, because a range none of them reaches has no header, no byte order, and no channel to travel on.

Names and notes

A field name begins with a lower case letter and carries letters and digits after it. A message identity and a struct identity begin with a capital. A file is named for the identity it defines, and a message’s vectors sit in one directory named for that identity, with each capital starting a new part, lower case and joined by hyphens.

A field name is unique among the fields beside it, and an item of an array never takes the name of a field enclosing it.

Anything in schema/ carries a note wherever a fact needs words: a revision, a field, a run of bits, a value. A note states what the wire carries and what each end does. It carries no requirement keyword and says nothing changed.

How a message is delivered

A revision states whether the transport carries it reliably, unreliably, or unsequenced, which is what the message needs of the transport: a message another supersedes can be lost, and one that carries an account of what happened cannot. A server MUST send a message with the delivery its revision states.

Quick chat

Vectors

Every revision carries at least one conformance vector. A message vector opens with its family’s header and is read to the end. conformance/ says how a vector is written and how to run one.

Family headers

A field present when remaining is set is present exactly where the payload has bytes left at that point.

In 0.8.13.26–0.9.22.13

The game family:

FieldTypeWhat it is
echou16A client reads nothing here. It writes the command again, or 114 in CharacterSelected and ClientReady; a server writes the command.
commandu16Which message this is.
netIdu32A network object the message concerns. Which object, and whether it is the origin or the subject, is settled by each message rather than here, and some messages carry a value naming none.

The session family:

FieldTypeWhat it is
commandu8

The registration family:

FieldTypeWhat it is
commandu8

The chat family:

No header.

In 0.9.22.14–1.0.0.24

The game family:

FieldTypeWhat it is
commandu8255 introduces a container of several messages rather than a message of its own, which Messages describes.
paddingbytes, 3A client reads nothing here, and most of its own messages leave it unwritten. A server writes zero.
netIdu32A network object the message concerns. Which object, and whether it is the origin or the subject, is settled by each message rather than here, and some messages carry a value naming none.

The session family:

FieldTypeWhat it is
commandu8

The registration family:

FieldTypeWhat it is
commandu8

The chat family:

No header.

Objects and identifiers

How the things a match is about are named on the wire, and when an object enters and leaves a client’s world.

The identifiers

IdentifierWidthFormedNo one
Player id64 bits, signedthe player’s account; a client is given its own when started-1, every bit set
Client id32 bits, unsignedchosen by the server for each player at registration, counting from 04294967295
Seata place in a side listthe order of a side’s player ids in Rosteran empty place
Net id32 bits, unsignedchosen by the server for what it creates; worked out from a name for what a map holds0
Node8 bits, unsignedthe owning client’s client id plus 1, or 0 for an object no client owns0
Region id32 bits, unsignedchosen by the server for each region, and carried by RegionAddedsee below
Name hash32 bits, unsignedworked out from the name of a spell, an effect, a particle or a bone0

A field’s own definition gives its exact type. Where a field carries one of these, it carries it whole, at the width above.

In 0.8.13.26–0.9.22.13

No region id stands for no region.

In 0.9.25.24–0.9.25.35

A region id of 0 names no region: given a RegionAdded carrying 0, a client gives the region an id of its own, its own node in the top byte and a count below it, which no message from a server can name.

A server MUST give each player a client id from 0 to 252.

A client takes a client id only from 0 to 252, and leaves on any other.

How they relate

A player is known by a player id. A server answers a client’s Register with Registered, and the one carrying the client’s own player id gives the client its own client id.

In 0.8.13.26–0.9.22.13

A client acts on that Registered alone and ignores every other, so it pairs no other player’s player id with a client id. A server MUST send it before any create message, because a client given a create message before it has its own client id stops.

In 0.9.25.24–0.9.25.35

Registration pairs each player id with a client id: a server answers a client’s Register with one Registered for every seat. Every later message that names a player by client id is read through that pairing.

Roster lists each side’s player ids in order, and a player’s seat is their place in that list. A client finds a seat’s client id through its player id. SeatName, SeatChampion and the VersionSync seats name a player by player id; SeatLoadProgress names both.

A champion carries the client id of the player it belongs to. The CreateChampion carrying a client’s own client id makes that champion the client’s own.

In 0.9.25.24–0.9.25.35

A bot’s champion carries 4294967295.

Net ids

A net id names one object in a client’s world: a unit, a missile, a particle, a marker, a prop. The header of every game message carries one, and fields naming a unit, an owner or a target carry one too.

  • A server MUST NOT give an object net id 0, which names nothing.
  • A server SHOULD NOT give an object a net id whose top byte is 0xFF, which the identifiers of what a map holds use, nor one whose top byte is any client’s client id plus 1, which a client uses for objects of its own making.
  • A server MUST NOT give a new object a net id it has given another object in the same match, except in a soft reconnect (see below).

In 0.8.13.26–0.9.22.13

A client given a create message for a net id it already holds stops.

In 0.9.25.24–1.0.0.24

A client that still holds the earlier object gives the net id to the new one, so messages naming it reach the new object, and removing either leaves the id naming neither.

A create message carries a node beside the object’s net id.

Net ids of what a map holds

Some objects are on the field before any message puts them there, and no message ever does: the buildings a side defends, the shops beside them, and the spawn points a side’s minions come from. A receiving end knows them from the map it loaded, and every message naming one names it by an identifier worked out from that object’s name in the map.

The identifier is the CRC-32 of the name, with the top byte set:

identifier = crc32(name) | 0xFF000000

The name is taken byte for byte with its case kept, so OrderShop01 and orderShop01 are two names and give two identifiers. The CRC-32 is the common one: the polynomial 0x04C11DB7 read reflected, starting from 0xFFFFFFFF and finishing with every bit inverted, so the nine bytes 123456789 give 0xCBF43926.

Among the identifiers with that top byte are these:

NameIdentifier
Barracks_T1_C10xFF4A20F1
Barracks_T1_L10xFFD23C3E
Barracks_T1_R10xFF9303E1
Barracks_T2_C10xFFFF8F1F
Barracks_T2_L10xFF6793D0
Barracks_T2_R10xFF26AC0F
__P_Order_Spawn_Barracks__C010xFFB77171
__P_Order_Spawn_Barracks__L010xFFEB364C
__P_Order_Spawn_Barracks__R010xFF53B836
__P_Chaos_Spawn_Barracks__C010xFFBA00E8
__P_Chaos_Spawn_Barracks__L010xFFE647D5
__P_Chaos_Spawn_Barracks__R010xFF5EC9AF
____P_Chaos_Spawn_Barracks__C010xFF707D61
ChaosShop010xFF3A98D9
chaosShop010xFFA6170E
HQ_T10xFFF97DB5
HQ_T20xFFF02C0F
OrderShop010xFF8C490C
orderShop010xFF10C6DB

In 0.8.13.26–0.9.22.13

Map 1 holds the six Barracks names, HQ_T1, HQ_T2, the six spawn points named __P_Order_Spawn_Barracks__ and __P_Chaos_Spawn_Barracks__ with C01, L01 or R01, and the shops OrderShop01 and ChaosShop, whose identifier is 4279618595. Its turret buildings carry the identifiers their names give too: Turret_T1_C_00 to Turret_T1_C_07, Turret_T1_L_02, Turret_T1_L_03, Turret_T1_R_02, Turret_T1_R_03, Turret_T2_C_00 to Turret_T2_C_05, Turret_T2_L_01 to Turret_T2_L_03, and Turret_T2_R_01 to Turret_T2_R_03.

In 0.9.25.24–1.0.0.24

Every object a map places carries the identifier its name gives, turrets, navigation points and props among them.

In 0.9.25.24–0.9.25.35

MapHolds
1, 2the six Barracks names, HQ_T1, HQ_T2, orderShop01, chaosShop01, the six spawn points named __P_…, and turrets named Turret_T1_… and Turret_T2_…, Turret_OrderTurretShrine and Turret_ChaosTurretShrine among them
3Barracks_T1_C1, Barracks_T2_C1, HQ_T1, HQ_T2, OrderShop01, ChaosShop01, ____P_Chaos_Spawn_Barracks__C01, and turrets, Turret_T1_C_08 among them

The Barracks names above belong to inhibitors, whatever the name says. The minions a side sends out come from spawn points of their own, which are among the objects a map holds.

A client puts a minion on the field for a SpawnFromBarracks naming a spawn point, and creates nothing for one naming an inhibitor such as Barracks_T1_C1.

A server MUST name each object a map holds by the identifier its name gives.

In 0.8.13.26–0.9.22.13

CreateTurret creates a turret of its own at the place its body gives, rather than naming one the map holds. PlaceTurret, whose header names a turret building the map holds, creates a new turret at that building’s place: the building keeps its own identifier, and each PlaceTurret makes another turret.

In 0.9.25.24–1.0.0.24

CreateTurret gives a net id to a turret the map already holds, matched by name. Given to a turret that already has one, it gives it a second, and both name it.

In 0.9.25.24–1.0.0.24

CreateTurret matches a turret’s name without regard to case, and does nothing where the map holds no turret of that name.

What a client holds

A client holds an object from the message that creates it until the message, or the end of its life, that removes it. Creating messages are listed in Units. What a map holds, a client holds from the moment it loads the map.

EnterSight and EnterLocalSight carry no other message, and act only on a unit the client already holds.

Leaving a client’s sight removes nothing: LeaveSight and LeaveTeamSight hide an object, and it is held as before.

LeaveLocalSight hides an object too, and it is held as before.

In 0.8.13.26–0.9.25.35

A new SpawnPet for an owner removes that owner’s pet before it.

In 0.9.25.24–0.9.25.35

A client removes a nexus about 4 seconds after BuildingDied names it, and can fail as it does. An inhibitor BuildingDied names is held.

A soft reconnect

SoftReconnect rebuilds a client’s world without a new connection, in two halves. The first marks every unit and every object kept until a checkpoint, inhibitors aside. A create message for a marked net id replaces the marked object rather than keeping the id on it. The second removes every object still marked. In between, a server sends again each object the client is to keep. Each stage either marks or removes.

Messages about objects a client does not hold

A message whose header names a net id the client does not hold, or whose body names one it needs, does nothing, and the client answers nothing for it. Creating messages are the exception, and so are these:

  • CreateFollower does nothing where the unit it follows is not held.
  • A Replication batch skips the units a client does not hold, and goes unanswered (see Ordering).
  • SoundPlayed naming an owner the client does not hold plays the sound with no place.

SpawnPet names the pet’s owner in its header and carries the new pet’s net id in its body, and does nothing where that owner is not held.

In 0.9.25.24–1.0.0.24

A client sends a WaypointGroup’s WaypointAck before it reads any path, whatever units the paths name. A path for a unit not held is read through and dropped, and is not applied once an object takes that net id.

Nothing else is held back for later: a message that arrives before the message creating what it names is lost. Ordering says what that requires of a server.

A message naming its sender

A server MUST set any field naming the sender from the connection the message arrived on, and MUST NOT copy the value the message carried; otherwise one player can send messages every other client attributes to another.

Name hashes

Some things a message names are known to a client by name: a spell, an effect a unit carries, a particle, and a place on a unit that particles hang from. A message names one of these by a number worked out from its name.

The number is the ELF hash of the name with its capital letters lowered:

number = 0
for each byte b of the name, with A to Z made a to z:
    number = (number << 4) + b
    high = number & 0xF0000000
    if high != 0:
        number = number ^ (high >> 24)
    number = number & ~high

Every step is worked in 32 bits. Only A to Z change, so SummonerFlash and summonerflash give one number. A particle’s name includes its extension, so the number comes from global_ss_flash.troy and not from global_ss_flash. The nine bytes 123456789 give 0x0678AEE9.

A byte from 128 to 255 enters the hash as its value less 256, worked in 32 bits, rather than as itself.

NameNumber
SummonerFlash0x06496EA8
RegenerationPotion0x0E75DC7E
EzrealMysticShotMissile0x05FE9CE5
global_ss_flash.troy0x0058E369
L_HAND0x0725E844

A server MUST name each such thing by the number its name gives.

Ordering and acknowledgement

What arrives in what order, which numbers say that one statement supersedes another, and what a client answers with. A server whose messages arrive out of the order these rules expect has them ignored or lost.

Across channels

The transport delivers a channel’s reliable messages in the order they were sent, and drops an unreliable message that arrives after a later one on the same channel (see Transport). Nothing orders one channel against another.

A client acts on game messages in the order they arrive, whichever channel they arrive on, and holds none back for later but the paths Objects and identifiers names. A message that arrives before the message creating what it names is lost. So:

  • A server MUST send the message creating an object before any message naming it.
  • A server MUST NOT rely on a message on one channel arriving before a message sent later on another. Where one depends on the other, a server sends both on one reliable channel, or sends the second once the transport has acknowledged the first.

The messages creating a unit travel reliably on the events channel, while Replication and WaypointGroup travel unreliably on the transient channel, so either can overtake the message creating the unit it names. A Replication batch skips a unit the client does not hold, and goes unanswered (see below), so a server sends a newly created unit’s values again until a batch naming it is answered.

In 0.9.25.24–1.0.0.24

A server can instead send Replication reliably on the events channel.

Numbers that supersede

Several messages carry a syncId: a number that lets a client tell a newer statement from an older one, or a server tell which statement an answer is for. Each family keeps its own numbers, and compares them in its own way.

FamilyCarried byCountedA client takes a statement
ReplicationReplicationper unit and per group of values, from 0whose number is greater than the last taken for that unit and group, with no wrapping: 0 is never taken
ViewCamera, from a clientper client, counting up as the view moves(a client’s own report)

In 0.8.13.26–0.9.22.13

A client compares no numbers on movements: it takes every path as it arrives, whatever syncId it carries.

In 0.9.25.24–1.0.0.24

WaypointGroup, WaypointGroupAtSpeed, Path, PathWithSpeed, EnterSight, and UnitStopped and SpellCastAnswer where they carry one, share one count per unit, from -1. A client takes a statement whose number is equal to the unit’s or ahead of it; a number 230 or more behind counts as ahead, so the count can wrap. A group of movements carries one syncId for every unit in it. A server MUST give each statement about a unit a number equal to or ahead of the last it gave that unit.

A statement a client does not take changes nothing; what follows it still applies.

For replication, a server MUST give each batch carrying a unit a number greater than the last batch carrying that unit, and MUST NOT give one 0. A server SHOULD give every batch a number of its own, so that a TransientAck names one batch.

In 0.8.13.26–0.9.22.13

A client sends a view report again until a server answers with its number. A server MUST answer each view report with CameraAck, carrying its number.

In 0.9.25.24–0.9.25.35

Nothing answers a view report: a client sends its latest report again, twice the round trip time plus 1/30 of a second apart, for as long as the match runs.

What a client answers

A server sendsA client answers
QueryStatusAnswernothing; it asks again with QueryStatus until told the server is ready
WaypointGroup, WaypointGroupAtSpeedWaypointAck for each group, taken or not, naming the units in it that carried a token (see Movement)
ReplicationTransientAck, where every unit the batch names is held
ClockSyncClockReply (see Time)

In 0.9.25.24–1.0.0.24

A client also answers each Path and PathWithSpeed, taken or not, with a WaypointAck carrying its syncId.

A client sends these answers when it plays a match, not while it plays back a stream.

Space

How positions, distances and directions are carried, whichever system carries them, and what a map gives that nothing on the wire carries.

Units and axes

Positions and distances are in world units. The ground is the plane of x and z, and y is height. A field that carries a position on the ground carries x and z; one that carries a point in the world carries x, y and z. Where a message leaves height out, a receiving end takes it from the ground beneath.

A position travels as a 32-bit float on each axis unless its definition says otherwise. Where the paths of Movement and MovementAtSpeed are compact, they carry their points as integers measured from the map’s origin, and Movement says how those points are worked out.

Directions

A direction is carried as a vector, not as an angle:

  • A unit’s facing in the movement state EnterSight carries is a pair along the ground, x and z.
  • UnitStopped, MissileState, a particle’s facing and a view’s direction in Camera carry x, y and z.
  • FaceDirection carries x, y and z, and turns the unit to face along them.

FaceDirection turns the unit along x and z alone, and leaves it as it is where both are 0.

A champion carries no facing of its own when created.

In 0.8.13.26–0.9.22.13

A champion is created facing +z, whatever its map’s table of spawn positions says, and so is a monster.

In 0.9.25.24–1.0.0.24

A champion faces as its map’s table of spawn positions says (see CreateChampion).

A prop of scenery carries angles instead: MapProp gives its turn as pitch, yaw and roll, in degrees, where yaw 0 faces +z and yaw 90 faces +x. For an active prop, the same three fields are a direction vector.

Maps

VersionSync names the map to load by number. A client takes a map’s buildings (see Objects and identifiers), spawn positions and path origin (see Movement) from its own data (see The client’s data), and can load only a map it has data for.

In 0.8.13.26–0.9.22.13

A client loads the map its own settings name, map 1 where they name none, and has data for map 1 alone, Summoner’s Rift.

In 0.9.25.24–0.9.25.35

A client has data for maps 1, 2 and 3.

Time

Which clocks a match runs on, and which of them each time on the wire is measured against.

How a time is carried

A time is in seconds, as a 32-bit float, unless its definition says otherwise. A field is either a moment, read against a clock, or a duration, which starts when the message arrives. Every definition says which.

Exceptions:

  • Paused carries the time left in a hold as a whole number of seconds.
  • A stream’s chunk and key frame intervals (StreamMetadata) are in milliseconds.

The match clock

The match runs on a server’s clock, which counts seconds from 0 as play begins. ClockSync states where it stands, and a client sets its own clock to that, plus its allowance for how late the statement arrived. A client answers with ClockReply, from which a server measures the round trip. A server can report the round trip it measured with ClockConvergence.

A client takes the round trip ClockConvergence reports into its allowance for lateness.

Each ClockConvergence sets a client’s allowance to 0.8 times what it was plus 0.1 times the round trip it reports.

A server sends ClockSync with 0 as play begins (see Joining a match), and again whenever it means a client’s clock to catch up with its own.

In 0.8.13.26–0.9.22.13

A client’s match clock starts at 0 as the client finishes loading, and runs on the client’s own timer from then; a ClockSync sets it wherever it stands.

In 0.9.25.24–1.0.0.24

A client’s match clock does not run until the first ClockSync arrives, which sets it. After that it runs on the client’s own timer, and a later ClockSync only corrects it, however long a server leaves between them.

In 0.9.25.24–1.0.0.24

GameSpeed sets the pace of the match clock, and a hold sets the pace to 0 until play resumes. A server that runs a match at other than normal speed MUST send GameSpeed with that speed, or a client’s match clock runs apart from its own.

In 0.9.25.24–1.0.0.24

A client runs no clock but the match clock, and takes whatever speed GameSpeed gives.

In 0.9.25.24–0.9.25.35

A GameSpeed that arrives during a hold sets the match clock running again at once.

A client shows the match’s time counted from the moment on the match clock at which the match began.

In 0.8.13.26–0.9.25.35

A client takes that moment from its own match clock, once, as its game loop runs.

Moments on the match clock include:

  • when a monster arrives (CreateNeutral’s spawnAt, where it carries one);
  • when a prop’s animation starts (MapPropChanged, where it carries one);
  • when an assisting unit last dealt damage (ClientEvent);
  • when a champion’s passive comes off cooldown, where a client is told it (see Replication).

A server MUST state each of these on the clock it sends in ClockSync.

A stream’s clock

A watching client plays a stream against a clock of the stream’s own, which the stream’s records set (see Watching a match).

Sides and slots

Values many systems share: which side something is on, and how a unit’s spell, item and effect slots are numbered.

Sides

A side is 100 or 200, for the two sides that play, or 300 for what belongs to neither, such as a monster of no side. Where a field takes 0, it names no side; its note says what that means. A few fields carry a side in another form, and their notes say which.

Roster lists the players of each side, and a player’s place in that list is their seat (see Objects and identifiers).

Spell slots

A champion has two books of spells. Its own book holds these slots:

SlotHolds
0 to 3the champion’s spells; 3 is its ultimate
4 onthe spell of the item in the inventory slot four below, for each such slot
after thosespells a server places for the match’s own purposes

Its summoner book holds the two summoner spells, in slots 0 and 1.

A message that names a spell slot either carries a flag, set for the summoner book and clear for the champion’s own, or names the champion’s own book only. A cast’s description (SpellCast) carries no flag: the spell’s own data says whether it is a summoner spell.

In 0.8.13.26–0.9.22.13

A cast’s slot also takes 64, for a basic attack. A client reports any other slot beyond the book as an error, and carries on.

In 0.9.25.24–1.0.0.24

A cast’s slot also takes 64 to 70, for a basic attack.

A server MUST NOT name a champion book slot beyond the book’s last slot.

In 0.8.13.26–0.9.22.13

A champion’s own book ends at slot 22. A client reports an Autocast naming a slot above 22 as an error, and keeps it all the same. A server MUST NOT name a champion book slot above 22.

In 0.9.25.24–0.9.25.35

A champion’s own book ends at slot 44. A client reports an Autocast naming a slot above 44 as an error, and keeps it all the same. A server MUST NOT name a champion book slot above 44.

Inventory slots

A champion’s inventory holds the six items a player sees and uses in slots 0 to 5, and further slots after them up to its last.

An item is cast from the spell slot four above its inventory slot, and moving an item moves its spell with it. A server MUST NOT name an inventory slot beyond the inventory’s last slot.

In 0.8.13.26–0.9.22.13

A champion’s inventory ends at slot 14, and holds neither a trinket nor an item for recalling. A client takes an answer about an item naming a slot above 14 all the same, reporting it as an error and writing past the end of the inventory. A server MUST NOT name an inventory slot above 14.

In 0.9.25.24–1.0.0.24

A champion’s inventory ends at slot 36, and a player sees and uses only slots 0 to 5. A client takes a RemoveItemAnswer naming a slot above 36 all the same, reporting it as an error and writing past the end of the inventory. A server MUST NOT name an inventory slot above 36.

Effect slots

Adding an effect to a slot replaces whatever held it, and removing one empties the slot whatever its name.

Each unit has 32 slots for the effects it carries, 0 to 31. A client uses a slot above 31 all the same, past the end of the unit’s slots. A server MUST NOT name an effect slot above 31.

The client’s data

What a server needs that no message carries, and takes from the files a client installs: the buildings and spawn points of a map, the ground units walk on, and the figures of champions, items and spells. A server SHOULD take its figures from these files: a client draws a match from them, and figures from elsewhere disagree with what it shows.

What a server reads

  • The buildings of a map: the names a client knows its turrets, inhibitors and nexuses by, from which Objects and identifiers works out the identifier of each.
  • The spawn points: where each side’s champions begin.
  • The ground: the grid a map’s units walk on, which a server needs to find paths.
  • The figures: each champion’s base statistics, each item’s price and what it is built from, and each spell’s cooldowns, costs and ranges, which a server states through replication and SpellCast.

In 0.8.13.26–0.9.25.35

A path carries its points as they lie in the world, and takes no origin from the ground.

In 0.8.13.26–0.9.22.13

The client has map 1 alone. It loads the map its own game configuration names under the key Mission of the section Hacks, Map1 where that is absent, and no message names the map.

In 0.9.25.24–0.9.25.35

The client has maps 1, 2 and 3.

A client installs its files under one root, with the paths below; an install that packs them into archives keeps the same paths inside.

Buildings. LEVELS/Map1/Scene/room.dsc lists a map’s scene objects, one line each: a file name and a quality number. Each object’s own file sits beside it and gives its name. A client creates no object from a name holding _Destroyed or _FB. On map 1 the names run Turret_T<side>_<lane>_<number> for a lane turret, Barracks_T<side>_<lane>1 for an inhibitor and HQ_T<side> for a nexus, side 1 for Order and 2 for Chaos and lanes L, C and R, with a shrine turret for each side; the numbers differ between the sides, and a server MUST take the names from the files.

In 0.8.13.26–0.9.25.35

Each object’s file is .sco as text or .SCB as binary, and gives its name on its Name= line.

In 0.8.13.26–0.9.22.13

A name’s opening says what the object is: Turret a turret, Barracks an inhibitor, HQ_ a nexus. CreateTurret names no building of the map: it makes a new turret where it says, under the object and character names it carries.

In 0.9.25.24–1.0.0.24

CreateTurret names a building by its name alone, compared without regard to case, and one naming no building does nothing.

In 0.9.25.24–0.9.25.35

A name’s opening says what the object is, the first match winning and a minion spawner’s tested before Barracks: Turret a turret, Barracks an inhibitor, HQ_ a nexus.

Objects and spawn points. A champion begins at its side’s spawn point, __Spawn_T1 for Order and __Spawn_T2 for Chaos.

The spawn points, the navigation points and the marker of the level’s size are scene objects, listed in room.dsc like the buildings.

In 0.8.13.26–0.9.22.13

A champion begins on its side’s spawn point itself, or at (6000, 0, 6000) on a map with none.

In 0.9.25.24–1.0.0.24

A champion begins at its side’s spawn point moved by an offset from DATA/Characters/HeroSpawnOffsets.inibin, read from the section Order<n> or Chaos<n> under the keys Pos<i> and Facing<i>, where i is one more than CreateChampion’s spawn index. A spawn index of 6 or more begins the champion on the spawn point itself.

The ground. A client walks units on LEVELS/Map1/AIPath.aimesh_ngrid, a binary grid. Its layout is unspecified.

The grid’s name is the map’s own, AIPath.aimesh with _ngrid after it: no setting of the mode chooses it.

The figures. Each is an inibin file: a champion’s base statistics in DATA/Characters/<Champion>/<Champion>.inibin; an item, its price among its figures, in DATA/Items/<id>.inibin; and summoner, item and shared spells in DATA/Spells/<Spell>.inibin.

A champion’s spells and attacks are in DATA/Spells/<Spell>.inibin with all other spells.

In 0.8.13.26–0.9.22.13

No map adds items of its own, and there are no figures for a whole mode.

In 0.9.25.24–1.0.0.24

Map 3 alone adds an Items.inibin. DATA/Globals/ holds figures for the whole game in UnitStats, bounty and ColorSettings.

Joining a match

What passes between a client and a server from connection until play begins, in order.

Starting a client

A client learns where to connect from its command line. It takes three arguments it needs nothing in, which can be empty, and then a fourth holding four words separated by single spaces: the server’s IPv4 address, its UDP port, the key (see Transport), and the player id the client registers as. The client connects to that address and port, registers as that player, and enciphers its proof under that key.

A client finds each argument between a pair of double quotes, and reads nothing outside them.

In 0.8.13.26–0.9.22.13

A client whose command line holds no double quote ends.

In 0.9.25.24–1.0.0.24

Any whitespace separates the words of the fourth argument. A client whose command line holds no double quote takes the command line it saved on an earlier run instead, and one holding .rep anywhere plays a replay rather than connecting.

Registering

A client’s first payload is Register, on the registration channel. The note on Registered says what a server answers with: one answer for every seat.

A client knows the answer meant for it by the player id it registered as, not by the client id, and takes the client id that answer carries as its own. Every other answer tells it which client id stands for which player.

In 0.8.13.26–0.9.22.13

A client waits for the answer naming its own player id as long as it takes, and offers its player no choice.

In 0.9.25.24–1.0.0.24

A client waits 30 seconds for the answer naming its own player id. Then it offers its player to wait another 30 seconds or to give up, and leaves on giving up.

Asking whether a server is ready

A client then sends QueryStatus over and over. A server MUST answer each one with QueryStatusAnswer, at least until it has answered that it is ready. While the answers say the server is not ready, a client stays on a black screen and keeps asking. A server that needs time before a match can begin answers that it is not ready until it is.

A client stops asking once an answer says the server is ready, and a query it sends after that answer needs none.

Stating a build

Once an answer says the server is ready, a client sends ClientVersion once. A server answers with VersionSync, and a client loads only where its agreement says the builds agree.

In 0.8.13.26–0.9.22.13

VersionSync names neither the map nor anyone at the match: a client loads the map its own configuration names (see The client’s data).

In 0.9.25.24–1.0.0.24

VersionSync names the map to load and everyone at the match.

Taking a seat

Straight after VersionSync, a client sends JoinSide on the roster channel. A server answers with one Roster, then a SeatName and a SeatChampion for each seat a player holds.

Loading

A client reports how far loading has got with LoadingProgress, repeatedly through loading. A server answers each report with SeatLoadProgress on the transient channel, carrying the report’s figures under the seat that reported. A client goes on reporting after its progress reaches 100, until play begins.

A client waits on no other seat. SpawnStart, SpawnEnd and StartGame are what move a client on, and StartGame alone ends its loading. A server that means its players to begin together sends StartGame to none of them until every client has sent ClientReady.

In 0.9.25.24–1.0.0.24

A client writes zero where its player id goes in LoadingProgress.

In 0.9.25.24–0.9.25.35

A server MUST put the seat’s player id in SeatLoadProgress: the loading screen shows a seat’s card from the VersionSync seat with that id.

The spawn run

Once a character is settled, a client sends CharacterSelected, once.

A client drops nothing for arriving before CharacterSelected.

A server answers with SpawnStart, states everything on the field as play opens, and closes the run with SpawnEnd. A run carries:

A client takes these in any order within the run.

A run MUST carry at least SpawnStart, the CreateChampion carrying the client’s own client id, and SpawnEnd. Given only those, a client still enters play, showing its champion’s portrait, health, resource and spells. It draws the champion on the map only once an EnterSight places it there, with its name and health bar over it.

A client answers each Replication batch with a TransientAck naming that batch’s syncId. It sends one answer for each batch, in the order the batches came, including a batch that repeats the syncId of the batch before it.

In 0.9.25.24–1.0.0.24

A client answers a batch as soon as it arrives, within the run or not, and never answers one naming a unit it does not hold.

Starting play

A client sends ClientReady after SpawnEnd and after its answers to the run’s batches, while it is still reporting its loading. A server MUST answer with StartGame, and later sends MatchStarted, with other messages free to come between them; MatchStarted carries 0 (see Time).

A client sends ClientReady as soon as SpawnEnd arrives, and StartGame alone moves it into play.

In 0.9.25.24–1.0.0.24

A client whose connection drops before play begins ends rather than connecting again.

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).

Register

What a client sends first. It arrives before the connection has a cipher state, so the payload travels in the clear apart from the proof.

Definition.

In every range of this book

Command 0 on registration, sent by the client, reliable.

FieldTypeWhat it is
leadingbytes, 3Arbitrary; it carries no meaning.
clientIdu32A client writes zero here.
playerIdi64Who the sender claims to be, as its launch line names the player. The proof is what settles the claim.
proofi64The player id enciphered with the 16-byte key both ends already hold; a plain copy where the client has no key.

Registered

What a server answers a registration with, naming a player in the match and the seat they occupy. It shares its command value with the request it answers, which travels the other way, and it is one fixed size.

Definition.

In every range of this book

Command 0 on registration, sent by the server, reliable.

FieldTypeWhat it is
leadingbytes, 3Unused; a server writes zero.
clientIdu32The client id playerId holds. Where playerId is the client’s own, the client takes this client id as its own and goes on.
playerIdi64Who occupies that seat. A client keeps the pair of clientId and playerId from every answer, and takes the answer as its own only where this is its own player id; it reads nothing after it.

QueryStatus

What a client sends to ask a server for its state. It carries nothing of its own. The header names no object: it carries zero.

Definition.

In every range of this book

Command 3 on requests, sent by the client, reliable.

No body.

QueryStatusAnswer

What a server returns when asked whether it is ready. The header names no object: a server writes zero.

Definition.

In every range of this book

Command 4 on events, sent by the server, reliable.

FieldTypeWhat it is
readyu8Whether the server is ready; any value but zero ends the client’s wait. While answers say it is not, a client keeps asking and goes no further, which Joining a match sets out. Values: 0 no, 1 yes.

ClientVersion

What a client sends to state which build it is. The header names no object: it carries zero.

Definition.

In every range of this book

Carried on requests, sent by the client, reliable, under these commands:

BuildsCommand
0.8.13.26–0.9.22.1371
0.9.22.14–1.0.0.2467
FieldTypeWhat it is
clockf32The client’s own clock as it sends this, in seconds.
clientIdu32The client id the sender holds: that of the client reporting.
texttext, 256 bytesThe build the client runs, as text ending at a zero byte; the bytes after that zero carry nothing.
Vectors (1)

one-on-0-8-13-26

VersionSync

What a server sends once a client has said which build it runs, saying whether the two agree. The header names no object: it carries zero.

Definition.

In 0.8.13.26–0.9.22.13

Command 72 on events, sent by the server, reliable.

It carries only agreement and build.

FieldTypeWhat it is
agreementu81 lets the client go on into the game. For 0 a client shows both versions and leaves; for any other value it leaves, showing nothing.
buildtext, ended by a zero byteThe server’s version, ended by a zero byte; the two take at most 512 bytes, and a client fails on a longer one.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 68 on events, sent by the server, reliable.

It also says which map to load, who is at the match, and everything else settled before play.

FieldTypeWhat it is
agreementu8Nonzero where the builds agree, letting the client go on into the game. For 0 a client shows both versions, reports a build mismatch and leaves.
mapi32Which map to load. Space keys the path origins by the same maps.
seats12 × SeatEvery place at the match, held or empty.
buildtext, 256 bytesWhich build the server serves, shown and not checked. Written out in full and padded with zero bytes to the width above; a client reads it up to the first zero byte.

JoinSide

What a client sends to ask for a seat on one of the two sides while the match is being put together.

Definition.

In 0.9.22.14–1.0.0.24

Command 100 on roster, sent by the client, reliable.

FieldTypeWhat it is
paddingbytes, 3Arbitrary; it carries no meaning.
clientIdu32The client id the sender holds, that is, the id of the client asking.
sideu32The side it asks for; a client asks for 100.

Roster

What a server sends to lay out both sides and who is on them, while the match is being put together.

Definition.

In 0.9.22.14–1.0.0.24

Command 103 on roster, sent by the server, reliable.

FieldTypeWhat it is
paddingbytes, 3Unused; a client reads nothing here.
sideRoomu32How many seats side 100 has room for.
otherSideRoomu32How many side 200 has room for.
gapbytes, 4Unused; a client reads nothing here.
side24 × i64The players on side 100, twenty four places of a player identifier’s width; the client copies as many as sideRoom says, so a server keeps sideRoom at 24 or less; a larger one has no defined effect. sideTaken says how many of the leading places carry a player, and the rest hold zero.
otherSide24 × i64The players on side 200, read the same way under otherSideRoom and otherSideTaken, with otherSideRoom kept at 24 or less.
sideTakenu32How many of side 100’s places carry a player.
otherSideTakenu32How many on side 200.

SeatName

What a server sends to say what a seat is called, while the match is being put together.

Definition.

In 0.9.22.14–1.0.0.24

Command 102 on roster, sent by the server, reliable.

FieldTypeWhat it is
paddingbytes, 7Unused; a client reads nothing here.
playeri64Whose name this is. It has a player identifier’s width.
skini32Which look the seat’s champion wears. A client reads nothing here.
nameLengthu32How many bytes the name below occupies, counting the byte that ends it. A client reads nothing here, and takes the name up to its first zero byte.
nametext, sized by nameLength minus 1What the seat is called. It is not padded.
terminatorbytes, 1A zero byte closing the text, which the length above counts.

SeatChampion

What a server sends to say which champion a seat is playing, while the match is being put together.

Definition.

In 0.9.22.14–1.0.0.24

Command 101 on roster, sent by the server, reliable.

FieldTypeWhat it is
paddingbytes, 7Unused; a client reads nothing here.
playeri64Whose champion this is. It has a player identifier’s width.
skini32Which look the champion wears.
assetLengthu32How many bytes the name below occupies, counting the byte that ends it. A client reads nothing here, and takes the name up to its first zero byte.
assettext, sized by assetLength minus 1The champion the seat plays, as the name the client loads the champion’s data under. It ends with a zero byte and is not padded.
terminatorbytes, 1A zero byte closing the text, which the length above counts.

LoadingProgress

What a client sends while a match loads, saying how far it has got. The header names no object: it carries zero.

Definition.

In 0.9.22.14–1.0.0.24

Command 113 on requests, sent by the client, unreliable.

FieldTypeWhat it is
clientIdu32The client id the sender holds, that is, the id of the client reporting.
playerIdi64Zero.
percentf32How far loading has got, from zero to one hundred.
etaf32How many seconds the client expects loading still to take.
status4-byte bits
status.countbit 0 to 15It rises with each report, not always by one, until it wraps.
status.pingbit 16 to 30The round trip time the client measures, in milliseconds.
status.unusedbit 31Never written by a client; it carries nothing.
done1-byte bits
done.loadedbit 0Set once loading is done.
done.unusedbit 1 to 7Carries nothing; a client never writes these bits.
texttext, ended by a zero byteA text the client also keeps, at most 63 characters, ended by a zero byte. What it says is not recorded; a server ignores it.

SeatLoadProgress

What a server sends to tell everyone how far one seat has got through loading, and how it is holding up. A later report supersedes an earlier one, so losing one costs nothing. The header names no object: a server writes zero.

Definition.

In 0.9.22.14–1.0.0.24

Command 114 on transient, sent by the server, unreliable.

FieldTypeWhat it is
clientIdu32The client id this is about.
playeri64Who occupies it.
progressf32How far through loading it is, from zero to one hundred.
secondsLeftf32How much longer it is expected to take, in seconds.
status4-byte bitsOnly ping is read.
status.unusedLowbit 0 to 15Unused; a server writes zero.
status.pingbit 16 to 30Drawn as the seat’s ping indicator.
status.unusedHighbit 31Unused; a server writes zero.
done1-byte bits
done.loadedbit 0Where set, a client shows secondsLeft as zero.
done.unusedbit 1 to 7Unused; a server writes zero.
statusTexttext, 64 bytesRead once done.loaded is set and the bar is nearly full: a client compares it, ignoring case, with a fixed phrase saying champions are being spawned, and shows a spawning label where it matches and a ready label otherwise. Padded with zero bytes.

SpawnStart

What a server sends to open the run of units a client is about to be told about. The header names no object: a server writes zero.

Definition.

In every range of this book

Command 5 on events, sent by the server, reliable.

FieldTypeWhat it is
countu8A client reads nothing here. A server writes zero.

SpawnEnd

What a server sends to close the run of units it opened with. The header names no object: a server writes zero.

Definition.

In every range of this book

Command 12 on events, sent by the server, reliable.

A client answers it at once with ClientReady.

No body.

StartGame

What a server sends to begin play. The header names no object: it carries zero.

Definition.

In every range of this book

Command 13 on events, sent by the server, reliable.

No body.

ClientReady

What a client sends once it has loaded and is ready to play. The header names no object: it carries zero.

Definition.

In every range of this book

Command 16 on requests, sent by the client, reliable.

The message is the header alone. A client sends it at once on SpawnEnd.

No body.

CharacterSelected

What a client sends once a character is settled on. It carries nothing of its own. The header names no object: it carries zero.

Definition.

In every range of this book

Command 15 on requests, sent by the client, reliable.

No body.

MatchIdentity

What a server sends to tell a client which match this is and what its player is called. The header carries zero.

Definition.

In every range of this book

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.8.13.26–0.9.22.13113
0.9.22.14–1.0.0.24111
FieldTypeWhat it is
gamei64The match’s identifier. A client only logs it.
nametext, 128 bytesThe player’s name, padded with zero bytes. A client reads nothing of it.
Vectors (1)

one-on-0-8-13-26

ResyncEnded

What a server sends to end the resynchronising a client began on its own Reconnected, after which it takes spawns again as they come.

Definition.

In 0.9.22.14–1.0.0.24

Command 119 on events, sent by the server, reliable.

No body.

Units

How a server puts objects on the field and takes them away: champions, minions, neutral monsters, turrets, pets, markers and props. What a unit then does is in Movement, Combat and Spells, and what it is worth in Replication.

Every object is named by a net id, and Objects and identifiers says what removes each kind of object.

Creating

Each kind of object has its own message:

  • a champion, CreateChampion, which, carrying the client’s own client id, also makes that champion the client’s own; a bot’s champion, the same CreateChampion naming no client, or SpawnBot;
  • a minion sent out from a side’s barracks, SpawnFromBarracks, and a unit like one, such as a ward, SpawnUnit;
  • a monster of no side, CreateNeutral; a pet, SpawnPet;
  • a turret, CreateTurret (The client’s data says how it names one), and a turret of the server’s choosing, SpawnTurret;
  • an object that follows a unit, CreateFollower, and a change to what it follows, FollowerMaster;
  • an unseen marker, SpawnMarker, which other messages can name and MarkerMoved moves;
  • a prop, a thing that stands on the map and is looked at, MapProp, and a change to one, MapPropChanged.

CharacterPreload has a client load a character’s art ahead of need.

A client acts on a CreateChampion or a CreateNeutral whenever it arrives, before CharacterSelected as after.

Changing and removing

TeamChanged moves a unit to another side, and ChampionRemoved takes a champion out of the world. A unit’s death is in Combat.

Bots

A server can tell a client what a bot is thinking (BotDebug), weighing (BotTargets) or doing (BotState). None of them changes what a player sees.

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).

CreateChampion

What a server sends to put a champion on the field. The header carries zero or names the object this is about; a client accepts either.

Definition.

In 0.8.13.26–0.9.22.13

Command 6 on events, sent by the server, reliable.

The champion takes the id in champion. A server sends it on its own. A client stands it at its side’s one fixed spawn point, or at 6000, 0, 6000 where that point is not set.

FieldTypeWhat it is
championu32The name the champion answers to, so later messages can name it.
nodeu8Which network node the object belongs to, in a field of its own.
clientIdu32The client id of the player the champion belongs to. A client takes the champion carrying its own client id as its own, and any other as belonging to no client of its own.
sideu8Nonzero for side 100, zero for side 200.
flagu8Passed to the champion as it is made; what it changes is not recorded.
nametext, 40 bytesWhat the seat holding it is called. Written out in full and padded with zero bytes to the width above.
assettext, ended by a zero byteThe champion it is, ended by a zero byte; the two take at most 64 bytes, and a client fails on a longer one.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–0.9.25.20

Command 6 on events, sent by the server, reliable.

The champion takes the id in champion, not the header’s; a client first removes any object holding that id. For the client’s own seat, name also becomes its own player’s name. A client stands the champion at its side’s one spawn point.

FieldTypeWhat it is
championu32The name the champion answers to, so later messages can name it.
clientIdu32The client id of the player the champion belongs to, or 4294967295 where it belongs to none, as a bot’s does. A client takes the champion carrying its own client id as its own.
nodeu8Which network node the object belongs to, in a field of its own.
skillLevelu8It has no effect.
sideu8Nonzero for side 100, zero for side 200.
botu8Nonzero where a bot plays the seat and nobody holds it; its shown name is then the client’s own bot name for asset, and name has no effect.
skini32Which look it wears.
nametext, 40 bytesWhat the seat holding it is called. Written out in full and padded with zero bytes to the width above.
assettext, 128 bytesThe champion it is: the name the client loads its art and sound under, written and padded as above.
Vectors (1)

one-on-0-9-22-16

In 0.9.25.21–1.0.0.24

Command 6 on events, sent by the server, reliable.

The champion takes the id in champion, not the header’s; a client first removes any object holding that id. For the client’s own seat, name also becomes its own player’s name.

FieldTypeWhat it is
championu32The name the champion answers to, so later messages can name it.
clientIdu32The client id of the player the champion belongs to, or 4294967295 where it belongs to none, as a bot’s does. A client takes the champion carrying its own client id as its own.
nodeu8Which network node the object belongs to, in a field of its own.
skillLevelu8It has no effect.
sideu8Nonzero for side 100, zero for side 200.
botu8Nonzero where a bot plays the seat and nobody holds it. A client only keeps it; the shown name is name as sent.
spawnIndexu8Where the champion first stands and faces. From 0 to 5, its side’s base position plus the offset the map sets for the side’s head count (players and bots) and this index plus one, facing as the map sets for them. A client works out the head count itself, counting SpawnStart’s bots in it. From 6 up, the base position itself, facing along +X. Movement or sight data replaces it.
skini32Which look it wears.
nametext, 40 bytesWhat the seat holding it is called. Written out in full and padded with zero bytes to the width above.
assettext, 128 bytesThe champion it is: the name the client loads its art and sound under, written and padded as above.
Vectors (1)

one-on-0-9-25-21

SpawnFromBarracks

What a server sends to put a unit on the field from the place its side sends them out of.

Definition.

In 0.8.13.26–0.9.22.13

Command 53 on events, sent by the server, reliable.

A server sends it on its own. The unit stands at the barracks’ own position, on the barracks’ side.

FieldTypeWhat it is
unitu32The name the unit answers to, so later messages can name it.
nodeu8Which network node the unit belongs to, in a field of its own rather than as part of the name that follows.
waveu8Which run of units it belongs to.
kindu8What sort of unit it is, from 0 to 3. A value above 3 has no defined effect.
unreadu8A client reads nothing here. A server writes zero.
damageBonusi16What is added to the damage it deals.
healthBonusi16What is added to the health it holds.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 49 on events, sent by the server, reliable.

The header names the barracks, and a client handles the message only where it holds that barracks; the new unit’s id is in unit.

FieldTypeWhat it is
unitu32The name the unit answers to, so later messages can name it.
nodeu8Which network node the unit belongs to, in a field of its own rather than as part of the name that follows.
waveu8Which run of units it belongs to.
kindu8What sort of unit it is, from 0 to 3; any other value has no defined effect.
damageBonusi16What is added to the damage it deals.
healthBonusi16What is added to the health it holds.
Vectors (1)

one-on-0-9-22-14

SpawnUnit

What a server sends to put a minion-like unit on the field, such as a ward.

Definition.

In 0.8.13.26–0.9.22.13

Command 90 on events, sent by the server, reliable.

A client deletes no object first; one already holding the new unit’s id keeps it alongside the new unit. A client fails where it cannot load the unit’s art. clone, where nonzero and held, is only linked to the new unit; nothing of it is copied.

FieldTypeWhat it is
unitu32The name the new unit answers to.
nodeu8Which network node the unit belongs to.
atXf32Where it stands, along one ground axis, in world units.
atYf32Where it stands, in height, in world units.
atZf32Where it stands, along the other ground axis, in world units.
teamu32The side the unit is on, as a whole number.
nametext, 64 bytesIts name, padded with zero bytes.
assettext, 64 bytesThe name the client loads its art under, padded with zero bytes.
cloneu32The unit the new one is linked to, or zero.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 87 on events, sent by the server, reliable.

A client gives the new unit its id and node, deleting nothing first. Where clone names a unit it holds, a client only links the new unit to it as a clone and copies nothing of it; zero or an unknown id leaves no link. The header names the unit that put it there.

FieldTypeWhat it is
unitu32The name the new unit answers to.
nodeu8Which network node the unit belongs to.
atXf32Where it stands, along one ground axis, in world units.
atYf32Where it stands, in height, in world units.
atZf32Where it stands, along the other ground axis, in world units.
nametext, 64 bytesIts name, padded with zero bytes.
assettext, 64 bytesThe name the client loads its art under, padded with zero bytes.
cloneu32The unit the new unit is linked to as a clone, or zero.
team4-byte bits
team.teambit 0 to 8Which side, as a team number.
team.unusedbit 9 to 31Unused; a server writes zero.
flags1-byte bits
flags.ignoreCollisionbit 0Set where it does not block the way.
flags.unusedbit 1 to 7Unused; a server writes zero.
Vectors (1)

one-on-0-9-22-14

CreateNeutral

What a server sends to put a unit that belongs to no side on the field. The header names the unit this is about.

Definition.

In 0.8.13.26–0.9.22.13

Command 7 on events, sent by the server, reliable.

A server sends it on its own, on the channel given here. A client leaves the monster facing as it was made. A client adds damageBonus to the damage the unit deals twice over.

FieldTypeWhat it is
unitu32The name the unit answers to, so later messages can name it.
nodeu8Which network node the object belongs to, in a field of its own.
atXf32Where the unit stands, along one ground axis, in world units.
atYf32Where the unit stands, in height, in world units.
atZf32Where the unit stands, along the other ground axis, in world units.
nametext, 64 bytesWhat this unit is called, so a client can tell one from another. Written out in full and padded with zero bytes to the width above.
assettext, 64 bytesThe name the client loads its art and sound under, written and padded as above. The name and its zero byte fit in the 64 bytes; a client fails on a longer one.
uniqueNametext, 64 bytesA further name the unit answers to, written and padded as above. The name and its zero byte fit in the 64 bytes; a client fails on a longer one.
sideu32The side it belongs to, or zero where it belongs to none.
damageBonusi32What is added to the damage it deals.
healthBonusi32What is added to its maximum health, three times over: the unit stands at full health, at its base maximum plus three times this.
roamingu32How the monster wanders. Values: 0 inactive, 1 hostile, 2 fleeing.
campu32Which camp the unit belongs to. Where a client shows camps on its map, the first unit naming a camp places that camp at the unit’s position.
Vectors (1)

inactive-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 7 on events, sent by the server, reliable.

A client leaves the monster facing as it was made. A client adds damageBonus to the damage the unit deals twice over.

FieldTypeWhat it is
unitu32The name the unit answers to, so later messages can name it.
nodeu8Which network node the object belongs to, in a field of its own.
atXf32Where the unit stands, along one ground axis, in world units.
atYf32Where the unit stands, in height, in world units.
atZf32Where the unit stands, along the other ground axis, in world units.
campAtXf32Where the camp it belongs to sits, along one ground axis, in world units.
campAtYf32Where the camp it belongs to sits, in height, in world units.
campAtZf32Where the camp it belongs to sits, along the other ground axis, in world units.
nametext, 64 bytesWhat this unit is called, so a client can tell one from another. Written out in full and padded with zero bytes to the width above.
assettext, 64 bytesThe name the client loads its art and sound under, written and padded as above.
uniqueNametext, 64 bytesA further name the unit answers to, written and padded as above.
sideu32The side it belongs to, or zero where it belongs to none.
damageBonusi32What is added to the damage it deals.
healthBonusi32What is added to the health it holds, three times over: the unit’s maximum and current health both end at its base health plus three times this, and not below 0.
roamingu32How the monster wanders. It has no effect. Values: 0 inactive, 1 hostile, 2 fleeing.
campu32Which camp the unit belongs to. Where no camp of that number exists yet, a client makes one at the unit’s own position, not at campAt, and adds the unit to it.
Vectors (1)

inactive-on-0-9-22-16

SpawnPet

What a server sends to put a pet on the field.

Definition.

In every range of this book

Command 32 on events, sent by the server, reliable.

The header names the owner, and every client that holds that unit handles the message. A client kills the owner’s earlier pet if that lives, then makes the pet under pet and node with the owner’s side, as the owner’s pet. It deletes no object first; where one already holds pet, both answer to it.

FieldTypeWhat it is
petu32The id the pet answers to, which a client gives it together with node. The header names the owner.
nodeu8Which network node it belongs to.
atXf32Where it stands, along one ground axis, in world units.
atYf32In height, in world units.
atZf32Along the other ground axis, in world units.
spellLeveli32The level of the spell that summoned it, plus one. A client uses it only where the owner belongs to its own network node.
durationf32How long it lasts, in seconds. A client reads nothing of it.
damageBonusi32What is added to the damage it deals.
healthBonusi32What is added to its health.
nametext, 32 bytesIts name, padded with zero bytes.
assettext, 32 bytesThe name the client loads its art under, padded with zero bytes.
effecttext, 64 bytesAn effect it carries, padded with zero bytes. A client uses it only where the owner belongs to its own network node.
cloneu32The unit it copies, or zero. For a minion-like pet, a client only links the pet to that unit, where it holds it, and copies nothing of it.
Vectors (1)

one-on-0-8-13-26

CreateTurret

What a server sends to put a turret on the field. The header names the unit this is about.

Definition.

In 0.8.13.26–0.9.22.13

Command 8 on events, sent by the server, reliable.

A server sends it on its own, on the channel given here. A client makes the object, on side 200, and loads its character.

FieldTypeWhat it is
turretu32The name the turret answers to, so later messages can name it.
nodeu8Which network node the object belongs to, in a field of its own.
atXf32Where it stands, along one ground axis, in world units.
atYf32Its height.
atZf32Along the other ground axis.
nametext, 64 bytesWhat this turret is called, so a client can tell one from another. Written out in full and padded with zero bytes to the width above.
assettext, 64 bytesThe character it is: the name the client loads its data under. Written out in full and padded with zero bytes to the width above.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 8 on events, sent by the server, reliable.

A client matches name against the map’s turrets, ignoring case. With no match it does nothing; a matched turret takes the id and node, and one missing or dead is not rebuilt.

FieldTypeWhat it is
turretu32The name the turret answers to, so later messages can name it.
nodeu8Which network node the object belongs to, in a field of its own.
nametext, 64 bytesWhat this turret is called, so a client can tell one from another. Written out in full and padded with zero bytes to the width above.
Vectors (1)

one-on-0-9-22-14

BotDebug

What a server sends describing what a bot is thinking. It changes nothing a client shows. The header names the unit.

Definition.

In 0.9.22.14–1.0.0.24

Command 105 on events, sent by the server, reliable.

FieldTypeWhat it is
nametext, 64 bytesThe bot’s name.
strategytext, 64 bytesIts strategy.
behaviourtext, 64 bytesIts behaviour.
tasktext, 64 bytesIts task.
state1text, 64 bytesA line of its state.
state2text, 64 bytesA line of its state.
state3text, 64 bytesA line of its state.

BotTargets

What a server sends naming the units a bot is weighing. It changes nothing a client shows. The header names the unit.

Definition.

In every range of this book

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.8.13.26–0.9.22.13108
0.9.22.14–1.0.0.24106
FieldTypeWhat it is
targets5 × u32Five units.
Vectors (1)

one-on-0-8-13-26

BotState

What a server sends naming a bot’s state. It changes nothing a client shows. The header names the unit.

Definition.

In every range of this book

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.8.13.26–0.9.22.13109
0.9.22.14–1.0.0.24107
FieldTypeWhat it is
statei32The state.
Vectors (1)

one-on-0-8-13-26

PlaceTurret

What a server sends to make a turret.

Definition.

In 0.8.13.26–0.9.22.13

Command 55 on events, sent by the server, reliable.

The header names an existing turret object, and the new turret takes that object’s position.

FieldTypeWhat it is
turretu32The name the turret answers to, so later messages can name it.
nodeu8Which network node the object belongs to, in a field of its own.
unreadbytes, 12A client reads nothing here. A server writes zero.
nametext, 64 bytesWhat this turret is called. Written out in full and padded with zero bytes to the width above.
assettext, 64 bytesThe character it is. Written and padded as above.
sideu8Nonzero for side 100, zero for side 200.
Vectors (1)

one-on-0-8-13-26

Vision

What a client can see, and how a server tells it. A client draws what a server says it sees and nothing else: the fog of war a client draws is only a picture, and what lies inside it is whatever the server has brought into view.

Bringing a unit into view

A server brings a unit into what a client’s side can see with EnterSight.

In 0.8.13.26–0.9.22.13

EnterSight states nothing but the unit it names, and only marks that unit as in view.

In 0.9.25.24–1.0.0.24

EnterSight states where the unit stands or which path it walks, and nothing of its looks, shields, health or resource.

A client does not draw a champion that no EnterSight has placed: given only its CreateChampion, a client shows the champion’s portrait and spells and nothing on the field. One EnterSight after the CreateChampion draws it, with its name and health bar over it.

EnterLocalSight brings a unit into what one client alone can see. EnterTeamSight brings an object into the view of a whole side.

EnterLocalSight states nothing of the unit.

Losing sight

LeaveSight and LeaveTeamSight take a unit out of the matching view, and leave it held (see Objects and identifiers). Particles come into and leave a side’s view with ParticleEnterTeamSight and ParticleLeaveTeamSight.

In 0.8.13.26–0.9.22.13

LeaveLocalSight takes a unit out of what one client alone can see, and leaves it held.

Regions

A region is a patch of ground with sight of its own, which can reveal hidden units within it. A server places one with RegionAdded or fastens one to a unit with RegionAttached, moves it with RegionMoved and takes it away with RegionRemoved; Objects and identifiers says how regions are named and when one ends. A region granting sight has a client clear its map’s cover over it.

Drawing the fog

FogSet and FogToggled change how a client draws its fog of war.

Who is told what

A client acts on a message about whichever unit it names, its own champion or another, so what a client knows is whatever a server sends it. A server decides, message by message, which clients to tell.

UnitDiedOnMap, InventorySnapshotOnMap, FloatingTextOnMap and SpellSlotChangedForOwner do not exist, so a server sends both audiences of UnitDied, InventorySnapshot, FloatingText and SpellSlotChanged under the one command each.

Messages about a champion’s own state, its gold, its inventory, its spells’ levels, cooldowns and charges, and whether it can shop, are applied to the champion they name on any client that receives them, but a client shows some of them only for its own champion:

  • ShopEnabled changes the shop only for the client’s own champion.

In 0.8.13.26–0.9.22.13

GoldGained shows floating gold only for the client’s own champion.

In 0.9.25.24–1.0.0.24

GoldGained naming the client’s own champion, with an amount above 0 and a source the client holds, shows the gold over the source.

In 0.9.25.24–1.0.0.24

Any other GoldGained shows the gold gained or lost over the unit it names, whichever unit that is. ItemAdded announces no purchase, a client’s own or another’s.

In 0.9.25.24–0.9.25.35

LevelUp shows its effect over any unit the client can see.

A server SHOULD send SpellCooldown, SpellCharges and GoldGained about a champion only to the client whose champion it is.

A client also acts on what it is told about a unit it holds but cannot see:

  • a particle on a hidden unit is created but not drawn until the unit comes into view, unless the particle is bound to a target the client can see;
  • floating text over a hidden unit is dropped;
  • an animation plays on a hidden unit, which comes into view part way through it.

A server SHOULD NOT send a client what its side cannot see, beyond what keeps its world consistent.

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).

EnterSight

What a server sends when a unit comes into what a side can see. The header names the unit this is about.

Definition.

In 0.8.13.26–0.9.22.13

Command 59 on events, sent by the server, reliable.

A client reads none of the body: it only shows the unit.

FieldTypePresent whenWhat it is
viewrecordremaining setEverything else a client needs to draw the unit. A server sends it for a champion, a minion or another unit with a mind, and ends the message after the items for any other unit.
view.movementStaterecordremaining setWhere the unit stands, followed by the direction it faces.
view.movementState.movementKindu8What follows the sync id: 0 nothing, 1 a path walked at a set speed, 2 a path, 3 a point the unit stands at. Values: 0 nothing, 1 movingAtASpeed, 2 moving, 3 standing.
view.movementState.syncIdu32The number of this statement about the unit.
view.movementState.movementMovementmovementKind = 2Every point after the first.
view.movementState.movementAtSpeedMovementAtSpeedmovementKind = 1Where the unit is going, and how a server makes it travel. WaypointGroupAtSpeed carries the same shape.
view.movementState.atXf32movementKind = 3Along one ground axis, in world units; the height is the ground’s.
view.movementState.atZf32movementKind = 3Along the other ground axis.
view.movementState.facingXf32movementKind = 3Which way it faces, along one ground axis.
view.movementState.facingZf32movementKind = 3Which way it faces, along the other.
Vectors (4)

a-fourth-on-0-8-13-26, a-third-on-0-8-13-26, another-on-0-8-13-26, one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 55 on events, sent by the server, reliable.

What a server sends to bring a unit into what a client can see. A client draws a unit only once this has named it, except turrets, which it draws regardless; the header names the unit. It states everything a client needs to draw the unit at once.

FieldTypePresent whenWhat it is
viewrecordremaining setEverything else a client needs to draw the unit. A server sends it for a champion, a minion or another unit with a mind, which a client reads past the end of the message without it. For any other unit a server ends the message before it, and a client reads none of the body.
view.movementStaterecordremaining setWhere the unit stands, followed by the direction it faces.
view.movementState.movementKindu8What follows the sync id: 0 nothing, 1 a path walked at a set speed, 2 a path, 3 a point the unit stands at. A client reads nothing more for any other value. Values: 0 nothing, 1 movingAtASpeed, 2 moving, 3 standing.
view.movementState.syncIdu32The number of this statement about the unit; a client takes a path or a point only where it is not behind the last one the unit took.
view.movementState.movementMovementmovementKind = 2Every point after the first.
view.movementState.movementAtSpeedMovementAtSpeedmovementKind = 1Where the unit is going, and how a server makes it travel. WaypointGroupAtSpeed carries the same shape.
view.movementState.atXf32movementKind = 3Along one ground axis, in world units; the height is the ground’s.
view.movementState.atZf32movementKind = 3Along the other ground axis.
view.movementState.facingXf32movementKind = 3Which way it faces, along one ground axis.
view.movementState.facingZf32movementKind = 3Which way it faces, along the other.

EnterLocalSight

What a server sends when a unit comes into what one client can see. The header names the unit this is about.

Definition.

In every range of this book

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.8.13.26–0.9.22.1361
0.9.22.14–1.0.0.2457

A client reads none of the body: it shows the unit and reads nothing more.

FieldTypePresent whenWhat it is
vitalsrecordremaining setThe unit’s health. A client reads nothing here.
vitals.maxHealthf32A client reads nothing here.
vitals.healthf32A client reads nothing here.
Vectors (2)

another-on-0-8-13-26, one-on-0-8-13-26

LeaveSight

What a server sends when a unit passes out of what a side can see. The header names the unit this is about.

Definition.

In every range of this book

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.8.13.26–0.9.22.1360
0.9.22.14–1.0.0.2456

What a server sends to take a unit out of what a client can see; the client stops drawing it. The header names the unit.

No body.

Vectors (1)

one-on-0-8-13-26

LeaveLocalSight

What a server sends when a unit passes out of what one client can see. Sent for the receiving client’s own champion, it changes nothing the client shows. The header names the unit this is about.

Definition.

In every range of this book

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.8.13.26–0.9.22.1362
0.9.22.14–1.0.0.2458

No body.

Vectors (1)

one-on-0-8-13-26

RegionAdded

What a server sends to place a region on the ground. The header names no object: a server writes zero.

Definition.

In 0.8.13.26–0.9.22.13

Command 89 on events, sent by the server, reliable.

On this range a region stands where the message places it; RegionAttached places one that follows a unit. Every RegionAdded adds a region; where marker repeats an id the client holds, both regions are kept under that id.

FieldTypeWhat it is
kindu32Whose map shows the region: 0 side 100’s, 1 side 200’s, 2 everyone’s, 3 side 300’s, 4 any other. A client takes the value as it stands, so 100 or 200 here matches no one, and draws the region only where it is 2 or names the player’s own side.
clientIdu32Unused; a client reads nothing here.
sightRadiusf32How far the region shows the map around it, in world units, zero or more.
atXf32Where it stands, along one ground axis, in world units.
atYf32Its height, in world units.
atZf32Where it stands, along the other ground axis, in world units.
lifetimef32How long it lasts, in seconds. A client counts it down and removes the region once it reaches zero or less, so one that starts at zero or less goes at its first count.
markeru32The id the client keeps the region under. Zero has the client pick one.
does4-byte bitsWhat the region does.
does.flagbit 0Where kind is 2, a client sets this bit and the one after it itself, whatever was sent.
does.secondbit 1Kept with the region; a client also sets it where kind is 2.
does.unusedbit 2 to 31Its value has no effect; a server writes zero.
extrau32Kept with the region; it changes nothing a client shows. A server writes zero.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 86 on events, sent by the server, reliable.

On this range a region stands where the message places it; RegionAttached places one that follows a unit. Every message adds a new region, even one matching a region the client holds; each counts down on its own.

FieldTypeWhat it is
kindu32Whose map shows the region: 0 side 100’s, 1 side 200’s, 2 everyone’s, 3 side 300’s, 4 any other. A client takes the value as it stands, so 100 or 200 here matches no one, and draws the region only where it is 2 or names the player’s own side.
clientIdu32Unused; a client reads nothing here.
sightRadiusf32How far the region shows the map around it, in world units, zero or more.
atXf32Where it stands, along one ground axis, in world units.
atYf32Its height, in world units.
atZf32Where it stands, along the other ground axis, in world units.
lifetimef32How long it lasts, in seconds. A client counts it down, taking each frame’s time off before it checks, and removes the region at the first count that reaches zero or less.
markeru32The id the client keeps the region under. Zero has the client pick one.
does4-byte bitsWhat the region does.
does.flagbit 0Where kind is 2 and this bit is set, a client also sets the bit after it.
does.secondbit 1Kept with the region; a client also sets it where kind is 2 and flag is set. It changes nothing a client shows.
does.unusedbit 2 to 31Its value has no effect; a server writes zero.
extrau32Kept with the region; it changes nothing a client shows. A server writes zero.
otherExtrau32Kept with the region; what it names is not recorded. A server sends zero.

RegionAttached

What a server sends to place a region that follows a unit, showing the map around it until it runs out or the unit is gone.

Definition.

In 0.8.13.26–0.9.22.13

Command 88 on events, sent by the server, reliable.

Every RegionAttached adds a region; nothing is compared, and a repeated marker gives two regions under one id.

FieldTypeWhat it is
kindu32Whose map shows the region: 0 side 100’s, 1 side 200’s, 2 everyone’s, 3 side 300’s, 4 any other. A client takes the value as it stands, so 100 or 200 here matches no one, and draws the region only where it is 2 or names the player’s own side.
clientIdu32Unused; a client reads nothing here.
sightRadiusf32How far the region shows the map around it, in world units, zero or more. Zero takes the unit’s own sight radius, followed as it changes, or a default where it has none.
unitu32A player’s champion: the region follows it. A client fails where no player’s champion answers to it.
lifetimef32How long it lasts, in seconds. A client counts it down and removes the region once it reaches zero or less, so one that starts at zero or less goes at its first count.
markeru32The region’s id, which RegionRemoved names; zero has the client pick one of its own.
does4-byte bitsWhat the region does.
does.flagbit 0Set where the region shows the map. Where kind is 2, a client sets this bit and does.second itself, whatever was sent.
does.secondbit 1Kept with the region; a client also sets it where kind is 2. It changes nothing a client shows.
does.unusedbit 2 to 31Its value has no effect, because a client always sets this bit itself; a server writes zero.
extrau32Kept with the region; it changes nothing a client shows. A server writes zero.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 85 on events, sent by the server, reliable.

Every message adds a new region, even one matching a region the client holds; each counts down on its own.

FieldTypeWhat it is
kindu32Whose map shows the region: 0 side 100’s, 1 side 200’s, 2 everyone’s, 3 side 300’s, 4 any other. A client takes the value as it stands, so 100 or 200 here matches no one, and draws the region only where it is 2 or names the player’s own side.
clientIdu32Unused; a client reads nothing here.
sightRadiusf32How far the region shows the map around it, in world units, zero or more. Zero takes the unit’s own sight radius, followed as it changes, or a default where it has none.
unitu32The unit the region follows. A client ignores the message where it does not know the unit.
lifetimef32How long it lasts, in seconds. A client counts it down and removes the region once it reaches zero or less, so one that starts at zero or less goes at its first count.
markeru32The region’s id, which RegionRemoved names; zero has the client pick one of its own.
does4-byte bitsWhat the region does.
does.flagbit 0Set where the region shows the map; where kind is 2, a client sets both this bit and does.second, whatever was sent. What else it changes is not recorded.
does.secondbit 1Kept with the region; a client sets it wherever kind is 2. It changes nothing a client shows.
does.unusedbit 2 to 31Its value has no effect, because a client always sets this bit itself; a server writes zero.
extrau32Kept with the region; it changes nothing a client shows. A server writes zero.
otherExtrau32Kept with the region; what it names is not recorded. A server sends zero.

RegionRemoved

What a server sends to take away a region RegionAdded or RegionAttached placed. The header names no object: a server writes zero.

Definition.

In 0.8.13.26–0.9.22.13

Command 87 on events, sent by the server, reliable.

It takes away regions RegionAttached placed as well.

FieldTypeWhat it is
regionu32The region to take away, by its id. A client takes away every region holding that id, and does nothing where none does.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 84 on events, sent by the server, reliable.

FieldTypeWhat it is
regionu32The region to take away, by the id RegionAdded or RegionAttached gave it. A client takes away every region it holds under that id.

FogToggled

What a server sends to turn the drawing of the fog of war off where it is on, or on where it is off. It changes only what is drawn: what can be seen is still what a server sends. It carries nothing of its own. The header carries zero.

Definition.

In 0.9.22.14–1.0.0.24

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.9.22.14–0.9.25.35126
0.9.25.36–1.0.0.24125

No body.

Vectors (1)

one-on-0-9-25-24

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 EnterSight instead.

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 MoveOrder with a WaypointGroup, and the client returns that group’s syncId in a WaypointAck (see Ordering).

In 0.9.25.24–1.0.0.24

A client takes a WaypointGroup or a WaypointGroupAtSpeed on channels 2, 3 and 4 alike.

In 0.9.25.24–1.0.0.24

A client sends the WaypointAck before 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.

Definition.

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.

FieldTypeWhat it is
syncIdu32Names this statement of movement.
movementCountu16How many units follow. A client reads it as signed, so a count above 32767 counts as none, as zero does.
movementscount in movementCount × MovementAtSpeedWhat 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.

Definition.

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.

FieldTypeWhat it is
syncIdu32The 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.

Definition.

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.

FieldTypeWhat it is
kindu8What the order is. Values: 2 moveToPosition, 3 attack, 10 stop.
targetXf32Where the order points, along one ground axis, in world units.
targetYf32The height of the place ordered.
targetZf32Where the order points, along the other ground axis.
targetu32The 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.

Definition.

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.

FieldTypeWhat it is
syncIdu32The 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.
movementCountu16How 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.
movementscount in movementCount × MovementOne path for each unit.

FaceDirection

What a server sends to turn a unit to face a direction. The header names the unit acting.

Definition.

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.

FieldTypeWhat it is
towardXf32The direction faced, along one ground axis.
towardYf32The direction faced, in height. A client reads nothing here.
towardZf32The direction faced, along the other ground axis.
Vectors (1)

one-on-0-8-13-26

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.

FieldTypeWhat it is
towardXf32The direction faced, along one ground axis.
towardYf32The direction faced, in height.
towardZf32The 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.

Definition.

In every range of this book

Carried on requests, sent by the client, reliable, under these commands:

BuildsCommand
0.8.13.26–0.9.22.1396
0.9.22.14–1.0.0.2493
FieldTypeWhat it is
directionXf32Which way the unit now faces, as a direction of length one, along one ground axis.
directionYf32Which way the unit now faces, as a direction of length one, in height.
directionZf32Which way the unit now faces, as a direction of length one, along the other ground axis.
Vectors (1)

one-on-0-8-13-26

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.

Definition.

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.

FieldTypeWhat it is
xf32The circle’s centre, in world units.
yf32The centre’s height, in world units.
zf32The circle’s centre, in world units.
radiusf32The circle’s radius, in world units. Zero lifts the bounds; a negative radius counts as zero.
Vectors (1)

one-on-0-9-25-24

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.

FieldTypeWhat it is
xf32The circle’s centre, in world units.
yf32The centre’s height, in world units. A client does not use it.
zf32The circle’s centre, in world units.
radiusf32The 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.

Definition.

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.

FieldTypeWhat it is
syncIdi32A client reads nothing here and answers nothing.
pointsto the end × recordThe 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[].xf32A point on the path, in world units.
points[].zf32A point on the path, in world units.
Vectors (1)

one-on-0-8-13-26

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).

FieldTypeWhat it is
syncIdi32The unit’s movement count.
pointsto the end × recordThe 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[].xf32A point on the path, in world units.
points[].zf32A 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.

Definition.

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.

FieldTypeWhat it is
syncIdi32A client reads nothing here and answers nothing.
speedf32The speed to move at, in world units a second.
gravityf32The arc’s gravity, for a leap, in units of 150 world units a second squared. Zero or less moves the unit flat.
arcXf32Where the arc begins, in world units.
arcZf32Where the arc begins, in world units.
pointsto the end × recordThe 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[].xf32A point on the path, in world units.
points[].zf32A point on the path, in world units.
Vectors (1)

one-on-0-8-13-26

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.

FieldTypeWhat it is
syncIdi32The unit’s movement count.
speedf32The speed to move at, in world units a second.
gravityf32The arc’s gravity, for a leap, in units of 150 world units a second squared. Zero or less moves the unit flat.
arcXf32Where the arc begins, in world units.
arcZf32Where the arc begins, in world units.
pointsto the end × recordThe 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[].xf32A point on the path, in world units.
points[].zf32A point on the path, in world units.

UnitStopped

What a server sends to stop a unit where it stands. The header names the unit.

Definition.

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.

FieldTypeWhat it is
xf32Where the unit stands, in world units; a client keeps this height rather than the ground’s.
yf32Its height, in world units.
zf32Where it stands, in world units.
facingXf32The way it faces.
facingYf32The way it faces.
facingZf32The way it faces.
Vectors (1)

one-on-0-8-13-26

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.

FieldTypeWhat it is
xf32Where the unit stands, in world units; a client keeps this height rather than the ground’s.
yf32Its height, in world units.
zf32Where it stands, in world units.
facingXf32The way it faces.
facingYf32The way it faces.
facingZf32The way it faces.
syncIdi32The unit’s movement count. A client drops the message where it is behind the last the unit took by less than 1073741824.
Vectors (1)

one-on-0-9-22-14

Replication

With Replication a server states what has changed about the units a client can see: for each unit, the groups of values it carries and which values of each follow. What the values are follows from the unit.

In 0.9.25.24–1.0.0.24

The groups follow in the order 0 to 4, and nothing gives a group’s length: each value is four bytes, so a group takes four bytes for its set of values and four for each bit that set has set.

Each value is a 32-bit float or a 32-bit unsigned integer, as its row in the tables below says, and travels as it stands.

A client passes over a set bit its table has no row for, and a group its table has none of, by their four bytes each, without taking anything from them. It passes over the values of a unit whose kind has no table the same way, and still answers the batch.

In 0.9.25.24–1.0.0.24

A value that says yes or no is an integer, 1 for yes and 0 for no. A client takes a batch on channels 2, 3 and 4 alike.

What settles a reading

A run is a sequence of values with nothing between them, in the order the set bits name them, lowest first.

The bit that names a value means different things for different units. Champions, turrets, minions and units belonging to no side, and buildings each answer to a table of their own, so the same bit in the same group is one value on one unit and another on the next. A sending end MUST write the table the unit it names answers to.

In 0.9.25.24–1.0.0.24

A prop answers to no table, and a client takes nothing a batch carries for one.

Which table a unit answers to follows from the message that put it on the field (see Units). A building, which no message creates, answers to the building table.

In 0.9.25.24–1.0.0.24

The building table is the same on every map.

Which batches a client takes

A client answers a batch with TransientAck where it holds every unit the batch names, whether or not it took the values. Ordering says which batches a client takes, and what that requires of a server.

Reading the tables

Each row gives the group and bits that name a value and what the value is.

In 0.9.25.24–1.0.0.24

Each row also gives the type a value is written in.

In 0.9.25.24–0.9.25.35

A champion

GroupBitsValueType
00Experiencefloat
01Gold in handfloat
02 to 3Which slots can be cast from: the champion’s own, then the second setu32
04 to 7What the spell in slots 0 to 3 costsfloat
08 to 11What the spell in slots 41 to 44 costsfloat
012 to 13What the spell in slots 0 and 1 of the second set costsfloat
10 to 1Health and resource as they standfloat
12 to 3Health and resource at their greatestfloat
14What the champion is doing, as a set of bitsu32
15 to 8Whether it is proof against spells, proof against all harm, targetable, and proof against strikesu32
20 to 1Whether it is proof against strikes, then against spells, as group 1 bits 8 and 5u32
22Damage it deals by strikingfloat
23Damage its spells deal before modifiersfloat
24How often it turns a blow asidefloat
25Its sizefloat
26How often it strikes criticallyfloat
27 to 8Armour and spell resistancefloat
29 to 10How fast health and resource returnfloat
211How fast it movesfloat
212How far it strikes fromfloat
213 to 14Flat and percent modifiers on the damage it strikes withfloat
215 to 16Flat and percent modifiers on its spells’ damagefloat
217 to 18Flat and percent reduction of the spell damage it takesfloat
219A multiplier on how fast it strikesfloat
220A flat addition to how far it castsfloat
221A modifier on its cooldownsfloat
30 to 1A percent and a flat addition to how far it seesfloat
32Levelu32

A turret

GroupBitsValueType
10Damage it deals by strikingfloat
11 to 2Armour and spell resistancefloat
13How fast it movesfloat
14A multiplier on how fast it strikesfloat
15Its sizefloat
16 to 7Flat and percent modifiers on the damage it strikes withfloat
18 to 9Flat and percent modifiers on its spells’ damagefloat
110 to 11How fast health and resource returnfloat
112 to 13Health as it stands, then at its greatestfloat
30 to 1A percent and a flat addition to how far it seesfloat

A minion, and a unit belonging to no side

GroupBitsValueType
10 to 1Health as it stands, then at its greatestfloat
12 to 3Whether it is proof against strikes, then against spellsu32
14What the unit is doing, as a set of bitsu32
15 to 8Whether it is proof against spells, proof against all harm, targetable, and proof against strikesu32
19Damage it deals by strikingfloat
110 to 11Armour and spell resistancefloat
112How fast it movesfloat
113A multiplier on how fast it strikesfloat
114Its sizefloat
115 to 16Flat and percent modifiers on the damage it strikes withfloat
117 to 18Flat and percent modifiers on its spells’ damagefloat
119 to 20How fast health and resource returnfloat
30 to 1A percent and a flat addition to how far it seesfloat

A building

Inhibitors, nexuses and the buildings minions come from share one table. It has no value for health at its greatest.

GroupBitsValueType
10 to 1Whether it is proof against all harm, and targetableu32
12Health as it standsfloat

Values stated outside a batch

Besides its batches, a server states some values with messages of their own.

In 0.8.13.26–0.9.22.13

A server grants gold with GoldGained. ExperienceGained shows the experience gained over the unit and grants none: a champion’s experience follows its replicated values alone.

In 0.9.25.24–1.0.0.24

A server grants experience with ExperienceGained and gold with GoldGained.

A server can send the gold a unit earns to another with GoldRedirect. A level gained is LevelUp, which on its own is enough for a client to show the new level on its champion’s portrait. A server sets a champion’s tallies for the scoreboard with ChampionStats. A server can also add to a unit’s shield (ShieldAdded), change how its health bar or resource bar is shown (HealthBar, ResourceDisplay), change the sort of resource it has (ResourceKindChanged), set the highest level a champion reaches (LevelCap), and count minions killed, scores and deeds (MinionKillCount, ScoreAdded, StatisticIncremented).

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).

Replication

What a server sends to say what has changed about units a client can see. It is the most frequent thing a server sends. The header names no object: a server writes zero.

Definition.

In 0.9.22.14–1.0.0.24

Carried on transient, sent by the server, unreliable, under these commands:

BuildsCommand
0.9.22.14–0.9.25.35129
0.9.25.36–1.0.0.24128
FieldTypeWhat it is
syncIdu32Names this batch of changes. Replication says which batches a client takes values from.
unitCountu8How many units follow.
unitscount in unitCount × Replication
Vectors (1)

one-on-0-9-25-24

TransientAck

What a client sends to say a batch of changes arrived, naming which batch. The header names no object: it carries zero.

Definition.

In 0.9.22.14–1.0.0.24

Carried on requests, sent by the client, unsequenced, under these commands:

BuildsCommand
0.9.22.14–0.9.25.35130
0.9.25.36–1.0.0.24129

A client sends it for a Replication batch only where it holds every unit the batch names, or the batch names none.

FieldTypeWhat it is
syncIdu32Which batch is being acknowledged, as the batch named itself.
Vectors (1)

one-on-0-9-25-24

GoldGained

What a server sends to show a unit gaining gold. The header names the unit whose death earned the gold, as source does.

Definition.

In every range of this book

Command 27 on events, sent by the server, reliable.

Where amount is above 0.5, unit is the client’s own champion and source names a unit it holds, a client floats the gold over the source. Otherwise, where it holds the unit, it floats the amount over the unit as a gain or a loss, and nothing for zero.

FieldTypeWhat it is
unitu32The unit granted it.
sourceu32What it came from, or zero where nothing did.
amountf32How much.

ExperienceGained

What a server sends to say a unit gained experience. The header names no object: a server writes zero.

Definition.

In 0.8.13.26–0.9.22.13

Command 28 on events, sent by the server, reliable.

It changes no unit’s experience: a client only floats the amount as text over the unit, where the player’s floating-text settings allow.

FieldTypeWhat it is
unitu32The unit granted it, one with a mind, such as a champion or a minion. A client does nothing for a unit it does not know.
amountf32How much. A client shows a value below zero or from 100000 up as well.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 28 on events, sent by the server, reliable.

It changes no unit’s experience: a client only floats the amount as text over the unit, where the player’s floating-text settings allow.

FieldTypeWhat it is
unitu32The unit granted it, a champion. A client fails for any other unit it holds, and does nothing for a unit it does not know.
amountf32How much. A client shows a value below zero or from 100000 up as well.

GoldRedirect

What a server sends to send the gold a unit earns to another. The header names the unit.

Definition.

In every range of this book

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.8.13.26–0.9.22.1392
0.9.22.14–1.0.0.2489
FieldTypeWhat it is
targetu32The unit that receives the gold.
Vectors (1)

one-on-0-8-13-26

LevelUp

What a server sends when a unit gains a level. The header names the unit this is about. On its own, with no replication behind it, it is enough for a client to show the new level on the champion’s portrait and offer the unspent points.

Definition.

In every range of this book

Command 47 on events, sent by the server, reliable.

A client applies it only to a champion, and ignores it for any other unit.

FieldTypeWhat it is
levelu8The level now reached.
pointsToSpendu8How many spell points are left unspent.

StatTick

What a server sends to advance every unit’s stats by a span of time. The header carries zero.

Definition.

In 0.8.13.26–0.9.22.13

Command 68 on events, sent by the server, reliable.

For every unit not dead, a client adds its health regeneration times seconds to its health, and its mana regeneration times seconds to its mana, each held between zero and its maximum.

FieldTypeWhat it is
secondsf32The span, in seconds.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 64 on events, sent by the server, reliable.

A client takes it and changes nothing it shows.

FieldTypeWhat it is
secondsf32The span, in seconds.

ValueGroup0

What a server sends to set values of group 0 on a unit. The header names the unit.

Definition.

In 0.8.13.26–0.9.22.13

Command 49 on events, sent by the server, reliable.

FieldTypeWhat it is
whichu32Says which of the group’s values follow, one bit each, lowest first.
valuescount in the bits set in which × bytesThe values themselves, four bytes each, in the order the bits above name them. A client reads one only for a bit below the number of values the unit holds in the group, and nothing after the bits where the unit holds no such group.
Vectors (1)

one-on-0-8-13-26

ValueGroup1

What a server sends to set values of group 1 on a unit. The header names the unit.

Definition.

In 0.8.13.26–0.9.22.13

Command 50 on events, sent by the server, reliable.

FieldTypeWhat it is
whichu32Says which of the group’s values follow, one bit each, lowest first.
valuescount in the bits set in which × bytesThe values themselves, four bytes each, in the order the bits above name them. A client reads one only for a bit below the number of values the unit holds in the group, and nothing after the bits where the unit holds no such group.
Vectors (1)

one-on-0-8-13-26

ValueGroup2

What a server sends to set values of group 2 on a unit. The header names the unit.

Definition.

In 0.8.13.26–0.9.22.13

Command 51 on events, sent by the server, reliable.

FieldTypeWhat it is
whichu32Says which of the group’s values follow, one bit each, lowest first.
valuescount in the bits set in which × bytesThe values themselves, four bytes each, in the order the bits above name them. A client reads one only for a bit below the number of values the unit holds in the group, and nothing after the bits where the unit holds no such group.
Vectors (1)

one-on-0-8-13-26

ValueGroup3

What a server sends to set values of group 3 on a unit. The header names the unit.

Definition.

In 0.8.13.26–0.9.22.13

Command 52 on events, sent by the server, reliable.

FieldTypeWhat it is
whichu32Says which of the group’s values follow, one bit each, lowest first.
valuescount in the bits set in which × bytesThe values themselves, four bytes each, in the order the bits above name them. A client reads one only for a bit below the number of values the unit holds in the group, and nothing after the bits where the unit holds no such group.
Vectors (1)

one-on-0-8-13-26

The match

How a match runs once play has begun, apart from the field: its clock, holds, its end, and players leaving and coming back.

The clock

A server states how long the match has run with ClockSync, and a client answers on the clock channel with ClockReply. Time says how the match clock is kept, and which clock each time on the wire is measured against.

GameSpeed sets how fast the match runs. StatTick hands every unit a span of seconds.

In 0.8.13.26–0.9.22.13

StatTick asks every unit’s stats to advance by that span.

In 0.9.25.24–1.0.0.24

A client shows the speed GameSpeed sets over its champion. A client changes nothing it shows for StatTick.

In 0.9.25.24–1.0.0.24

The speed GameSpeed sets takes effect at once: sent during a hold, it ends the hold, and a Resumed after it changes nothing.

In 0.9.25.24–0.9.25.35

No unit advances for StatTick.

Holding and resuming

A client asks to hold the match with Pause, and to resume it with Resume. A server MUST attribute each to the connection it arrived on (see Objects and identifiers).

A server holds the match with Paused.

In 0.9.25.24–1.0.0.24

A client reads nothing from Paused. It stops the match clock where the clock is running, keeping the speed it had, and shows nothing.

A server ends the hold with Resumed.

In 0.9.25.24–1.0.0.24

A client reads nothing from Resumed. Where the match is held, it goes on at once at the speed it had, with no countdown and no announcement.

The end

A server ends the match with GameEnded, saying which side won, and takes the interface down with HudDisabled. A client shows the win or loss for its player’s side and sends ClientFinished.

A client sends ClientFinished every time GameEnded arrives in play, while playing a replay too.

In 0.8.13.26–0.9.25.35

A client that receives GameEnded while still loading takes it as in play: it records the result and sends ClientFinished.

VictoryDance sets units moving as winners or losers do. It ends nothing.

Leaving and coming back

A client leaving as one abandoning the match sends Exit: as its player quits or closes the window, as a reconnection fails, or on a server’s Shutdown, which has it leave at once. A client also leaves at once on BotKick with the action that means leave.

In 0.9.25.24–1.0.0.24

A client also leaves as one abandoning as its player declines to reconnect or cancels a reconnection under way, and as its player dismisses the notice that it was dropped for being away.

A server tells the others that a player’s client dropped with PlayerDisconnected.

In 0.9.25.24–1.0.0.24

A client shows a notice in chat for PlayerDisconnected.

SoftReconnect rebuilds a client’s world without a new connection, as Objects and identifiers describes.

In 0.8.13.26–0.9.22.13

A client whose connection drops, while loading or in play, shows its player that it was disconnected, and neither connects again nor leaves.

In 0.9.25.24–1.0.0.24

A client started again for a match in progress knows nothing of it, and joins as at the start: a server takes it through Joining a match from registering to StartGame, with a spawn run that states the field as it stands, and a ClockSync.

A client the server drops with the reason that means its player was away shows that, and does not connect again.

In 0.9.25.24–1.0.0.24

A client sends ReconnectedInMatch on every connection it makes, the first included, with a byte that is 0 where the match is in play and 1 otherwise.

Reconnected announces that a player came back. A client shows it in chat for any other player, ally or enemy.

In 0.9.25.24–1.0.0.24

A client dropped during play connects again only where its player agrees: for the reason 0 it asks, and on a yes connects again, showing that it is reconnecting until it is back or its player cancels. For any other reason but the one that means its player was away, it shows that the reconnection failed. One dropped while loading leaves.

Where Reconnected names the client’s own, the client resynchronises until ResyncEnded.

Staying connected

A client’s view report, Camera, goes out as its view moves at least 200 units, at most every tenth of a second, and never while its view is locked.

Where its last Camera goes unacknowledged, a client sends it again without its view moving, once more than twice the round trip has passed.

In 0.9.25.24–1.0.0.24

A client gives up on a connection where a reliable message it sent goes unacknowledged for 30 seconds, while loading and in play alike.

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).

ClockSync

What a server sends to set a client’s idea of how long the match has run. The header names no object: a server writes zero.

Definition.

In 0.8.13.26–0.9.22.13

Command 77 on events, sent by the server, reliable.

FieldTypeWhat it is
elapsedf32How long the match has run, in seconds.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 74 on events, sent by the server, reliable.

FieldTypeWhat it is
elapsedf32How long the match has run, in seconds. A client sets its clock to this plus its own measure of the round trip, and answers at once with ClockReply.

ClockReply

What a client sends back when a server states the match clock, carrying both readings so the server can tell how far apart they are. The header names no object: it carries zero.

Definition.

In every range of this book

Carried on clock, sent by the client, reliable, under these commands:

BuildsCommand
0.8.13.26–0.9.22.1378
0.9.22.14–1.0.0.2475
FieldTypeWhat it is
valueu32The client id the sender holds.
serverSaidf32The time the server last stated, in seconds, carried back as it arrived.
clientSaidf32What the client’s own clock reads, in seconds, just after it set itself from that statement.
Vectors (1)

one-on-0-8-13-26

GameSpeed

What a server sends to set how fast the game’s clock runs. A client shows the new speed over its champion. The header carries zero.

Definition.

In 0.9.22.14–0.9.25.35

Command 136 on events, sent by the server, reliable.

Sent while paused, it takes effect at once, and play runs at that speed.

FieldTypeWhat it is
speedf32How fast, 1 being normal. A client sets no bound.
Vectors (1)

one-on-0-9-25-24

In 0.9.25.36–1.0.0.24

Command 135 on events, sent by the server, reliable.

It takes effect at once, so sent while paused it ends the pause.

FieldTypeWhat it is
speedf32How fast, 1 being normal. A client applies it as given, with no limit.

Resumed

What a server sends to take the match off hold. The header names a champion: that of the player who resumed the match.

Definition.

In 0.9.22.14–1.0.0.24

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.9.22.14–0.9.25.35135
0.9.25.36–1.0.0.24134

A client resumes the match at once where it is held, and announces no one.

No body.

Vectors (1)

one-on-0-9-25-24

Paused

What a server sends to put the match on hold. The header names no object: it carries zero.

Definition.

In 0.9.22.14–1.0.0.24

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.9.22.14–0.9.25.35134
0.9.25.36–1.0.0.24133

A client holds the match at once where it is not already held.

No body.

Vectors (1)

one-on-0-9-25-24

GameEnded

What a server sends to end the match and say which side won. The header names no object: it carries zero.

Definition.

In every range of this book

Command 14 on events, sent by the server, reliable.

A client counts a win where its own side is 100 and result is nonzero, or its side is 200 and result is zero, and a loss otherwise. It ends the match on its screen and sends ClientFinished. A client fails where its own player does not yet exist.

FieldTypeWhat it is
resultu8Nonzero where side 100 won, zero where side 200 did; a client counts a win where its own side is the one that won.
Vectors (1)

one-on-0-8-13-26

ClientFinished

What a client sends when it has finished with the match.

Definition.

In every range of this book

Command 17 on requests, sent by the client, reliable.

A client sends it each time GameEnded arrives.

No body.

Exit

What a client sends as it leaves. It carries nothing of its own.

Definition.

In 0.9.22.14–1.0.0.24

Command 115 on requests, sent by the client, reliable.

A client sends it once, as it leaves without a result: as its player confirms quitting or the window is asked to close, or as its player gives up reconnecting after the connection is lost, or loses it where reconnecting is turned off. It sends none after GameEnded, and none on Shutdown or BotKick.

No body.

Vectors (1)

one-on-0-9-22-14

PlayerDisconnected

What a server sends as a player’s client drops out. The header carries zero.

Definition.

In 0.9.22.14–1.0.0.24

Command 116 on events, sent by the server, reliable.

A client shows a chat notice naming the player that client id belongs to, whenever its interface exists: in a neutral colour where it has no champion of its own, and otherwise coloured for whether that player is on its own side.

FieldTypeWhat it is
clientIdu32The player’s client id, matched against the client id CreateChampion gave each champion the client knows.

ReconnectedInMatch

What a client sends right after the server answers its registration. The header carries zero.

Definition.

In 0.9.22.14–1.0.0.24

Command 117 on requests, sent by the client, reliable.

A client dropped while playing asks its player whether to reconnect; where the drop gives inactivity or another reason, it only says it cannot reconnect. One dropped at any other time closes.

FieldTypeWhat it is
loadingu8Zero while the client is playing, in the state StartGame puts it in; 1 at any other time, including after GameEnded.

Reconnected

What a server sends to say a client has reconnected. The header carries zero.

Definition.

In 0.9.22.14–1.0.0.24

Command 118 on events, sent by the server, reliable.

FieldTypeWhat it is
clientu32The client, by the seat it occupies.

ClockConvergence

What a server sends about how its clock and a client’s are being brought together. The header carries zero.

Definition.

In every range of this book

Carried on clock, sent by the server, reliable, under these commands:

BuildsCommand
0.8.13.26–0.9.22.1379
0.9.22.14–1.0.0.2476
FieldTypeWhat it is
clientTimef32The client’s clock, in seconds, as the client reported it. A client sets its clock offset from it: its running round trip value, less half of its own clock’s reading less this value.
roundTripf32The round trip time the server measures, in seconds. A client blends it into a running value, keeping 0.8 of the old and adding 0.1 of this.
Vectors (1)

one-on-0-8-13-26

Combat

Attacks, damage, death and coming back. Spells are in Spells.

Attacking

A server says a unit is swinging at another with Attack, or with AttackFrom, which also says where the swinging unit stands. StopAttack breaks an attack off. AttackSpeedBounds puts a ceiling or a floor on how fast a unit attacks.

After StopAttack, a client clears the unit’s attack whatever the message’s flags ask besides.

In 0.9.25.24–1.0.0.24

A client moves the attacker to the place AttackFrom gives only where it stands more than 400 units from it.

A client asks its champion to attack with a MoveOrder naming the unit (see Movement). What the player then sees is what a server sends: the champion walking into range along a WaypointGroup, a swing for each Attack, and what each Damage shows.

How long a swing takes comes from the champion’s data and its attack speed.

A client ignores an Attack whose target it does not hold.

In 0.8.13.26–0.9.22.13

Result 0 of Damage is a notice a client shows for only one in every thirty it receives, and result 5 a miss, shown for its player’s own unit. Results 3, 4 and any above 5 show a figure, and for them a client lowers the hurt unit’s health by the amount itself, without waiting for replication.

In 0.9.25.24–1.0.0.24

Damage shows a figure for the results that carry one, normal and critical; zero is the result that shows the unit as invulnerable, not a plain hit.

In 0.9.25.24–1.0.0.24

Of the other results of Damage, 1 shows nothing, 2 a dodge and 5 a miss; 3 is critical, and 4 and any above 5 are normal.

TargetUnit draws a unit’s targeting beam at what it is attacking.

Only a turret takes TargetUnit; every other unit ignores it.

In 0.9.25.24–1.0.0.24

TargetHeldChampion marks a unit as attacking the client’s own champion: a client sets the mark only where the message names that champion, and clears it for any other. A client takes it apart from TargetUnit.

HoverTarget and HoverIndicator set and show the unit a unit’s hover indicator points at, and AttackIndicators shows or hides a unit’s attack indicators.

A champion’s clicks can be made to attack the ground with GroundAttackMode.

Damage

A server reports damage with Damage.

A client shows nothing for Damage unless it holds the unit hurt; it need not hold the unit dealing it.

Death

A unit’s death is UnitDied, a champion’s ChampionDied, a building’s BuildingDied, and an inhibitor’s InhibitorDied. ForceDeath puts a unit into its death.

A client ignores UnitDied or ChampionDied naming a unit already dead, and puts a unit down only where a killer is named.

A killer a client does not hold still puts the unit down.

Nothing in UnitDied leaves the unit standing: every unit it puts down dies.

In 0.9.25.24–0.9.25.35

A server MUST NOT send BuildingDied for the nexus: a client removes the nexus some 4 seconds later while still using it, and fails.

How long a champion stays down is DeathTimer. Whether a client draws the world without colour while its champion is down is GreyscaleWhenDead. What led to a death is DeathHistory, which a client lays out for its player. An inhibitor’s state, and how long it lasts, is InhibitorState.

Coming back

Revived puts a champion back on the field.

A client reads nothing from Revived or Respawned: each brings the champion back where it stands.

Using a unit

A client sends UseObject as its player right-clicks a unit that can be used.

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).

Attack

What a server sends to say a unit is swinging at another. The header names the unit acting.

Definition.

In 0.8.13.26–0.9.22.13

Command 57 on events, sent by the server, reliable.

FieldTypeWhat it is
targetu32The unit swung at. A client throws the swing at it.
timingf32A shift in time, in seconds, from the moment the message arrives. It moves when the swing lets go and ends, and when the unit may next attack.
missileu32The name the missile this swing throws will answer to.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 53 on events, sent by the server, reliable.

FieldTypeWhat it is
targetu32The unit swung at. A client throws the swing at it, and drops the whole message where it does not know this unit.
timingf32A shift in time, in seconds, from the moment the message arrives. It moves when the swing lets go and ends, and when the unit may next attack.
missileu32The name the missile this swing throws will answer to.
slotu8Which of the unit’s attacks this is.

AttackFrom

What a server sends to say a unit is swinging at another, carrying where the swinging unit stands as well as what it swings at. The header names the unit acting.

Definition.

In 0.8.13.26–0.9.22.13

Command 58 on events, sent by the server, reliable.

FieldTypeWhat it is
targetu32The unit swung at. A client throws the swing at it.
timingf32A shift in time, in seconds, from the moment the message arrives. It moves when the swing lets go and ends, and when the unit may next attack.
missileu32The name the missile this swing throws will answer to. Zero for a swing that throws none.
fromXf32Where the swinging unit stands, along one ground axis, in world units. A client stops the unit’s movement and places it at this point, height included, even where it does not know target and no swing follows.
fromYf32Where it stands, in height, in world units.
fromZf32Where it stands, along the other, in world units.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 54 on events, sent by the server, reliable.

FieldTypeWhat it is
targetu32The unit swung at. A client throws the swing at it.
timingf32A shift in time, in seconds, from the moment the message arrives. It moves when the swing lets go and ends, and when the unit may next attack.
missileu32The name the missile this swing throws will answer to.
slotu8Which of the unit’s attacks this is.
fromXf32Where the swinging unit stands, along one ground axis, in world units. Where the unit stands more than 400 units from this point, measured along the ground alone, a client first moves it there; nearer, the point has no effect.
fromYf32Where it stands, in height, in world units.
fromZf32Where it stands, along the other, in world units.
Vectors (1)

one-on-0-9-22-14

StopAttack

What a server sends to break off an attack a unit is making. The header names the unit acting.

Definition.

In 0.8.13.26–0.9.22.13

Command 48 on events, sent by the server, reliable.

Whatever the flags, a client then clears the unit’s attack.

FieldTypeWhat it is
keepAnimatingu8Nonzero: set to let the attack’s animation play on after the stop.
forceCastu8Nonzero: set to make the attack land first where it has not already.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 48 on events, sent by the server, reliable.

Whatever the flags, a client then clears the unit’s attack.

FieldTypeWhat it is
how1-byte bits
how.keepAnimatingbit 0Set to let the attack’s animation play on after the stop. It applies only where forceStop is clear.
how.forceCastbit 1Set to make the attack land first where it has not already.
how.forceStopbit 2Set to stop the current cast outright; clear, a client stops the attack the ordinary way.
how.summonerSpellbit 3Picks which spells the stop applies to: set, the summoner spells; clear, the unit’s own. A unit with no summoner spells, such as any unit that is not a champion, stops nothing when this is set.
how.destroyMissilebit 4Set to destroy the attack’s missile, where it has one. It applies only where forceStop is set and a cast is under way.
how.unusedbit 5 to 7Unused; a server writes zero.

Damage

What a server sends to say one unit hurt another. The header names the unit hurt, as target does.

Definition.

In 0.8.13.26–0.9.22.13

Command 23 on events, sent by the server, reliable.

For results 3, 4 and any above 5, a client takes amount off the target’s health, held at its maximum, but leaves the health as it was where the new value would be zero or less. Where the header names the client’s own champion and the target is a champion, an amount above zero can bring up the low-health screen effect.

FieldTypeWhat it is
resultu8How the damage landed, and so what a client shows over the unit hurt, as one whole byte. 4 shows the amount, 3 shows it as a critical strike, and 2 shows the word for a dodge in place of an amount; any value above 5 shows as 4. Values: 0 invulnerable, 1 silent, 2 dodge, 3 critical, 4 normal, 5 miss.
targetu32The unit hurt.
sourceu32The unit dealing it. A client shows nothing, notices included, unless it holds target and target can be attacked; it does not need to hold source, and a champion source has the amount added to its damage dealt.
amountf32How much.
Vectors (1)

invulnerable-on-0-8-13-26

In 0.9.22.14–0.9.25.23

Command 23 on events, sent by the server, reliable.

A client shows the figure and nothing more: the health it shows for the unit is what replication carries, and this message leaves it as it was.

FieldTypeWhat it is
how1-byte bits
how.resultbit 0 to 6How the damage landed, and so what a client shows over the unit hurt. 4 shows the amount, 3 shows it as a critical strike, and 2 shows the word for a dodge in place of an amount; any value above 5 shows as 4.
how.soundbit 7Set to play a sound made from the source’s and the target’s sound names, at the target. A client plays it only where it holds both and sees the target.
targetu32The unit hurt.
sourceu32The unit dealing it. A client shows nothing, notices included, unless it holds target and target can be attacked; it does not need to hold source, and a champion source has the amount added to its damage dealt.
amountf32How much.
Vectors (1)

one-on-0-9-25-21

In 0.9.25.24–1.0.0.24

Command 23 on events, sent by the server, reliable.

A client shows the figure, but the health it shows for the unit is what replication carries, and this message leaves it as it was.

FieldTypeWhat it is
how1-byte bits
how.resultbit 0 to 6How the damage landed, and so what a client shows over the unit hurt: 0 the word for invulnerable, 1 nothing, 2 the word for a dodge, 3 the amount as a critical strike, 4 the amount, and 5 the word for a miss; any value above 5 shows as 4. A client shows the amount cut down to a whole number.
how.unusedbit 7Unused; a server writes zero.
targetu32The unit hurt.
sourceu32The unit dealing it. A client shows nothing, notices included, unless it holds target and target can be attacked; it does not need to hold source, and a champion source has the amount added to its damage dealt where result is 3, 4 or above 5.
amountf32How much.

TargetUnit

What a server sends to say what a unit is attacking, whatever the unit attacked is. A client takes down whatever it was drawing for that unit’s last target and draws for the new one where the target and the unit’s own settings allow. The header names the unit acting.

Definition.

In every range of this book

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.8.13.26–0.9.22.1373
0.9.22.14–1.0.0.2469

Only a turret takes it, drawing its beam to target.

FieldTypeWhat it is
targetu32The unit being attacked, or zero where it is attacking nothing.
Vectors (1)

one-on-0-8-13-26

TargetHeldChampion

What a server sends to mark that a unit is attacking a champion, or to take the mark away. The header names the unit. TargetUnit draws the targeting beam and never touches this mark.

Definition.

In 0.9.22.14–1.0.0.24

Command 70 on events, sent by the server, reliable.

A client marks the unit where target is its own champion, drawing an indicator on the unit’s health bar unless the unit’s data turns it off; any other target clears the mark. A client fails on a nonzero target where it has no player of its own.

FieldTypeWhat it is
targetu32The champion being attacked.

UnitDied

What a server sends to say a unit died, to everyone who can see it. The header names the unit this is about.

Definition.

In 0.8.13.26–0.9.22.13

Command 34 on events, sent by the server, reliable.

A client does nothing more for a unit already dead, or where killer is zero. Otherwise, whether or not it knows killer, it puts the unit down for stayDown: dead, with no health, its movement, cast and attack stopped. For a minion whose killer, or the killer’s owner, is the player’s own champion, it then shows a kill notice.

FieldTypeWhat it is
killeru32The unit credited with the death.
damageTypeu8Unused; a server writes zero.
damageSourceu8Unused; a server writes zero.
stayDownf32How long the unit stays down, in seconds.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 34 on events, sent by the server, reliable.

A client does nothing for a unit already dead. Otherwise it stops the unit’s cast and attack and, where killer is nonzero, puts the unit down for stayDown, whether or not it knows killer, and shows what that kind of unit shows for a kill, for a minion only where killer is on another side.

FieldTypeWhat it is
killeru32The unit credited with the death.
damageTypeu8Unused; a server writes zero.
damageSourceu8Unused; a server writes zero.
stayDownf32How long the unit stays down, in seconds.

BuildingDied

What a server sends when a building is destroyed. The header names the unit this is about.

Definition.

In 0.8.13.26–0.9.22.13

Command 76 on events, sent by the server, reliable.

A server sends it for no nexus. A client takes a building it names away four seconds later, turrets and the nexus included, and a nexus it takes away leaves the client failing at its next game event. An inhibitor stays: a client plays its destruction and raises a game event carrying attacker. A nexus falls with GameEnded.

FieldTypeWhat it is
attackeru32The unit that destroyed it. Only an inhibitor reads it; a client reads nothing here for any other building.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–0.9.25.35

Command 73 on events, sent by the server, reliable.

A server sends it for no nexus. A client takes a building it names away four seconds later, and a nexus it takes away leaves the client failing at its next game event. An inhibitor stays: a client plays its destruction and raises a game event carrying attacker. A nexus falls with GameEnded.

FieldTypeWhat it is
attackeru32The unit that destroyed it. Only an inhibitor reads it; a client reads nothing here for any other building.
Vectors (1)

one-on-0-9-25-24

In 0.9.25.36–1.0.0.24

Command 73 on events, sent by the server, reliable.

FieldTypeWhat it is
attackeru32The unit that destroyed it. A client reads nothing here.

GreyscaleWhenDead

What a server sends to say whether a client draws the world without colour while its champion is down. The header names a champion: that of the player it is sent to.

Definition.

In 0.9.25.36–1.0.0.24

Command 170 on events, sent by the server, reliable.

FieldTypeWhat it is
state1-byte bits
state.enabledbit 0Set where the world is drawn without colour. Clear, it does not stop a client drawing the world without colour while its champion is down.
state.unusedbit 1 to 7Unused; a server writes zero.

DeathHistory

What a server sends to say what led to a death, so the client can lay it out. The header names the unit this is about.

Definition.

In 0.9.22.14–0.9.22.15

Command 112 on events, sent by the server, reliable.

A client ignores the whole message where killer is zero; a killer it does not hold brings it down. Each entry’s size after source follows from event alone.

FieldTypePresent whenWhat it is
killeru32The unit credited with the death. A client ignores the whole message where this is zero, and fails where it does not hold this unit.
sourceTypeu32What sort of source the killer was. A client keeps only the low 4 bits, signed, and acts on them only where it holds killer.
blobLengthu32How many bytes the entries below take together. A client reads exactly that many; zero, or a value above 2147483647, carries no entries. A client reads it as signed: from 2147483648 up it reads nothing more.
entryCountu32How many entries follow. Read as signed: from 2147483648 up it parses no entries.
entriescount in entryCount × recordWhat happened to the unit before it died, packed one after another.
entries[].timef32When it happened, in match seconds.
entries[].countu16How many times.
entries[].eventu8Which event, from 0 to 62, and so which fields follow. Values: 0 died, 2 championDied, 3 championKill, 4 doubleKill, 10 damageTaken, 11 damageDealt, 18 goldSpent, 19 goldEarned, 20 consumableBought, 21 criticalStrike, 24 inhibitorKilled, 25 inhibitorDied, 26 inhibitorRespawningSoon, 28 turretKilled, 29 turretDied, 30 minionKilled, 31 minionDenied, 32 monsterKilled, 33 largeMonsterKilled, 34 nexusKilled, 35 nexusDied, 36 heal, 37 healCast, 38 buff, 39 killingSpree, 46 killDuringSpree, 53 deathAssist, 54 playerQuit, 55 playerLeft, 56 playerReconnected, 62 itemBought.
entries[].sourceu32The unit that did it.
entries[].targetu32The unit it was done to. A client fails where it holds the source but not this unit.
entries[].damagerecordevent = 10 or 11How much harm, and from what.
entries[].damage.physicalf32Physical damage.
entries[].damage.magicalf32Magical damage.
entries[].damage.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
entries[].damage.scriptu32The spell or effect, by the number its name gives, shown by name.
entries[].damage.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
entries[].damage.parentCasteru32Unused; a client reads nothing here.
entries[].damage.parent4-byte bitsWhere the spell or effect came from.
entries[].damage.parent.sourcebit 0 to 3What sort of source the parent spell or effect is, numbered as sourceKind is.
entries[].damage.parent.sidebit 4 to 7What it means is not recorded for this range; a server writes zero.
entries[].damage.parent.categorybit 8 to 11A client sums two entries of this sort where this, the source kinds and both spells match, and, where this is zero, the subjects match too.
entries[].damage.parent.spellLevelbit 12 to 14The rank of the spell, as shown.
entries[].damage.parent.unusedbit 15 to 31Unused; a server writes zero.
entries[].spentu32event = 18How much gold, as shown.
entries[].valueu32event = 20What it carries is not recorded for this range; a client does not show it.
entries[].criticalf32event = 21The critical strike’s damage, as shown.
entries[].spreeu32event = 39How many kills in a row, as shown.
entries[].earnedrecordevent = 19Gold earned.
entries[].earned.goldf32How much gold, as shown.
entries[].healrecordevent = 36 or 37How much health, and from what.
entries[].heal.amountf32How much health, as shown.
entries[].heal.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
entries[].heal.scriptu32The spell or effect, by the number its name gives, shown by name.
entries[].heal.spellLevelu32The level of the spell it came from.
entries[].heal.parentSourceu32What sort of source the parent script is, as sourceKind.
entries[].heal.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
entries[].heal.unusedu32Unused; a client reads nothing here.
entries[].heal.unusedToou32Unused; a client reads nothing here.
entries[].effectrecordevent = 38The effect, and where it came from.
entries[].effect.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
entries[].effect.scriptu32The spell or effect, by the number its name gives, shown by name.
entries[].effect.spellLevelu32The level of the spell it came from.
entries[].effect.parentSourceu32What sort of source the parent script is, as sourceKind.
entries[].effect.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
entries[].effect.unusedu32Unused; a client reads nothing here.
entries[].effect.unusedToou32Unused; a client reads nothing here.
entries[].assistrecordevent = 53What one unit did toward a death.
entries[].assist.lastHitf32When it last dealt damage, in match seconds.
entries[].assist.physicalf32Physical damage it dealt.
entries[].assist.magicalf32Magical damage it dealt.
entries[].assist.sharef32What it carries is not recorded for this range; a server writes zero.
entries[].assist.goldf32What it carries is not recorded for this range; a server writes zero.
entries[].killrecordevent = 0Nothing a client shows; the unit before it names the killer.
entries[].kill.unusedf32A client reads nothing here, and writes zero where it raises the event itself. A server writes zero.
Vectors (1)

one-on-0-9-22-14

In 0.9.22.16–0.9.25.20

Command 112 on events, sent by the server, reliable.

A client ignores the whole message where killer is zero; a killer it does not hold brings it down. Each entry’s size after source follows from event alone.

FieldTypePresent whenWhat it is
killeru32The unit credited with the death. A client ignores the whole message where this is zero, and fails where it does not hold this unit.
sourceTypeu32What sort of source the killer was. A client keeps only the low 4 bits, signed, and acts on them only where it holds killer.
blobLengthu32How many bytes the entries below take together. A client reads exactly that many; zero, or a value above 2147483647, carries no entries. A client reads it as signed: from 2147483648 up it reads nothing more.
entryCountu32How many entries follow. Read as signed: from 2147483648 up it parses no entries.
entriescount in entryCount × recordWhat happened to the unit before it died, packed one after another.
entries[].timef32When it happened, in match seconds.
entries[].countu16How many times.
entries[].eventu8Which event, from 0 to 70, and so which fields follow. Values: 0 died, 2 championDied, 3 championKill, 4 doubleKill, 10 damageTaken, 11 damageDealt, 18 goldSpent, 19 goldEarned, 20 consumableBought, 21 criticalStrike, 24 inhibitorKilled, 25 inhibitorDied, 26 inhibitorRespawningSoon, 28 turretKilled, 29 turretDied, 30 minionKilled, 31 minionDenied, 32 monsterKilled, 33 largeMonsterKilled, 34 nexusKilled, 35 nexusDied, 36 heal, 37 healCast, 38 buff, 39 killingSpree, 46 killDuringSpree, 53 deathAssist, 54 playerQuit, 55 playerLeft, 56 playerReconnected, 62 itemBought, 66 surrenderCountdown, 71 minionsSpawned, 72 welcome, 73 startNoticeTwo.
entries[].sourceu32The unit that did it.
entries[].targetu32The unit it was done to. A client fails where it holds the source but not this unit.
entries[].damagerecordevent = 10 or 11How much harm, and from what.
entries[].damage.physicalf32Physical damage.
entries[].damage.magicalf32Magical damage.
entries[].damage.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
entries[].damage.scriptu32The spell or effect, by the number its name gives, shown by name.
entries[].damage.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
entries[].damage.parentCasteru32Unused; a client reads nothing here.
entries[].damage.parent4-byte bitsWhere the spell or effect came from.
entries[].damage.parent.sourcebit 0 to 3What sort of source the parent spell or effect is, numbered as sourceKind is.
entries[].damage.parent.sidebit 4 to 7What it means is not recorded for this range; a server writes zero.
entries[].damage.parent.categorybit 8 to 11A client sums two entries of this sort where this, the source kinds and both spells match, and, where this is zero, the subjects match too.
entries[].damage.parent.spellLevelbit 12 to 14The rank of the spell, as shown.
entries[].damage.parent.unusedbit 15 to 31Unused; a server writes zero.
entries[].spentu32event = 18How much gold, as shown.
entries[].valueu32event = 20 or 62What it carries is not recorded for this range; a client does not show it.
entries[].criticalf32event = 21The critical strike’s damage, as shown.
entries[].spreeu32event = 39How many kills in a row, as shown.
entries[].earnedrecordevent = 19Gold earned.
entries[].earned.goldf32How much gold, as shown.
entries[].healrecordevent = 36 or 37How much health, and from what.
entries[].heal.amountf32How much health, as shown.
entries[].heal.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
entries[].heal.scriptu32The spell or effect, by the number its name gives, shown by name.
entries[].heal.spellLevelu32The level of the spell it came from.
entries[].heal.parentSourceu32What sort of source the parent script is, as sourceKind.
entries[].heal.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
entries[].heal.unusedu32Unused; a client reads nothing here.
entries[].heal.unusedToou32Unused; a client reads nothing here.
entries[].effectrecordevent = 38The effect, and where it came from.
entries[].effect.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
entries[].effect.scriptu32The spell or effect, by the number its name gives, shown by name.
entries[].effect.spellLevelu32The level of the spell it came from.
entries[].effect.parentSourceu32What sort of source the parent script is, as sourceKind.
entries[].effect.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
entries[].effect.unusedu32Unused; a client reads nothing here.
entries[].effect.unusedToou32Unused; a client reads nothing here.
entries[].assistrecordevent = 53What one unit did toward a death.
entries[].assist.lastHitf32When it last dealt damage, in match seconds.
entries[].assist.physicalf32Physical damage it dealt.
entries[].assist.magicalf32Magical damage it dealt.
entries[].assist.sharef32What it carries is not recorded for this range; a server writes zero.
entries[].assist.goldf32What it carries is not recorded for this range; a server writes zero.
entries[].killrecordevent = 0Nothing a client shows; the unit before it names the killer.
entries[].kill.unusedf32A client reads nothing here, and writes zero where it raises the event itself. A server writes zero.
Vectors (1)

one-on-0-9-22-16

In 0.9.25.21–0.9.25.23

Command 112 on events, sent by the server, reliable.

A client ignores the whole message where killer is zero; a killer it does not hold brings it down. Each entry’s size after source follows from event alone.

FieldTypePresent whenWhat it is
killeru32The unit credited with the death. A client ignores the whole message where this is zero, and fails where it does not hold this unit.
sourceTypeu32What sort of source the killer was. A client keeps only the low 4 bits, signed, and acts on them only where it holds killer.
blobLengthu32How many bytes the entries below take together. A client reads exactly that many; zero, or a value above 2147483647, carries no entries. A client reads it as signed: from 2147483648 up it reads nothing more.
entryCountu32How many entries follow. Read as signed: from 2147483648 up it parses no entries.
entriescount in entryCount × recordWhat happened to the unit before it died, packed one after another.
entries[].timef32When it happened, in match seconds.
entries[].countu16How many times.
entries[].eventu8Which event, from 0 to 70, and so which fields follow. Values: 0 died, 2 championDied, 3 championKill, 4 doubleKill, 10 damageTaken, 11 damageDealt, 18 goldSpent, 19 goldEarned, 20 consumableBought, 21 criticalStrike, 24 inhibitorKilled, 25 inhibitorDied, 26 inhibitorRespawningSoon, 28 turretKilled, 29 turretDied, 30 minionKilled, 31 minionDenied, 32 monsterKilled, 33 largeMonsterKilled, 34 nexusKilled, 35 nexusDied, 36 heal, 37 healCast, 38 buff, 39 killingSpree, 46 killDuringSpree, 53 deathAssist, 54 playerQuit, 55 playerLeft, 56 playerReconnected, 62 itemBought, 66 surrenderCountdown, 71 minionsSpawned, 72 welcome, 73 startNoticeTwo.
entries[].sourceu32The unit that did it.
entries[].targetu32The unit it was done to. A client fails where it holds the source but not this unit.
entries[].damagerecordevent = 10 or 11How much harm, and from what.
entries[].damage.physicalf32Physical damage.
entries[].damage.magicalf32Magical damage.
entries[].damage.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
entries[].damage.scriptu32The spell or effect, by the number its name gives, shown by name.
entries[].damage.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
entries[].damage.parentCasteru32Unused; a client reads nothing here.
entries[].damage.parent4-byte bitsWhere the spell or effect came from.
entries[].damage.parent.sourcebit 0 to 3What sort of source the parent spell or effect is, numbered as sourceKind is.
entries[].damage.parent.sidebit 4 to 7What it means is not recorded for this range; a server writes zero.
entries[].damage.parent.categorybit 8 to 11A client sums two entries of this sort where this, the source kinds and both spells match, and, where this is zero, the subjects match too.
entries[].damage.parent.spellLevelbit 12 to 14The rank of the spell, as shown.
entries[].damage.parent.unusedbit 15 to 31Unused; a server writes zero.
entries[].spentu32event = 18How much gold, as shown.
entries[].valueu32event = 20 or 62What it carries is not recorded for this range; a client does not show it.
entries[].criticalf32event = 21The critical strike’s damage, as shown.
entries[].spreeu32event = 39How many kills in a row, as shown.
entries[].earnedrecordevent = 19Gold earned.
entries[].earned.goldf32How much gold, as shown.
entries[].healrecordevent = 36 or 37How much health, and from what.
entries[].heal.amountf32How much health, as shown.
entries[].heal.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
entries[].heal.scriptu32The spell or effect, by the number its name gives, shown by name.
entries[].heal.spellLevelu32The level of the spell it came from.
entries[].heal.parentSourceu32What sort of source the parent script is, as sourceKind.
entries[].heal.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
entries[].heal.unusedu32Unused; a client reads nothing here.
entries[].heal.unusedToou32Unused; a client reads nothing here.
entries[].effectrecordevent = 38The effect, and where it came from.
entries[].effect.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
entries[].effect.scriptu32The spell or effect, by the number its name gives, shown by name.
entries[].effect.spellLevelu32The level of the spell it came from.
entries[].effect.parentSourceu32What sort of source the parent script is, as sourceKind.
entries[].effect.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
entries[].effect.unusedu32Unused; a client reads nothing here.
entries[].effect.unusedToou32Unused; a client reads nothing here.
entries[].assistrecordevent = 53What one unit did toward a death.
entries[].assist.lastHitf32When it last dealt damage, in match seconds.
entries[].assist.physicalf32Physical damage it dealt.
entries[].assist.magicalf32Magical damage it dealt.
entries[].assist.sharef32What it carries is not recorded for this range; a server writes zero.
entries[].assist.goldf32What it carries is not recorded for this range; a server writes zero.
entries[].assist.creditedu32What it carries is not recorded for this range; a server writes zero.
entries[].killrecordevent = 0Nothing a client shows; the unit before it names the killer.
entries[].kill.unusedf32A client reads nothing here, and writes zero where it raises the event itself. A server writes zero.
Vectors (1)

one-on-0-9-25-21

In 0.9.25.24–1.0.0.24

Command 112 on events, sent by the server, reliable.

A client ignores the whole message where killer is zero; a killer it does not hold brings it down. Each entry’s size after source follows from event alone.

FieldTypePresent whenWhat it is
killeru32The unit credited with the death. A client ignores the whole message where this is zero, and fails where it does not hold this unit.
sourceTypeu32What sort of source the killer was. A client keeps only the low 4 bits, signed, and acts on them only where it holds killer.
blobLengthu32How many bytes the entries below take together. A client reads exactly that many; zero, or a value above 2147483647, carries no entries. A client reads it as signed: from 2147483648 up it reads nothing more.
entryCountu32How many entries follow. Read as signed: from 2147483648 up it parses no entries.
entriescount in entryCount × recordWhat happened to the unit before it died, packed one after another.
entries[].timef32When it happened, in match seconds.
entries[].countu16How many times.
entries[].eventu8Which event, from 0 to 73, and so which fields follow. Values: 0 died, 2 championDied, 3 championKill, 4 doubleKill, 10 damageTaken, 11 damageDealt, 18 goldSpent, 19 goldEarned, 20 consumableBought, 21 criticalStrike, 24 inhibitorKilled, 25 inhibitorDied, 26 inhibitorRespawningSoon, 28 turretKilled, 29 turretDied, 30 minionKilled, 31 minionDenied, 32 monsterKilled, 33 largeMonsterKilled, 34 nexusKilled, 35 nexusDied, 36 heal, 37 healCast, 38 buff, 39 killingSpree, 46 killDuringSpree, 53 deathAssist, 54 playerQuit, 55 playerLeft, 56 playerReconnected, 62 itemBought, 66 surrenderCountdown, 71 minionsSpawned, 72 welcome, 73 startNoticeTwo.
entries[].sourceu32The unit that did it.
entries[].targetu32The unit it was done to. A client fails where it holds the source but not this unit.
entries[].damagerecordevent = 10 or 11How much harm, and from what.
entries[].damage.physicalf32Physical damage.
entries[].damage.magicalf32Magical damage.
entries[].damage.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
entries[].damage.scriptu32The spell or effect, by the number its name gives, shown by name.
entries[].damage.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
entries[].damage.parentCasteru32Unused; a client reads nothing here.
entries[].damage.parent4-byte bitsWhere the spell or effect came from.
entries[].damage.parent.sourcebit 0 to 3What sort of source the parent spell or effect is, numbered as sourceKind is.
entries[].damage.parent.sidebit 4 to 7What it means is not recorded for this range; a server writes zero.
entries[].damage.parent.categorybit 8 to 11A client sums two entries of this sort where this, the source kinds and both spells match, and, where this is zero, the subjects match too.
entries[].damage.parent.spellLevelbit 12 to 14The rank of the spell, as shown.
entries[].damage.parent.unusedbit 15 to 31Unused; a server writes zero.
entries[].spentu32event = 18How much gold, as shown.
entries[].valueu32event = 20 or 62What it carries is not recorded for this range; a client does not show it.
entries[].criticalf32event = 21The critical strike’s damage, as shown.
entries[].spreeu32event = 39How many kills in a row, as shown.
entries[].earnedrecordevent = 19Gold earned.
entries[].earned.goldf32How much gold, as shown.
entries[].healrecordevent = 36 or 37How much health, and from what.
entries[].heal.amountf32How much health, as shown.
entries[].heal.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
entries[].heal.scriptu32The spell or effect, by the number its name gives, shown by name.
entries[].heal.spellLevelu32The level of the spell it came from.
entries[].heal.parentSourceu32What sort of source the parent script is, as sourceKind.
entries[].heal.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
entries[].heal.unusedu32Unused; a client reads nothing here.
entries[].heal.unusedToou32Unused; a client reads nothing here.
entries[].effectrecordevent = 38The effect, and where it came from.
entries[].effect.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
entries[].effect.scriptu32The spell or effect, by the number its name gives, shown by name.
entries[].effect.spellLevelu32The level of the spell it came from.
entries[].effect.parentSourceu32What sort of source the parent script is, as sourceKind.
entries[].effect.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
entries[].effect.unusedu32Unused; a client reads nothing here.
entries[].effect.unusedToou32Unused; a client reads nothing here.
entries[].assistrecordevent = 53What one unit did toward a death.
entries[].assist.lastHitf32When it last dealt damage, in match seconds.
entries[].assist.physicalf32Physical damage it dealt.
entries[].assist.magicalf32Magical damage it dealt.
entries[].assist.sharef32What it carries is not recorded for this range; a server writes zero.
entries[].assist.goldf32What it carries is not recorded for this range; a server writes zero.
entries[].assist.creditedu32What it carries is not recorded for this range; a server writes zero.
entries[].killrecordevent = 0Nothing a client shows; the unit before it names the killer.
entries[].kill.unusedf32A client reads nothing here, and writes zero where it raises the event itself. A server writes zero.
Vectors (1)

one-on-0-9-25-24

InhibitorState

What a server sends to change the state of an inhibitor, and say how long the new state lasts. The header names the unit this is about.

Definition.

In 0.8.13.26–0.9.22.13

Command 69 on events, sent by the server, reliable.

FieldTypeWhat it is
stateu32What state the inhibitor takes. Any other value becomes the inhibitor’s state and changes nothing shown; a later 0 or 1 still applies. A state equal to the one held changes nothing but the duration. Values: 0 down, 1 restored.
durationu32How long the state lasts, in seconds. A client stores it whatever state the message holds.
Vectors (1)

down-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 65 on events, sent by the server, reliable.

FieldTypeWhat it is
stateu32What state the inhibitor takes. A client ignores any other value. Values: 0 down, 1 restored.
durationi32How long the state lasts, in whole seconds.
Vectors (1)

down-on-0-9-22-14

Revived

What a server sends to put a champion back on the field. The header names the unit this is about.

Definition.

In 0.8.13.26–0.9.22.13

Command 74 on events, sent by the server, reliable.

A client brings the champion back as Respawned does, at the nearest open ground to where it already stands, first ending its death where it is still dead.

FieldTypeWhat it is
atXf32A client reads nothing here.
atYf32A client reads nothing here.
atZf32A client reads nothing here.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 71 on events, sent by the server, reliable.

A client returns the champion where it already stands.

FieldTypeWhat it is
atXf32A client reads nothing here.
atYf32A client reads nothing here.
atZf32A client reads nothing here.

Respawned

What a server sends to bring a dead champion back at a place. The header names the champion. A client keeps the champion’s level, experience, gold, maxima and spell ranks, and plays the coming back.

Definition.

In 0.8.13.26–0.9.22.13

Command 75 on events, sent by the server, reliable.

A client returns the champion to the nearest open ground to where it already stands.

FieldTypeWhat it is
xf32A client reads nothing here.
yf32A client reads nothing here.
zf32A client reads nothing here.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 72 on events, sent by the server, reliable.

A client returns the champion where it already stands. The champion comes back with full health, and for its own champion a client moves the camera onto it where the player asked for that.

FieldTypeWhat it is
xf32A client reads nothing here.
yf32A client reads nothing here.
zf32A client reads nothing here.

Spells

Casting, levelling spells, cooldowns, and the missiles casts send out.

Casting

A client asks to cast from one of its champion’s slots with CastSpell, at a point or at a unit. A server answers with SpellCastAnswer, which says the unit is casting and carries the whole casting: the spell, its level, its target, its timings and the missile it will send. A client shows the cast from that answer; CastSpell alone shows nothing. A server then sets how long until the slot is ready with SpellCooldown, and, for a spell with uses, how many are left with SpellCharges. A client reports a cooldown it sets by itself with CooldownSet.

Which slots a client lets its player cast from at all is a value of the champion’s that replication carries.

In 0.8.13.26–0.9.25.35

A client still casts from a casting record whose length disagrees with its count of targets.

A spell held down before it is let go charges where the cast answer leaves its flags clear. While it charges, a client sends SpellCharge with the cursor’s position, and once more as the charge ends.

A server ends a spell’s aiming on a client with CancelTargeting, shows and takes away a spell’s targeter on a client’s own champion with SpellTargeterShown and SpellTargeterHidden, and sets which spells a unit casts by itself with Autocast.

Levelling

A client asks to put a point into a spell with UpgradeSpell. A server answers with SpellUpgraded, and a client shows the new level; SpellLevel sets a level outright. The spell points a champion has to spend are what LevelUp carries. A server can set how far each spell can be raised, and at which champion levels, with SpellRankLimits.

A client spends the point as it sends UpgradeSpell. LevelUp states the champion’s level and its points.

In 0.9.25.24–1.0.0.24

A command its player types sends UpgradeSpell without checking anything.

What a slot holds

SpellInSlot puts a spell in a slot. SpellSlotChanged changes one thing about a spell already there: how it is aimed, its name, its ranges, its icon, or the units it is cast from. SpellTargetingChanged, SpellNameChanged, SpellRangeChanged, SpellIconChanged and SpellOffsetTargetChanged each change one of these alone, and SpellSlotChangedForOwner changes a slot as SpellSlotChanged does, for the owner’s client alone. SpellToggled turns a spell on or off, SpellNumbers fills in the numbers a client shows beside a unit’s spells, and SpellCostChanged changes what a spell costs. A server can also draw rings around its player’s cursor with CursorRings.

A marker has no slots. A server MUST NOT send SpellInSlot naming a marker: a client fails on it, whatever the slot.

Missiles

A missile is named by its own id. MissileState says where one is and what it is doing, with the casting that sent it; MissileLaunched says the missile a swing or a cast prepared has left the unit. A server changes what a missile flies at with MissileRetarget and how fast with MissileSpeed, says what it struck with MissileHits, and is rid of it with DestroyMissile. A missile that bounces from unit to unit does so with BounceMissile, and a server can name in advance the units a chain missile will strike with ChainTargets. MissileCourse sets where a missile starts and how fast it flies, and restarts its flight. A client reports where a missile that flies straight is, and where it is going, with MissileReport, which a server MAY ignore.

In 0.9.25.24–1.0.0.24

Only a missile that flies straight acts on MissileHits.

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).

CastSpell

What a client sends to cast something from a slot, at a point or at a unit. The header names the sender’s champion.

Definition.

In 0.8.13.26–0.9.22.13

Command 35 on requests, sent by the client, reliable.

FieldTypeWhat it is
how1-byte bits
how.summonerSpellbit 0Set where the slot is a summoner spell’s.
how.slotbit 1 to 7Which slot is being cast from, from 0 to 22. A client still sends a larger slot, its low seven bits only.
xf32A point on the ground the cast is described by, along one axis, in world units.
yf32The same point, in height, in world units: the height of the place aimed at.
zf32The same point, along the other axis, in world units.
endXf32The second point of what aims the spell; for a spell that takes no aim it is the caster’s own position, the same as the first.
endYf32The second point, in height, in world units: the height of where the cast ends.
endZf32The second point, along the other axis, in world units.
targetu32The unit aimed at; for a spell that takes no aim, the caster itself, with its own position in both points. Zero only where no unit is aimed at.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 35 on requests, sent by the client, reliable.

FieldTypeWhat it is
how1-byte bits
how.summonerSpellbit 0Set where the slot is a summoner spell’s.
how.slotbit 1 to 7Which slot is being cast from, from 0 to 44. A client still sends a larger slot, its low seven bits only.
xf32A point on the ground the cast is described by, along one axis, in world units.
yf32The same point, in height, in world units: the height of the place aimed at.
zf32The same point, along the other axis, in world units.
endXf32The second point of what aims the spell; for a spell that takes no aim it is the caster’s own position, the same as the first.
endYf32The second point, in height, in world units: the height of where the cast ends.
endZf32The second point, along the other axis, in world units.
targetu32The unit aimed at; for a spell that takes no aim, the caster itself, with its own position in both points. Zero only where no unit is aimed at.
Vectors (1)

one-on-0-9-22-14

SpellCastAnswer

What a server sends to say a unit is casting a spell. The header names the unit casting, as the casting inside does.

Definition.

In every range of this book

Command 36 on events, sent by the server, reliable.

There is no byte for ending a charge and no sync id: the casting follows the header at once.

FieldTypeWhat it is
castSpellCastThe casting.

SpellCooldown

What a server sends to set how long until one of a unit’s spells is ready. The header names the unit this is about.

Definition.

In 0.8.13.26–0.9.22.13

Command 33 on events, sent by the server, reliable.

It carries no whole cooldown to show the time left against.

FieldTypeWhat it is
unreadbytes, 5A client reads nothing here. A server writes zero.
which1-byte bits
which.slotbit 0 to 6Which slot.
which.summonerSpellbit 7Set where the slot counts among the summoner slots, so that 0 and 1 name those two.
timeLeftf32How long is left, in seconds.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 33 on events, sent by the server, reliable.

It carries no whole cooldown to show the time left against.

FieldTypeWhat it is
which1-byte bits
which.slotbit 0 to 6Which slot.
which.summonerSpellbit 7Set where the slot counts among the summoner slots, so that 0 and 1 name those two. A client fails where it is set for a unit that is not a champion.
timeLeftf32How long is left, in seconds.

CooldownSet

What a client sends where a script of its own sets a spell slot’s cooldown. The header names the unit.

Definition.

In 0.8.13.26–0.9.22.13

Command 33 on requests, sent by the client, reliable.

FieldTypeWhat it is
tokenu32Names this report: its low 24 bits count up by one with each numbered request the client sends, of any kind, and its high 8 bits hold the byte below.
clientByteu8A byte of the client’s own, as in token.
which1-byte bits
which.slotbit 0 to 6Which slot, 0 to 22.
which.summonerSpellbit 7Set where a script names the unit’s second set of spells.
cooldownf32The cooldown set, in seconds.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 33 on requests, sent by the client, reliable.

FieldTypeWhat it is
which1-byte bits
which.slotbit 0 to 6Which slot. For a slot outside the unit’s range a client sends 0.
which.summonerSpellbit 7Set where the slot is one from 4 to 40; slot still carries that slot’s own number.
cooldownf32The cooldown set, in seconds.

Autocast

What a server sends to set which spells a unit casts by itself. The header names the unit.

Definition.

In 0.8.13.26–0.9.22.13

Command 40 on events, sent by the server, reliable.

It names one slot: there is no slot for a critical strike.

FieldTypeWhat it is
sloti8The slot cast by itself, from -1 to 22. A client takes a value outside that range as it stands. What -1 does is not recorded.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 40 on events, sent by the server, reliable.

It names one slot: there is no slot for a critical strike.

FieldTypeWhat it is
sloti8The slot cast by itself, from -1 to 44. A client takes a value outside that range as it stands. What -1 does is not recorded.
Vectors (1)

one-on-0-9-22-14

UpgradeSpell

What a client sends to put a point into a spell. The header names the sender’s champion.

Definition.

In every range of this book

Command 18 on requests, sent by the client, reliable.

A client takes the point off its own count before it sends this. There is no evolution point.

FieldTypeWhat it is
slotu8Which slot is being raised: 0 to 3, for the champion’s own spells, though a client does not hold itself to that range.

SpellUpgraded

What a server sends to confirm a unit’s spell went up a level. The header names the unit this is about.

Definition.

In every range of this book

Command 19 on clock, sent by the server, reliable.

A client handles it the same on every channel: it sets the slot’s level and the points left. It does this only for a champion, and nothing for any other unit.

FieldTypeWhat it is
slotu8Which slot.
levelu8The level the spell now stands at. A client takes any level above 5 as 5.
pointsLeftu8How many spell points are left unspent.

SpellTargetingChanged

What a server sends to change how a spell already in a unit’s slot is aimed. The header names the unit this is about.

Definition.

In 0.9.22.14–0.9.25.35

Command 133 on events, sent by the server, reliable.

FieldTypeWhat it is
which1-byte bits
which.slotbit 0 to 6Which slot. A champion’s own spells count from 0.
which.summonerSlotsbit 7Set where the slot counts among the summoner slots, so that 0 and 1 name those two.
targetingu8How the spell is aimed, 0 to 6. A client fails for any larger value; no value asks for the spell’s own default.
Vectors (1)

one-on-0-9-25-24

In 0.9.25.36–1.0.0.24

Command 132 on events, sent by the server, reliable.

FieldTypeWhat it is
which1-byte bits
which.slotbit 0 to 6Which slot. A champion’s own spells count from 0.
which.summonerSlotsbit 7Set where the slot counts among the summoner slots, so that 0 and 1 name those two. A client fails where it is set for a unit that is not a champion.
targetingu8How the spell is aimed, 0 to 6. For a larger value a client still writes it onto the slot but builds no aiming for it, which has no defined effect; no value asks for the spell’s own default.

SpellNameChanged

What a server sends to put another spell into a slot of a unit’s that already holds one. The header names the unit this is about.

Definition.

In 0.9.25.36–1.0.0.24

Command 172 on events, sent by the server, reliable.

FieldTypeWhat it is
which1-byte bits
which.slotbit 0 to 6Which slot. A champion’s own spells count from 0.
which.summonerSlotsbit 7Set where the slot counts among the summoner slots, so that 0 and 1 name those two. A client fails where it is set for a unit that is not a champion.
nametext, ended by a zero byteThe name the client loads the spell under, ended by a zero byte. A client shows the named spell’s icon in the slot, and treats a name it has no spell for as an error.

SpellNumbers

What a server sends to fill in the numbers a client shows beside a unit’s spells. The header names no object: a server writes zero.

Definition.

In 0.9.25.21–0.9.25.35

Command 168 on events, sent by the server, reliable.

FieldTypeWhat it is
entryCountu16How many sets of numbers follow. A client reads every set it names.
entriescount in entryCount × recordThe sets themselves.
entries[].unitu32The unit whose spell this is.
entries[].slotu8Which of the unit’s spell slots. A client fails where the unit has no such slot.
entries[].values3 × f32The numbers themselves, one place each.
Vectors (1)

one-on-0-9-25-24

In 0.9.25.36–1.0.0.24

Command 166 on events, sent by the server, reliable.

FieldTypeWhat it is
entryCountu16How many sets of numbers follow. A client reads every set it names.
entriescount in entryCount × recordThe sets themselves.
entries[].unitu32The unit whose spell this is.
entries[].slotu8Which slot.
entries[].values3 × f32The numbers themselves, one place each.
Vectors (1)

one-on-0-9-25-36

MissileState

What a server sends to say where a missile is and what it is doing.

Definition.

In 0.8.13.26–0.9.22.13

Command 67 on events, sent by the server, reliable.

The casting names the caster; the header need not. Where the header names a missile the client already holds, that missile moves to atX to atZ as well. A client sets the missile at atX to atZ, finite or not.

FieldTypeWhat it is
atXf32Where the missile is, along one ground axis, in world units.
atYf32Where the missile is, in height, in world units.
atZf32Where the missile is, along the other ground axis, in world units.
castSpellCastThe casting that threw it.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–0.9.22.15

Command 63 on events, sent by the server, reliable.

A client sets every missile at atX to atZ, and reads the rest of the prefix for a line missile alone. The header names the unit casting, as the casting inside does.

FieldTypeWhat it is
atXf32Where the missile is, along one ground axis, in world units.
atYf32Where the missile is, in height, in world units.
atZf32Where the missile is, along the other ground axis, in world units.
keptXf32A value along one ground axis that a line missile keeps and reports back in MissileReport. Any other missile reads nothing here.
keptYf32The same, in height.
keptZf32The same, along the other ground axis.
directionXf32The way a line missile travels, along one ground axis: the client scales it by the missile’s speed and adds it to the position. Any other missile reads nothing here.
directionYf32The same, in height.
directionZf32The same, along the other ground axis.
how1-byte bits
how.flagbit 0Changes how a line missile is set up; any other missile reads nothing here.
how.unusedbit 1 to 7Unused; a server writes zero.
castSpellCastThe casting that threw it.
Vectors (1)

one-on-0-9-22-14

In 0.9.22.16–1.0.0.24

Command 63 on events, sent by the server, reliable.

A client reads neither a speed nor a part of the missile’s life spent. Neither the ground-height rule for endY nor a trail moved on by an age is confirmed. A client places the casting’s second unit, where it holds that unit, where the thrower stood rather than with the casting unit. The header names the unit casting, as the casting inside does.

FieldTypeWhat it is
atXf32Where the missile is, along one ground axis, in world units.
atYf32Where the missile is, in height, in world units.
atZf32Where the missile is, along the other ground axis, in world units.
casterAtXf32Where the unit that threw it stood when it left, along one ground axis, in world units.
casterAtYf32Where the unit that threw it stood when it left, in height, in world units.
casterAtZf32Where the unit that threw it stood when it left, along the other ground axis, in world units.
facingXf32Which way the missile points, along one ground axis.
facingYf32Which way the missile points, in height.
facingZf32Which way the missile points, along the other ground axis.
velocityXf32How fast the missile travels, along one ground axis, in world units a second.
velocityYf32How fast the missile travels, in height, in world units a second.
velocityZf32How fast the missile travels, along the other ground axis, in world units a second.
endXf32Where the missile is bound for, along one ground axis, in world units.
endYf32Where the missile is bound for, in height, in world units.
endZf32Where the missile is bound for, along the other ground axis, in world units.
unitAtXf32Where to place the casting unit, along one ground axis, in world units, unless the casting itself places it.
unitAtYf32Its height, in world units.
unitAtZf32Where to place the casting unit, along the other ground axis, in world units.
how1-byte bits
how.bouncedbit 0Set where the missile has bounced. A client tests the whole byte, so any set bit counts. For a missile it already holds that flies in a straight line, a client then starts the line again from the caster’s position, raised by the missile’s height above the ground, aiming it from where the missile now is.
how.unusedbit 1 to 7Unused; a server writes zero.
castSpellCastThe casting that threw it.

MissileHits

What a server sends to say which units a missile struck. The header names the missile.

Definition.

In 0.9.22.16–1.0.0.24

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.9.22.16–0.9.25.35163
0.9.25.36–1.0.0.24161
FieldTypeWhat it is
countu16How many units follow. A client reads it as signed, so a count of zero or above 32767 carries no units, and a server sends at most 32767.
targetscount in count × u32The units struck, in order. A client still takes a unit it does not know, with nothing shown on it, and nothing after the hit that destroys the missile shows.
Vectors (1)

one-on-0-9-25-24

DestroyMissile

What a server sends to be rid of a missile a client is drawing. The header names the missile.

Definition.

In every range of this book

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.8.13.26–0.9.22.13105
0.9.22.14–1.0.0.24102

No body.

Vectors (1)

one-on-0-8-13-26

ChainTargets

What a server sends to name the units a chain missile will strike in turn. The header names the missile.

Definition.

In 0.8.13.26–0.9.22.13

Command 106 on events, sent by the server, reliable.

Where the client holds the caster, the caster takes the list, whether or not the client already holds the missile.

FieldTypeWhat it is
counti32How many of the slots are used, 0 to 32; 0 or less leaves the targets the client holds as they are. A client sets no bound, and more than 32 has no defined effect.
casteru32The unit casting the missile. Where a client does not hold it, the client starts no missile, though a missile it already holds under the header’s name still takes the targets.
targets32 × u32Always 32 slots; those past count have no effect.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–0.9.25.35

Command 103 on events, sent by the server, reliable.

Where the client already holds the missile, the missile takes the list, and so does the caster’s current cast; otherwise the list waits for the caster’s next chain missile.

FieldTypeWhat it is
counti32How many of the slots are used, 0 to 32; 0 or less leaves the targets the client holds as they are. A client sets no bound, and more than 32 has no defined effect.
casteru32The unit casting the missile. Where a client does not hold it, the client starts no missile, though a missile it already holds under the header’s name still takes the targets.
targets32 × u32Always 32 slots; those past count have no effect.
Vectors (1)

one-on-0-9-25-24

In 0.9.25.36–1.0.0.24

Command 103 on events, sent by the server, reliable.

Where the client already holds the missile, the missile takes the list; otherwise the list waits for the caster’s next chain missile.

FieldTypeWhat it is
counti32How many of the slots are used, 0 to 32; 0 clears every target the client holds, and a count below zero names no targets and clears nothing. A count above 32 has no defined effect.
casteru32The unit casting the missile. Where a client does not hold it, the client starts no missile, though a missile it already holds under the header’s name still takes the targets.
targets32 × u32Always 32 slots; those past count have no effect. A slot naming a unit the client does not know is left empty.

MissileReport

What a client sends to report where a missile that flies straight is and where it is going. A server need do nothing with it. The header names the missile.

Definition.

In 0.9.22.14–0.9.22.15

Command 63 on requests, sent by the client, reliable.

A client sends it always 173 bytes long, header included. A line missile writes every field; any other missile writes only atX to atZ and the cast, and leaves the rest unwritten.

FieldTypeWhat it is
atXf32Where the missile is, in world units, along one ground axis.
atYf32Where the missile is, in world units, in height.
atZf32Where the missile is, in world units, along the other ground axis.
keptXf32What the line missile keeps from MissileState’s keptX.
keptYf32The same, in height.
keptZf32The same, along the other ground axis.
directionXf32The way the line missile travels, along one ground axis.
directionYf32The same, in height.
directionZf32The same, along the other ground axis.
flagu8The line missile’s flag, as MissileState carried it.
castbytes, 128A description of the cast the missile belongs to, with whatever stood in memory after it up to the field’s end.
Vectors (1)

one-on-0-9-22-14

In 0.9.22.16–1.0.0.24

Command 63 on requests, sent by the client, reliable.

A client also sends it 209 bytes long, header included, from a missile of its own. That form writes only atX to atZ, velocityX to velocityZ and the cast, and leaves every other byte unwritten.

FieldTypeWhat it is
atXf32Where the missile is, in world units, along one ground axis.
atYf32Where the missile is, in world units, in height.
atZf32Where the missile is, in world units, along the other ground axis.
unknownAXf32What this holds is not recorded.
unknownAYf32What this holds is not recorded.
unknownAZf32What this holds is not recorded.
travelXf32Its end less its start, in world units, along one ground axis.
travelYf32Its end less its start, in world units, in height.
travelZf32Its end less its start, in world units, along the other ground axis.
velocityXf32How fast it travels, in world units a second, along one ground axis.
velocityYf32How fast it travels, in world units a second, in height.
velocityZf32How fast it travels, in world units a second, along the other ground axis.
endXf32Where it ends, in world units, along one ground axis.
endYf32Where it ends, in world units, in height.
endZf32Where it ends, in world units, along the other ground axis.
targetXf32Where its target is, or the point it aims at, in world units, along one ground axis.
targetYf32Where its target is, or the point it aims at, in world units, in height.
targetZf32Where its target is, or the point it aims at, in world units, along the other ground axis.
flagu8Zero or one; what it means is not recorded.
castbytes, sized by remainingA description of the cast the missile belongs to, at most 512 bytes.

Effects and looks

The lasting effects units carry, the particles a client draws, and how units look and move on screen. None of this changes what a unit can do; that is replication’s to say.

Lasting effects

A lasting effect sits in one of a unit’s effect slots and shows on its icon row. A server puts one on with EffectAdded, replaces the one in a slot with EffectReplaced, restates how many are stacked with EffectCount, and takes it off with EffectRemoved. The unit carrying an effect can differ from the unit that cast it. A server can do each of these for several units at once (EffectAddedGroup, EffectReplacedGroup, EffectCountGroup, EffectRemovedGroup), and set the number an effect shows on its icon with EffectCounter.

Particles

ParticlesCreated starts a client drawing particles, and KillParticle stops one. A server can also pause or resume a named group of emitters with EmitterPause, and drive a value of a unit’s lasting particles from something that changes, such as a capture point or the unit’s resource, with ParticleSource.

In 0.8.13.26–0.9.22.13

ParticlesCreated starts one particle, named by the message’s own id.

In 0.9.25.24–1.0.0.24

ParticlesCreated starts sets of particles, each named by its own id.

Looks and animation

A server lays a new look over a unit’s own with AppearancePushed; looks stack, the newest showing, and AppearancePopped and AppearanceCleared take them away. AnimationOverrides has a unit play one set of movements wherever it would have played another.

AppearancePopped takes away every look laid over the unit’s own, not only the newest.

A server can also:

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).

EffectAdded

What a server sends to put a lasting effect on a unit. The header names the unit carrying the effect, which can differ from the caster named inside.

Definition.

In 0.8.13.26–0.9.22.13

Command 37 on events, sent by the server, reliable.

FieldTypeWhat it is
slotu8Which of the unit’s effect slots it sits in. A client fails where it is above 31.
kindu8What sort of effect it is.
countu8How many of it are stacked there.
effectu32Which effect, by the number its name gives, as Objects and identifiers works it out. A client adds nothing for an effect it does not know.
lastsf32How long it runs in total, in seconds.
casteru32The unit that put it there.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 37 on events, sent by the server, reliable.

FieldTypeWhat it is
slotu8Which of the unit’s effect slots it sits in. A client fails where it is above 31.
kindu8What sort of effect it is.
countu8How many of it are stacked there.
effectu32Which effect, by the number its name gives, as Objects and identifiers works it out. A server never sends zero. A client adds nothing for an effect it does not know.
runningForf32How long it has already run, in seconds.
lastsf32How long it runs in total, in seconds.
casteru32The unit that put it there.

EffectReplaced

What a server sends about a lasting effect in a slot that already holds one. The header names the unit carrying the effect, which can differ from the caster named inside.

Definition.

In 0.8.13.26–0.9.25.20

Command 38 on events, sent by the server, reliable.

FieldTypeWhat it is
slotu8Which of the unit’s effect slots. A client fails where it is above 31.
lastsf32How long it runs from now, in seconds. A client applies a value below zero as given.
casteru32The unit that put it there. Where the client holds no such unit, it leaves the effect with no caster.
Vectors (1)

one-on-0-9-22-16

In 0.9.25.21–1.0.0.24

Command 38 on events, sent by the server, reliable.

FieldTypeWhat it is
slotu8Which of the unit’s effect slots. A client fails where it is above 31.
runningForf32How long the effect has already run, in seconds.
lastsf32How long it runs in total, in seconds. A client applies a value below zero as given; a server sends zero or more.
casteru32The unit that put it there. Where the client holds no such unit, it leaves the effect with no caster.

EffectCount

What a server sends to restate how many of a lasting effect are stacked on a unit. The header names the unit this is about.

Definition.

In every range of this book

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.8.13.26–0.9.22.1383
0.9.22.14–1.0.0.2480
FieldTypeWhat it is
slotu8Which slot. A client fails where it is above 31.
countu8How many are stacked there now.
timeLeftf32How long it has left to run, in seconds.
casteru32The unit that put it there. Where the client holds no such unit, it leaves the effect with no caster.
Vectors (1)

one-on-0-8-13-26

EffectRemoved

What a server sends to take a lasting effect off a unit. The header names the unit this is about.

Definition.

In every range of this book

Command 39 on events, sent by the server, reliable.

FieldTypeWhat it is
slotu8Which slot it sat in. A client fails where it is above 31.
effectu32Which effect, by the number its name gives, as Objects and identifiers works it out.

ParticlesCreated

What a server sends to start drawing sets of particles. The header names no object: it carries zero.

Definition.

In 0.8.13.26–0.9.22.13

Command 21 on events, sent by the server, reliable.

One particle, made from its effect’s name.

FieldTypeWhat it is
particleu32The name this particle answers to, so later messages can name it.
flagsu16Bit 3 set hangs the particle off neither boundTo nor target. Bit 2 set, where boundTo is given, has the particle take its scale from boundTo. Bit 0 sets a further option of the particle’s. A server writes the others zero.
unknownbytes, 12Passed to the particle as it is made; what it holds is not recorded.
boundTou32The unit the particle hangs off, or zero.
effecttext, 64 bytesThe effect’s name. A client fails where it is empty, and still makes a particle for a name it does not know. Written out in full and padded with zero bytes to the width above.
unknownBu32The point on boundTo the particle hangs from.
atXf32Where it starts, along one ground axis, in world units; used only where target is zero.
atYf32Its height.
atZf32Along the other ground axis.
targetu32The unit the particle is aimed at, or zero.
unknownCu32The point on target the particle is aimed at.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 21 on events, sent by the server, reliable.

FieldTypeWhat it is
groupCountu8How many sets follow.
groupscount in groupCount × ParticleGroupThe sets themselves.
Vectors (1)

one-on-0-9-22-14

KillParticle

What a server sends to stop a particle a client is drawing.

Definition.

In every range of this book

Command 22 on events, sent by the server, reliable.

The particle field alone names the particle; the header can carry zero.

FieldTypeWhat it is
particleu32The particle to stop.

AppearancePushed

What a server sends to lay a new look over a unit’s own. The header names the unit.

Definition.

In 0.8.13.26–0.9.22.13

Command 93 on events, sent by the server, reliable.

No skin is carried; the look wears the unit’s own skin. Looks stack, the newest shows, and AppearancePopped takes away the one its entry names.

FieldTypeWhat it is
entryu32Names this look, so that AppearancePopped can name it.
assettext, ended by a zero byteThe name the client loads it under, ended by a zero byte.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–0.9.25.35

Command 90 on events, sent by the server, reliable.

No skin is carried; while any pushed look is in force, the newest shows with skin 0, and nothing changes where its name is that of the look already shown. A client first stops a basic attack the unit is making; looks stack, and AppearancePopped takes away the one its entry names.

FieldTypeWhat it is
entryu32Names this look, so that AppearancePopped can name it.
assettext, ended by a zero byteThe name the client loads it under, ended by a zero byte.
Vectors (1)

one-on-0-9-25-24

In 0.9.25.36–1.0.0.24

Command 90 on events, sent by the server, reliable.

No skin is carried; the look wears the unit’s own skin. A client first stops a basic attack the unit is making; looks stack, the newest shows, and AppearancePopped takes away the one its entry names.

FieldTypeWhat it is
entryu32Names this look, so that AppearancePopped can name it.
overrideSpellsu8Set where the unit’s spells change with it. Any nonzero value sets it.
assettext, ended by a zero byteThe name the client loads it under, ended by a zero byte.

AppearancePopped

What a server sends to take a look AppearancePushed laid over a unit away. The header names the unit.

Definition.

In 0.8.13.26–0.9.22.13

Command 94 on events, sent by the server, reliable.

A client also takes away every look laid over the unit on this command, so the unit is left with no look laid over it.

FieldTypeWhat it is
entryu32The look, by the name AppearancePushed gave it.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 91 on events, sent by the server, reliable.

A client also takes away every look laid over the unit on this command, and does so before it looks for the one entry names, so the unit is left with no look laid over it.

FieldTypeWhat it is
entryu32The look, by the name AppearancePushed gave it.
Vectors (1)

one-on-0-9-22-14

PlayAnimation

What a server sends to make a unit play an animation. The header names the unit.

Definition.

In 0.8.13.26–0.9.22.13

Command 9 on events, sent by the server, reliable.

Every play blends in over a blend time of 0.2 seconds. Without loop or holdLastFrame, an animation that ends is removed, except that where it was the unit’s only animation and the unit has an idle, a client fades back to the idle, looping. No start point is carried: the animation starts from its beginning.

FieldTypeWhat it is
flags4-byte bitsHow the animation plays, as a set of bits.
flags.unusedLowbit 0Unused; a server writes zero.
flags.loopbit 1Set to loop the animation: it starts over once it ends.
flags.holdLastFramebit 2Set to hold the last frame once the animation ends; it stops advancing there. Wins over loop.
flags.fadeOthersbit 3Set to freeze the animations already playing and fade them to nothing over the blend time. They are not removed.
flags.freezeOthersbit 4Set to freeze the animations already playing, fade them out over the blend time, then remove them.
flags.dropOthersbit 5Set to remove the animations already playing at once, with no fade.
flags.unusedbit 6 to 31Unused; a server writes zero.
scaleTimef32Where above zero, how many seconds the animation is stretched or squeezed to span; otherwise it plays at normal speed.
animationtext, ended by a zero byteThe animation’s name, ended by a zero byte. Nothing plays for a name the unit does not have.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 9 on events, sent by the server, reliable.

Every play blends in over a blend time of 0.2 seconds. Without loop or holdLastFrame, an animation that ends is removed, except that where it was the unit’s only animation and the unit has an idle, a client fades back to the idle, looping. No start point is carried: the animation starts from its beginning. A unit whose animation has been locked ignores the message.

FieldTypeWhat it is
flags4-byte bitsHow the animation plays, as a set of bits.
flags.unusedLowbit 0Unused; a server writes zero.
flags.loopbit 1Set to loop the animation: it starts over once it ends.
flags.holdLastFramebit 2Set to hold the last frame once the animation ends; it stops advancing there. Wins over loop.
flags.fadeOthersbit 3Set to freeze the animations already playing and fade them to nothing over the blend time. They are not removed.
flags.freezeOthersbit 4Set to freeze the animations already playing, fade them out over the blend time, then remove them.
flags.dropOthersbit 5Set to remove the animations already playing at once, with no fade.
flags.lockedbit 6Set to lock the unit’s animation: once the animation plays, a client refuses every later animation played on the unit, unless the unit’s own character data opts out.
flags.fadeAtEndbit 7Only where loop is clear: set to start fading the animation out once its time left is at or below the blend time.
flags.unusedbit 8 to 31Unused; a server writes zero.
scaleTimef32Where above zero, how many seconds the animation is stretched or squeezed to span; otherwise it plays at normal speed.
animationtext, ended by a zero byteThe animation’s name, ended by a zero byte. Nothing plays for a name the unit does not have.
Vectors (1)

one-on-0-9-22-14

StopAnimation

What a server sends to stop an animation a unit is playing. The header names the unit.

Definition.

In 0.8.13.26–0.9.22.13

Command 91 on events, sent by the server, reliable.

No name or time is carried, and the body has no effect: a client stops the same animation of the unit’s that an arriving cast stops.

FieldTypeWhat it is
flags4-byte bitsA client reads nothing here.
flags.unusedLowbit 0 to 5A client ignores these; a server sends zero.
flags.unlockbit 6Unused; a server writes zero.
flags.unusedHighbit 7 to 31A client ignores these; a server sends zero.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 88 on events, sent by the server, reliable.

No name is carried. A client does nothing for a dead unit; otherwise it stops the animation the unit is playing, blending out over a fixed time, unless the unit’s animation lock stays held.

FieldTypeWhat it is
flags4-byte bitsHow it stops.
flags.unusedLowbit 0 to 5A client ignores these; a server sends zero.
flags.unlockbit 6Set to release the unit’s animation lock in every case. Clear releases it only where the unit’s own data allows; where the lock stays held, the animation does not stop.
flags.unusedHighbit 7 to 31A client ignores these; a server sends zero.

FadeTo

What a server sends to fade a unit towards an opacity over time. The header names the unit.

Definition.

In 0.9.22.14–1.0.0.24

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.9.22.14–0.9.25.35137
0.9.25.36–1.0.0.24136
FieldTypeWhat it is
fadei16Names this fade, so that FadeRemoved can name it.
timef32How long the fade takes, in seconds.
targetf32The opacity it fades to, from 0 for unseen to 1 for solid.
Vectors (1)

one-on-0-9-25-24

FadeRemoved

What a server sends to undo a fade on a unit. The header names the unit.

Definition.

In 0.9.22.14–1.0.0.24

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.9.22.14–0.9.25.35138
0.9.25.36–1.0.0.24137
FieldTypeWhat it is
fadei16The fade, by the name FadeTo gave it. A client does nothing where no fade on the unit has that name.
Vectors (1)

one-on-0-9-25-24

FadeMinions

What a server sends to fade one side’s minions. The header carries zero.

Definition.

In 0.9.25.36–1.0.0.24

Command 174 on events, sent by the server, reliable.

FieldTypeWhat it is
sideu8Which side, or zero for both.
amountf32The opacity they fade to, from 0 for unseen to 1 for solid.
timef32How long the fade takes, in seconds.

NexusIdle

What a server sends to put each nexus into its idle particles. The header carries zero.

Definition.

In 0.9.25.36–1.0.0.24

Command 173 on events, sent by the server, reliable.

No body.

NexusSkin

What a server sends to change how one side’s nexus looks. The header carries zero.

Definition.

In 0.9.25.36–1.0.0.24

Command 169 on events, sent by the server, reliable.

FieldTypeWhat it is
sideu8Which side.
skinu32Which look.

The shop

What fills the shop, what a client asks for, and what a server answers.

What fills it

A client’s catalogue of items is its own: no message sends or changes it. A client sets its shop up for its own champion, and what a match sells is settled by the client’s own data. A client filters nothing out of the shop by the champion’s level.

Loadout does nothing to the shop: a client fills its shop from its own data, and takes the items it suggests from its champion’s own data.

In 0.8.13.26–0.9.22.13

An item’s own data says whether it can be bought.

Buying and selling

A client asks to buy with BuyItem, to sell or throw away an item with RemoveItem, and to swap two slots of its inventory with SwapItems. Closing the shop sends nothing.

A client never asks to swap two slots: it has no SwapItems.

In 0.8.13.26–0.9.22.13

Opening the shop sends nothing either.

In 0.9.25.24–1.0.0.24

Opening the shop sends TutorialShopOpened, in any match, except while the shop is locked.

A client asks to buy only where the item is one the match sells and priced within the champion’s gold.

A client asks for an item not built from others only where a slot is free or holds the same item below its stack limit.

A client asks for an item a player holds only one of even where the player holds it already, and an item that can be used in the shop needs a slot as any other does.

In 0.8.13.26–0.9.22.13

For an item built from others, a client asks only where a slot is free or holds one of its parts, and where the champion’s gold covers what remains after the parts it holds.

In 0.9.25.24–1.0.0.24

A client asks only while the shop is not locked, with the champion dead or near a shop of its side.

A client never places an item itself. It shows a purchase only when a server answers with ItemAdded, a sale or loss with RemoveItemAnswer, and a swap with SwapItemsAnswer. A server can also set a slot (InventorySlot), set the whole inventory (InventorySnapshot), change an item’s charges (ItemCharges), or report an item used (ItemUsed).

ItemAdded places the item and removes nothing: a server sends a RemoveItemAnswer for each part an item built from others takes up. Gold falls only as replication states the champion’s gold, and a purchase a server never answers places nothing and spends nothing.

Undo

Where VersionSync’s features set shopUndo, the shop has an undo button, which is enabled while ShopUndoCount gives the champion undos to spend. Pressing it sends ShopUndo, whatever the count.

Closing and locking

CloseShop closes the shop where it is open. A message that locks the shop alone, InputLock or InputLockToggled, closes it and turns off its key.

In 0.9.25.24–1.0.0.24

A message that locks other input along with the shop stops the shop opening, but leaves an open shop open and its key on.

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).

Loadout

What a server sends to lay out everything a champion brought to the match: the runes set before it began, its summoner slots and the choices made alongside them. The header names the unit this is about.

Definition.

In 0.8.13.26–0.9.22.13

Command 86 on events, sent by the server, reliable.

A client shows the champion’s icon and sets its two summoner slots from summoners.

FieldTypeWhat it is
runes8 × u32The runes set before the match.
summoners2 × u32The spells in the champion’s summoner slots, by the numbers their names give.
choices80 × ChoiceThe choices made alongside them, 400 bytes that a client keeps as one block.
levelu8The player’s account level.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 83 on events, sent by the server, reliable.

A client’s shop is set up by the Loadout of its own champion: until that arrives the shop opens empty, with no items, no suggested items and no builds, and is drawn at a size that does not fit the screen. A server sends one for every champion at spawning, between SpawnStart and SpawnEnd.

FieldTypeWhat it is
runes30 × u32The runes set before the match, thirty places.
summoners2 × u32The spells in the champion’s summoner slots, by the numbers their names give.
choices80 × ChoiceThe choices made alongside them, 400 bytes that a client keeps as one block.
levelu8The player’s account level.
Vectors (1)

one-on-0-9-22-14

BuyItem

What a client sends to buy an item from the shop. The header names the sender’s champion.

Definition.

In every range of this book

Command 41 on requests, sent by the client, reliable.

FieldTypeWhat it is
itemu32Which item, by the number the client knows it as.

RemoveItem

What a client sends to be rid of an item. The header names the sender’s champion.

Definition.

In every range of this book

Command 43 on requests, sent by the client, reliable.

FieldTypeWhat it is
slotu8Which slot.
sellu8A client sends 1.

TutorialShopOpened

What a client sends as its player opens the shop. It carries nothing of its own. The header carries zero.

Definition.

In 0.9.22.16–0.9.25.35

Command 150 on requests, sent by the client, reliable.

A client sends it each time the shop opens, on any map and in any mode. While input lock 16 holds, the shop does not open and it sends nothing.

No body.

Vectors (1)

one-on-0-9-25-24

In 0.9.25.36–1.0.0.24

Command 148 on requests, sent by the client, reliable.

A client sends it every time its player opens the shop, in any game. Where a script of the client’s has locked the shop, the shop does not open and nothing is sent.

No body.

ItemAdded

What a server sends to set what sits in one of a unit’s item slots. The header names the unit this is about.

Definition.

In 0.8.13.26–0.9.22.13

Command 42 on events, sent by the server, reliable.

There is no charges field: a client takes an item’s charges from the item’s own data. A server sends it to units nobody is buying for.

FieldTypeWhat it is
slotu8The slot it went to, 0 to 14. A larger value than 14 has no defined effect.
itemu32Which item, by the number the client knows it as. For an item it does not know, a client empties the slot and still takes inSlot.
inSlotu8How many of the item the slot holds now; a client applies zero as well. The slot’s charges come from the item’s own data.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 42 on events, sent by the server, reliable.

There is no charges field: a client takes an item’s charges from the item’s own data. A client applies it only to a champion’s item slots.

FieldTypeWhat it is
slotu8The slot it went to, 0 to 36. A larger value than 36 has no defined effect.
itemu32Which item, by the number the client knows it as. For an item it does not know, a client empties the slot and still takes inSlot.
inSlotu8How many of the item the slot holds now; a client applies zero as well. The slot’s charges come from the item’s own data.

RemoveItemAnswer

What a server sends to confirm an item left a slot. The header names the unit this is about.

Definition.

In 0.8.13.26–0.9.22.13

Command 44 on events, sent by the server, reliable.

FieldTypeWhat it is
slotu8Which slot, 0 to 14. A larger value than 14 has no defined effect.
leftu8How many are left in the slot; zero empties it, item and charges cleared.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 44 on events, sent by the server, reliable.

FieldTypeWhat it is
slotu8Which slot, 0 to 36. A larger value than 36 has no defined effect.
leftu8How many are left in the slot; zero empties it, item and charges cleared.

SwapItemsAnswer

What a server sends to confirm an item moved between slots. The header names the unit this is about.

Definition.

In 0.8.13.26–0.9.22.13

Command 46 on events, sent by the server, reliable.

FieldTypeWhat it is
fromu8The slot the item left, 0 to 14. A client swaps the two slots named whatever their values, so a server keeps both within range.
tou8The slot it went to, 0 to 14. A client swaps the two slots named whatever their values, so a server keeps both within range.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 46 on events, sent by the server, reliable.

FieldTypeWhat it is
fromu8The slot the item left, 0 to 36. A client swaps the two slots named whatever their values, so a server keeps both within range.
tou8The slot it went to, 0 to 36. A client swaps the two slots named whatever their values, so a server keeps both within range.

CloseShop

What a server sends to close a client’s shop. The header carries zero.

Definition.

In 0.9.22.14–1.0.0.24

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.9.22.14–0.9.25.35147
0.9.25.36–1.0.0.24146

No body.

Vectors (1)

one-on-0-9-25-24

Objectives

The parts of a map players compete for besides each other: neutral camps, points a side can capture and a score, and the events a match tells its clients about.

Camps

A camp is a group of units that belong to no side. A server places a camp on the map and says how it is drawn with CampMarker, opens it with CampOpened as its monsters come, and marks it empty with CampCleared. The monsters themselves are units (see Units). A server tells clients watching a match when a camp is next due with CampTimer.

A client places a camp where the first of its monsters is created (CreateNeutral).

Capture points and score

On a map won on score, a server binds each capture point to a unit with CapturePointChanged, and TeamScore sets each side’s score.

Other map objectives

A server can name the unit holding the Ascension with AscendedUnit, and send RespawnPoint about points a champion returns to life at.

Events

WorldEvent says something happened that the whole match is told about: the match’s welcome and its first notices, minions coming out, an inhibitor or a great monster falling, a player leaving. ClientEvent tells one client something happened that concerns a unit. Each names a sort, from one table of events, and the sort settles the rest of the message and what a client shows.

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).

WorldEvent

What a server sends to say something happened that the whole match is told about. What sort of thing is named first, and the sort settles what follows. The header names no object: it carries zero.

Definition.

In 0.9.25.24–1.0.0.24

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.9.25.24–0.9.25.35170
0.9.25.36–1.0.0.24168
FieldTypePresent whenWhat it is
eventu8Which event, from 0 to 73, and so which fields follow. Values: 0 died, 2 championDied, 3 championKill, 4 doubleKill, 10 damageTaken, 11 damageDealt, 18 goldSpent, 19 goldEarned, 20 consumableBought, 21 criticalStrike, 24 inhibitorKilled, 25 inhibitorDied, 26 inhibitorRespawningSoon, 28 turretKilled, 29 turretDied, 30 minionKilled, 31 minionDenied, 32 monsterKilled, 33 largeMonsterKilled, 34 nexusKilled, 35 nexusDied, 36 heal, 37 healCast, 38 buff, 39 killingSpree, 46 killDuringSpree, 53 deathAssist, 54 playerQuit, 55 playerLeft, 56 playerReconnected, 62 itemBought, 66 surrenderCountdown, 71 minionsSpawned, 72 welcome, 73 startNoticeTwo.
sourceu32The unit the thing is credited to, or zero where none is.
subjectu32The unit the thing happened to, or zero where none is named; for a death, the unit that made the kill.
damagerecordevent = 10 or 11How much harm, and from what.
damage.physicalf32Physical damage.
damage.magicalf32Magical damage.
damage.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
damage.scriptu32The spell or effect, by the number its name gives, shown by name.
damage.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
damage.parentCasteru32Unused; a client reads nothing here.
damage.parent4-byte bitsWhere the spell or effect came from.
damage.parent.sourcebit 0 to 3What sort of source the parent spell or effect is, numbered as sourceKind is.
damage.parent.sidebit 4 to 7What it means is not recorded for this range; a server writes zero.
damage.parent.categorybit 8 to 11A client sums two entries of this sort where this, the source kinds and both spells match, and, where this is zero, the subjects match too.
damage.parent.spellLevelbit 12 to 14The rank of the spell, as shown.
damage.parent.unusedbit 15 to 31Unused; a server writes zero.
spentu32event = 18How much gold, as shown.
valueu32event = 20 or 62What it carries is not recorded for this range; a client does not show it.
criticalf32event = 21The critical strike’s damage, as shown.
spreeu32event = 39How many kills in a row, as shown.
earnedrecordevent = 19Gold earned.
earned.goldf32How much gold, as shown.
healrecordevent = 36 or 37How much health, and from what.
heal.amountf32How much health, as shown.
heal.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
heal.scriptu32The spell or effect, by the number its name gives, shown by name.
heal.spellLevelu32The level of the spell it came from.
heal.parentSourceu32What sort of source the parent script is, as sourceKind.
heal.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
heal.unusedu32Unused; a client reads nothing here.
heal.unusedToou32Unused; a client reads nothing here.
effectrecordevent = 38The effect, and where it came from.
effect.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
effect.scriptu32The spell or effect, by the number its name gives, shown by name.
effect.spellLevelu32The level of the spell it came from.
effect.parentSourceu32What sort of source the parent script is, as sourceKind.
effect.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
effect.unusedu32Unused; a client reads nothing here.
effect.unusedToou32Unused; a client reads nothing here.
assistrecordevent = 53What one unit did toward a death.
assist.lastHitf32When it last dealt damage, in match seconds.
assist.physicalf32Physical damage it dealt.
assist.magicalf32Magical damage it dealt.
assist.sharef32What it carries is not recorded for this range; a server writes zero.
assist.goldf32What it carries is not recorded for this range; a server writes zero.
assist.creditedu32What it carries is not recorded for this range; a server writes zero.
killrecordevent = 0Nothing a client shows; the unit before it names the killer.
kill.unusedf32A client reads nothing here, and writes zero where it raises the event itself. A server writes zero.
Vectors (14)

buff-on-0-9-25-24, consumable-bought-on-0-9-25-24, critical-strike-on-0-9-25-24, damage-dealt-on-0-9-25-24, damage-taken-on-0-9-25-24, death-assist-on-0-9-25-24, died-on-0-9-25-24, gold-earned-on-0-9-25-24, gold-spent-on-0-9-25-24, heal-cast-on-0-9-25-24, heal-on-0-9-25-24, item-bought-on-0-9-25-24, killing-spree-on-0-9-25-24, one-on-0-9-25-24

ClientEvent

What a server sends to tell a client something happened. The sort is named first and settles what follows; unlike WorldEvent it carries no source apart from what the sort itself carries. The header names the unit the event is about.

Definition.

In 0.8.13.26–0.9.22.13

Command 110 on events, sent by the server, reliable.

FieldTypePresent whenWhat it is
eventu8Which event, from 0 to 54, and so which fields follow. A value above 54 has no defined effect. Values: 0 died, 2 championDied, 3 championKill, 4 doubleKill, 10 damageTaken, 11 damageDealt, 18 goldSpent, 19 goldEarned, 20 consumableBought, 21 criticalStrike, 24 inhibitorKilled, 25 inhibitorDied, 26 inhibitorRespawningSoon, 28 turretKilled, 29 turretDied, 30 minionKilled, 31 minionDenied, 32 monsterKilled, 33 largeMonsterKilled, 34 nexusKilled, 35 nexusDied, 36 heal, 37 healCast, 38 buff, 39 killingSpree, 46 killDuringSpree, 53 deathAssist, 54 playerQuit.
subjectu32The unit the event is about; for a death, the unit that made the kill.
damagerecordevent = 10 or 11How much harm, and from what.
damage.physicalf32Physical damage.
damage.magicalf32Magical damage.
damage.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
damage.scriptu32The spell or effect, by the number its name gives, shown by name.
damage.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
damage.parentCasteru32Unused; a client reads nothing here.
damage.parent4-byte bitsWhere the spell or effect came from.
damage.parent.sourcebit 0 to 3What sort of source the parent spell or effect is, numbered as sourceKind is.
damage.parent.sidebit 4 to 7What it means is not recorded for this range; a server writes zero.
damage.parent.categorybit 8 to 11A client sums two entries of this sort where this, the source kinds and both spells match, and, where this is zero, the subjects match too.
damage.parent.spellLevelbit 12 to 14The rank of the spell, as shown.
damage.parent.unusedbit 15 to 31Unused; a server writes zero.
spentu32event = 18How much gold, as shown.
criticalf32event = 21The critical strike’s damage, as shown.
spreeu32event = 39How many kills in a row, as shown.
earnedrecordevent = 19Gold earned.
earned.goldf32How much gold, as shown.
healrecordevent = 36 or 37How much health, and from what.
heal.amountf32How much health, as shown.
heal.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
heal.scriptu32The spell or effect, by the number its name gives, shown by name.
heal.spellLevelu32The level of the spell it came from.
heal.parentSourceu32What sort of source the parent script is, as sourceKind.
heal.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
effectrecordevent = 38The effect, and where it came from.
effect.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
effect.scriptu32The spell or effect, by the number its name gives, shown by name.
effect.spellLevelu32The level of the spell it came from.
effect.parentSourceu32What sort of source the parent script is, as sourceKind.
effect.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
assistrecordevent = 53What one unit did toward a death.
assist.lastHitf32When it last dealt damage, in match seconds.
assist.physicalf32Physical damage it dealt.
assist.magicalf32Magical damage it dealt.
Vectors (11)

buff-on-0-8-13-26, critical-strike-on-0-8-13-26, damage-dealt-on-0-8-13-26, damage-taken-on-0-8-13-26, death-assist-on-0-8-13-26, died-on-0-8-13-26, gold-earned-on-0-8-13-26, gold-spent-on-0-8-13-26, heal-cast-on-0-8-13-26, heal-on-0-8-13-26, killing-spree-on-0-8-13-26

In 0.9.22.14–0.9.22.15

Command 108 on events, sent by the server, reliable.

FieldTypePresent whenWhat it is
eventu8Which event, from 0 to 62, and so which fields follow. Values: 0 died, 2 championDied, 3 championKill, 4 doubleKill, 10 damageTaken, 11 damageDealt, 18 goldSpent, 19 goldEarned, 20 consumableBought, 21 criticalStrike, 24 inhibitorKilled, 25 inhibitorDied, 26 inhibitorRespawningSoon, 28 turretKilled, 29 turretDied, 30 minionKilled, 31 minionDenied, 32 monsterKilled, 33 largeMonsterKilled, 34 nexusKilled, 35 nexusDied, 36 heal, 37 healCast, 38 buff, 39 killingSpree, 46 killDuringSpree, 53 deathAssist, 54 playerQuit, 55 playerLeft, 56 playerReconnected, 62 itemBought.
subjectu32The unit the event is about; for a death, the unit that made the kill.
damagerecordevent = 10 or 11How much harm, and from what.
damage.physicalf32Physical damage.
damage.magicalf32Magical damage.
damage.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
damage.scriptu32The spell or effect, by the number its name gives, shown by name.
damage.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
damage.parentCasteru32Unused; a client reads nothing here.
damage.parent4-byte bitsWhere the spell or effect came from.
damage.parent.sourcebit 0 to 3What sort of source the parent spell or effect is, numbered as sourceKind is.
damage.parent.sidebit 4 to 7What it means is not recorded for this range; a server writes zero.
damage.parent.categorybit 8 to 11A client sums two entries of this sort where this, the source kinds and both spells match, and, where this is zero, the subjects match too.
damage.parent.spellLevelbit 12 to 14The rank of the spell, as shown.
damage.parent.unusedbit 15 to 31Unused; a server writes zero.
spentu32event = 18How much gold, as shown.
valueu32event = 20What it carries is not recorded for this range; a client does not show it.
criticalf32event = 21The critical strike’s damage, as shown.
spreeu32event = 39How many kills in a row, as shown.
earnedrecordevent = 19Gold earned.
earned.goldf32How much gold, as shown.
healrecordevent = 36 or 37How much health, and from what.
heal.amountf32How much health, as shown.
heal.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
heal.scriptu32The spell or effect, by the number its name gives, shown by name.
heal.spellLevelu32The level of the spell it came from.
heal.parentSourceu32What sort of source the parent script is, as sourceKind.
heal.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
heal.unusedu32Unused; a client reads nothing here.
heal.unusedToou32Unused; a client reads nothing here.
effectrecordevent = 38The effect, and where it came from.
effect.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
effect.scriptu32The spell or effect, by the number its name gives, shown by name.
effect.spellLevelu32The level of the spell it came from.
effect.parentSourceu32What sort of source the parent script is, as sourceKind.
effect.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
effect.unusedu32Unused; a client reads nothing here.
effect.unusedToou32Unused; a client reads nothing here.
assistrecordevent = 53What one unit did toward a death.
assist.lastHitf32When it last dealt damage, in match seconds.
assist.physicalf32Physical damage it dealt.
assist.magicalf32Magical damage it dealt.
assist.sharef32What it carries is not recorded for this range; a server writes zero.
assist.goldf32What it carries is not recorded for this range; a server writes zero.
killrecordevent = 0Nothing a client shows; the unit before it names the killer.
kill.unusedf32A client reads nothing here, and writes zero where it raises the event itself. A server writes zero.
Vectors (13)

buff-on-0-9-22-14, consumable-bought-on-0-9-22-14, critical-strike-on-0-9-22-14, damage-dealt-on-0-9-22-14, damage-taken-on-0-9-22-14, death-assist-on-0-9-22-14, died-on-0-9-22-14, gold-earned-on-0-9-22-14, gold-spent-on-0-9-22-14, heal-cast-on-0-9-22-14, heal-on-0-9-22-14, killing-spree-on-0-9-22-14, one-on-0-9-22-14

In 0.9.22.16–0.9.25.20

Command 108 on events, sent by the server, reliable.

FieldTypePresent whenWhat it is
eventu8Which event, from 0 to 70, and so which fields follow. Values: 0 died, 2 championDied, 3 championKill, 4 doubleKill, 10 damageTaken, 11 damageDealt, 18 goldSpent, 19 goldEarned, 20 consumableBought, 21 criticalStrike, 24 inhibitorKilled, 25 inhibitorDied, 26 inhibitorRespawningSoon, 28 turretKilled, 29 turretDied, 30 minionKilled, 31 minionDenied, 32 monsterKilled, 33 largeMonsterKilled, 34 nexusKilled, 35 nexusDied, 36 heal, 37 healCast, 38 buff, 39 killingSpree, 46 killDuringSpree, 53 deathAssist, 54 playerQuit, 55 playerLeft, 56 playerReconnected, 62 itemBought, 63 surrenderVoteStarted, 64 surrenderVoteCast, 65 surrenderAlreadyVoted, 66 surrenderCountdown, 67 surrenderFailed, 68 surrenderTooEarly, 69 surrenderAgreed, 70 surrenderVoteSpam, 71 minionsSpawned, 72 welcome, 73 startNoticeTwo.
subjectu32The unit the event is about; for a death, the unit that made the kill.
damagerecordevent = 10 or 11How much harm, and from what.
damage.physicalf32Physical damage.
damage.magicalf32Magical damage.
damage.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
damage.scriptu32The spell or effect, by the number its name gives, shown by name.
damage.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
damage.parentCasteru32Unused; a client reads nothing here.
damage.parent4-byte bitsWhere the spell or effect came from.
damage.parent.sourcebit 0 to 3What sort of source the parent spell or effect is, numbered as sourceKind is.
damage.parent.sidebit 4 to 7What it means is not recorded for this range; a server writes zero.
damage.parent.categorybit 8 to 11A client sums two entries of this sort where this, the source kinds and both spells match, and, where this is zero, the subjects match too.
damage.parent.spellLevelbit 12 to 14The rank of the spell, as shown.
damage.parent.unusedbit 15 to 31Unused; a server writes zero.
spentu32event = 18How much gold, as shown.
valueu32event = 20 or 62What it carries is not recorded for this range; a client does not show it.
criticalf32event = 21The critical strike’s damage, as shown.
spreeu32event = 39How many kills in a row, as shown.
earnedrecordevent = 19Gold earned.
earned.goldf32How much gold, as shown.
healrecordevent = 36 or 37How much health, and from what.
heal.amountf32How much health, as shown.
heal.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
heal.scriptu32The spell or effect, by the number its name gives, shown by name.
heal.spellLevelu32The level of the spell it came from.
heal.parentSourceu32What sort of source the parent script is, as sourceKind.
heal.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
heal.unusedu32Unused; a client reads nothing here.
heal.unusedToou32Unused; a client reads nothing here.
effectrecordevent = 38The effect, and where it came from.
effect.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
effect.scriptu32The spell or effect, by the number its name gives, shown by name.
effect.spellLevelu32The level of the spell it came from.
effect.parentSourceu32What sort of source the parent script is, as sourceKind.
effect.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
effect.unusedu32Unused; a client reads nothing here.
effect.unusedToou32Unused; a client reads nothing here.
assistrecordevent = 53What one unit did toward a death.
assist.lastHitf32When it last dealt damage, in match seconds.
assist.physicalf32Physical damage it dealt.
assist.magicalf32Magical damage it dealt.
assist.sharef32What it carries is not recorded for this range; a server writes zero.
assist.goldf32What it carries is not recorded for this range; a server writes zero.
killrecordevent = 0Nothing a client shows; the unit before it names the killer.
kill.unusedf32A client reads nothing here, and writes zero where it raises the event itself. A server writes zero.
Vectors (14)

buff-on-0-9-22-16, consumable-bought-on-0-9-22-16, critical-strike-on-0-9-22-16, damage-dealt-on-0-9-22-16, damage-taken-on-0-9-22-16, death-assist-on-0-9-22-16, died-on-0-9-22-16, gold-earned-on-0-9-22-16, gold-spent-on-0-9-22-16, heal-cast-on-0-9-22-16, heal-on-0-9-22-16, item-bought-on-0-9-22-16, killing-spree-on-0-9-22-16, one-on-0-9-22-16

In 0.9.25.21–0.9.25.23

Command 108 on events, sent by the server, reliable.

FieldTypePresent whenWhat it is
eventu8Which event, from 0 to 70, and so which fields follow. Values: 0 died, 2 championDied, 3 championKill, 4 doubleKill, 10 damageTaken, 11 damageDealt, 18 goldSpent, 19 goldEarned, 20 consumableBought, 21 criticalStrike, 24 inhibitorKilled, 25 inhibitorDied, 26 inhibitorRespawningSoon, 28 turretKilled, 29 turretDied, 30 minionKilled, 31 minionDenied, 32 monsterKilled, 33 largeMonsterKilled, 34 nexusKilled, 35 nexusDied, 36 heal, 37 healCast, 38 buff, 39 killingSpree, 46 killDuringSpree, 53 deathAssist, 54 playerQuit, 55 playerLeft, 56 playerReconnected, 62 itemBought, 63 surrenderVoteStarted, 64 surrenderVoteCast, 65 surrenderAlreadyVoted, 66 surrenderCountdown, 67 surrenderFailed, 68 surrenderTooEarly, 69 surrenderAgreed, 70 surrenderVoteSpam, 71 minionsSpawned, 72 welcome, 73 startNoticeTwo.
subjectu32The unit the event is about; for a death, the unit that made the kill.
damagerecordevent = 10 or 11How much harm, and from what.
damage.physicalf32Physical damage.
damage.magicalf32Magical damage.
damage.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
damage.scriptu32The spell or effect, by the number its name gives, shown by name.
damage.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
damage.parentCasteru32Unused; a client reads nothing here.
damage.parent4-byte bitsWhere the spell or effect came from.
damage.parent.sourcebit 0 to 3What sort of source the parent spell or effect is, numbered as sourceKind is.
damage.parent.sidebit 4 to 7What it means is not recorded for this range; a server writes zero.
damage.parent.categorybit 8 to 11A client sums two entries of this sort where this, the source kinds and both spells match, and, where this is zero, the subjects match too.
damage.parent.spellLevelbit 12 to 14The rank of the spell, as shown.
damage.parent.unusedbit 15 to 31Unused; a server writes zero.
spentu32event = 18How much gold, as shown.
valueu32event = 20 or 62What it carries is not recorded for this range; a client does not show it.
criticalf32event = 21The critical strike’s damage, as shown.
spreeu32event = 39How many kills in a row, as shown.
earnedrecordevent = 19Gold earned.
earned.goldf32How much gold, as shown.
healrecordevent = 36 or 37How much health, and from what.
heal.amountf32How much health, as shown.
heal.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
heal.scriptu32The spell or effect, by the number its name gives, shown by name.
heal.spellLevelu32The level of the spell it came from.
heal.parentSourceu32What sort of source the parent script is, as sourceKind.
heal.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
heal.unusedu32Unused; a client reads nothing here.
heal.unusedToou32Unused; a client reads nothing here.
effectrecordevent = 38The effect, and where it came from.
effect.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
effect.scriptu32The spell or effect, by the number its name gives, shown by name.
effect.spellLevelu32The level of the spell it came from.
effect.parentSourceu32What sort of source the parent script is, as sourceKind.
effect.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
effect.unusedu32Unused; a client reads nothing here.
effect.unusedToou32Unused; a client reads nothing here.
assistrecordevent = 53What one unit did toward a death.
assist.lastHitf32When it last dealt damage, in match seconds.
assist.physicalf32Physical damage it dealt.
assist.magicalf32Magical damage it dealt.
assist.sharef32What it carries is not recorded for this range; a server writes zero.
assist.goldf32What it carries is not recorded for this range; a server writes zero.
assist.creditedu32What it carries is not recorded for this range; a server writes zero.
killrecordevent = 0Nothing a client shows; the unit before it names the killer.
kill.unusedf32A client reads nothing here, and writes zero where it raises the event itself. A server writes zero.
Vectors (14)

buff-on-0-9-25-21, consumable-bought-on-0-9-25-21, critical-strike-on-0-9-25-21, damage-dealt-on-0-9-25-21, damage-taken-on-0-9-25-21, death-assist-on-0-9-25-21, died-on-0-9-25-21, gold-earned-on-0-9-25-21, gold-spent-on-0-9-25-21, heal-cast-on-0-9-25-21, heal-on-0-9-25-21, item-bought-on-0-9-25-21, killing-spree-on-0-9-25-21, one-on-0-9-25-21

In 0.9.25.24–1.0.0.24

Command 108 on events, sent by the server, reliable.

FieldTypePresent whenWhat it is
eventu8Which event, from 0 to 73, and so which fields follow. A value above 73 has no defined effect. Values: 0 died, 2 championDied, 3 championKill, 4 doubleKill, 10 damageTaken, 11 damageDealt, 18 goldSpent, 19 goldEarned, 20 consumableBought, 21 criticalStrike, 24 inhibitorKilled, 25 inhibitorDied, 26 inhibitorRespawningSoon, 28 turretKilled, 29 turretDied, 30 minionKilled, 31 minionDenied, 32 monsterKilled, 33 largeMonsterKilled, 34 nexusKilled, 35 nexusDied, 36 heal, 37 healCast, 38 buff, 39 killingSpree, 46 killDuringSpree, 53 deathAssist, 54 playerQuit, 55 playerLeft, 56 playerReconnected, 62 itemBought, 63 surrenderVoteStarted, 64 surrenderVoteCast, 65 surrenderAlreadyVoted, 66 surrenderCountdown, 67 surrenderFailed, 68 surrenderTooEarly, 69 surrenderAgreed, 70 surrenderVoteSpam, 71 minionsSpawned, 72 welcome, 73 startNoticeTwo.
subjectu32The unit the event is about; for a death, the unit that made the kill.
damagerecordevent = 10 or 11How much harm, and from what.
damage.physicalf32Physical damage.
damage.magicalf32Magical damage.
damage.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
damage.scriptu32The spell or effect, by the number its name gives, shown by name.
damage.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
damage.parentCasteru32Unused; a client reads nothing here.
damage.parent4-byte bitsWhere the spell or effect came from.
damage.parent.sourcebit 0 to 3What sort of source the parent spell or effect is, numbered as sourceKind is.
damage.parent.sidebit 4 to 7What it means is not recorded for this range; a server writes zero.
damage.parent.categorybit 8 to 11A client sums two entries of this sort where this, the source kinds and both spells match, and, where this is zero, the subjects match too.
damage.parent.spellLevelbit 12 to 14The rank of the spell, as shown.
damage.parent.unusedbit 15 to 31Unused; a server writes zero.
spentu32event = 18How much gold, as shown.
valueu32event = 20 or 62What it carries is not recorded for this range; a client does not show it.
criticalf32event = 21The critical strike’s damage, as shown.
spreeu32event = 39How many kills in a row, as shown.
earnedrecordevent = 19Gold earned.
earned.goldf32How much gold, as shown.
healrecordevent = 36 or 37How much health, and from what.
heal.amountf32How much health, as shown.
heal.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
heal.scriptu32The spell or effect, by the number its name gives, shown by name.
heal.spellLevelu32The level of the spell it came from.
heal.parentSourceu32What sort of source the parent script is, as sourceKind.
heal.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
heal.unusedu32Unused; a client reads nothing here.
heal.unusedToou32Unused; a client reads nothing here.
effectrecordevent = 38The effect, and where it came from.
effect.sourceKindu32What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack.
effect.scriptu32The spell or effect, by the number its name gives, shown by name.
effect.spellLevelu32The level of the spell it came from.
effect.parentSourceu32What sort of source the parent script is, as sourceKind.
effect.parentScriptu32The spell or effect it came from, by the number its name gives, shown by name.
effect.unusedu32Unused; a client reads nothing here.
effect.unusedToou32Unused; a client reads nothing here.
assistrecordevent = 53What one unit did toward a death.
assist.lastHitf32When it last dealt damage, in match seconds.
assist.physicalf32Physical damage it dealt.
assist.magicalf32Magical damage it dealt.
assist.sharef32What it carries is not recorded for this range; a server writes zero.
assist.goldf32What it carries is not recorded for this range; a server writes zero.
assist.creditedu32What it carries is not recorded for this range; a server writes zero.
killrecordevent = 0Nothing a client shows; the unit before it names the killer.
kill.unusedf32A client reads nothing here, and writes zero where it raises the event itself. A server writes zero.

Communication

Chat, pings, emotes, and the sound and music a server can drive.

Chat

Players chat with Chat, which carries a line to everyone or to a side. A server puts a line of its own in a client’s chat with SystemMessage. A server can limit how many more lines a player can send with ChatAllowance.

Pings and emotes

A client marks a point on the map with MapPing, and a server shows the ping to everyone meant to see it with PingPlaced. A client asks to play an emote with PlayEmote, and a server shows it with EmotePlayed. A server can also tell clients of a voice command a champion gave (VoiceCommand) and of an emote a champion played for the moment (ContextEmote).

Sound and music

A server can play a sound once (SoundPlayed) or a voice event (VoiceEvent), which a client can report done with VoiceEventDone. A server can also set a champion’s skin music (ThemeMusic), drive the music (MusicCue), mute or unmute a kind of sound (VolumeMuted) and fade sound effects out (FadeSounds).

In 0.9.22.14–0.9.25.20

VoiceEvent carries only the event’s name and asks for no answer.

In 0.9.25.24–1.0.0.24

Where a VoiceEvent asks for an answer, a client sends VoiceEventDone once it has played the event.

In 0.9.25.24–1.0.0.24

A client never answers a VoiceEvent it cannot play.

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).

Chat

Text one player sends the others during a match. Messages players exchange outside a match do not travel on this connection at all.

Definition.

In 0.8.13.26–0.9.22.13

Command 0 on chat, sent by either side, reliable.

A line of chat. A client sends one as its player says something, and shows one a server sends in its chat box.

FieldTypeWhat it is
texttext, ended by a zero byteThe line, ended by a zero byte. The message is the text alone, with nothing in front of it.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 0 on chat, sent by either side, reliable.

A line of chat. A client sends one as its player says something, and shows one a server sends in its chat box.

FieldTypeWhat it is
speakeru32The client id the line is from. A client sends its own. From a server, a client shows the line with the name of the player holding that client id, coloured for whether that player is on its own side, and with no name for a client id nobody holds; 4294967295 shows the whole line with no name and no tag. A client does not show a line from a player its own player has ignored or muted.
audienceu321 for the speaker’s side alone, which a client shows without a tag; any other value from a server is shown tagged as said to everyone. A client sends 0 where its player began the line with the all-chat prefix, which it leaves out of the text, and 1 otherwise. Values: 0 everyone, 1 team.
textLengthu32The length of the text in bytes, without the byte that ends it. Its value changes nothing a client does.
texttext, sized by textLengthThe line; a client sends at most 511 bytes of it, and reads it up to the zero byte that ends it.
terminatorbytes, 1A zero byte closing the text.

MapPing

What a client sends to mark a point on the map for the others. The header names no object: it carries zero.

Definition.

In 0.8.13.26–0.9.22.13

Command 25 on requests, sent by the client, reliable.

Two places on a client’s HUD also send it, naming its champion’s own place.

FieldTypeWhat it is
clientIdu32The client id of the player pinging.
xf32Where on the map, along one ground axis, in world units.
yf32The height of the place pinged, in world units.
zf32Where on the map, along the other ground axis, in world units.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 25 on requests, sent by the client, reliable.

A client also sends it from the alert button on its HUD, naming its champion’s own place and writing nothing in particular where the target goes.

FieldTypeWhat it is
xf32Where on the map, along one ground axis, in world units.
yf32The height of the place pinged, in world units.
zf32Where on the map, along the other ground axis, in world units.
targetu32A network object the mark is on, or zero where it is on open ground.

PingPlaced

What a server sends to show a ping on the map to everyone meant to see it.

Definition.

In 0.8.13.26–0.9.22.13

Command 26 on events, sent by the server, reliable.

A client marks atX and atZ on each of its two map views, and only while it shows a map. The header can carry zero.

FieldTypeWhat it is
atXf32Where the ping sits, along one ground axis, in world units.
atYf32A client reads nothing here.
atZf32Where it sits, along the other, in world units.
targetu32A client reads nothing here.
sourceu32A client reads nothing here.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 26 on events, sent by the server, reliable.

Where target is a unit it holds, of a kind that takes notices, a client shows a notice for it, but not again for the next ping on the same target; it keeps the last target of each side apart. The header names the champion that placed the ping, as source does.

FieldTypeWhat it is
atXf32Where the ping sits, along one ground axis, in world units.
atYf32Its height, in world units. A client does not use it to place the ping.
atZf32Where it sits, along the other, in world units.
targetu32The unit pinged, or zero where a place was pinged instead.
sourceu32The unit that placed it.

PlayEmote

What a client sends to play an emote. The header names the sender’s champion.

Definition.

In every range of this book

Command 10 on requests, sent by the client, reliable.

FieldTypeWhat it is
emoteu32Which emote, by its place in the client’s list. A client sends nothing where no emote matches.

EmotePlayed

What a server sends to say a unit played an emote. The header names the champion playing the emote.

Definition.

In every range of this book

Command 11 on events, sent by the server, reliable.

FieldTypeWhat it is
emoteu32Which emote, by its place in the client’s list; any value at or past the end of the list plays nothing.

VoiceEvent

What a server sends to play a voice event. The header carries zero.

Definition.

In 0.9.22.14–0.9.25.20

Command 132 on events, sent by the server, reliable.

FieldTypeWhat it is
eventtext, 64 bytesThe event’s name, ended by a zero byte. A client reads nothing after it.
Vectors (1)

one-on-0-9-22-16

In 0.9.25.21–1.0.0.24

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.9.25.21–0.9.25.35132
0.9.25.36–1.0.0.24131
FieldTypeWhat it is
eventtext, 64 bytesThe event’s name. A client sends no VoiceEventDone for a name that names no event it holds.
callbacku8Bit 0 set asks the client to send VoiceEventDone once the event has finished playing.
Vectors (1)

one-on-0-9-25-24

VoiceEventDone

What a client sends once a voice event (VoiceEvent) that asked for it has played. The header carries zero.

Definition.

In 0.9.25.21–0.9.25.35

Command 164 on requests, sent by the client, reliable.

A client names no event: the message is its header alone. It sends it only once an event it found has finished playing; for an empty name, or one naming no event, it sends nothing.

No body.

Vectors (1)

one-on-0-9-25-24

In 0.9.25.36–1.0.0.24

Command 162 on requests, sent by the client, reliable.

A client names no event: the message is its header alone. It sends none for an event with an empty name or one it does not know.

No body.

VolumeMuted

What a server sends to mute or unmute one kind of sound. The header carries zero.

Definition.

In 0.9.25.21–0.9.25.35

Command 169 on events, sent by the server, reliable.

FieldTypeWhat it is
categoryu8Which kind, 0 to 5. A larger value than 5 has no defined effect. Values: 0 all, 1 music, 2 effects, 3 announcer, 4 unitResponses, 5 environment, 6 mainEffects.
state1-byte bitsWhether it is muted.
state.mutedbit 0Set to mute, clear to unmute.
state.unusedbit 1 to 7Unused; a server writes zero.
Vectors (1)

music-on-0-9-25-24

In 0.9.25.36–1.0.0.24

Command 167 on events, sent by the server, reliable.

FieldTypeWhat it is
categoryu8Which kind. A larger value than 6 has no defined effect. Values: 0 all, 1 music, 2 effects, 3 announcer, 4 unitResponses, 5 environment, 6 mainEffects.
state1-byte bitsWhether it is muted.
state.mutedbit 0Set to mute, clear to unmute.
state.unusedbit 1 to 7Unused; a server writes zero.

UnitSpoke

What a client sends when a unit says something on its screen. A server need do nothing with it. The header names the unit speaking.

Definition.

In every range of this book

Command 30 on requests, sent by the client, reliable.

FieldTypeWhat it is
unitu32A value the client takes from the unit that speaks; what it names is not recorded.
unknownf32A client writes 1073741824.
unknownToou32A client writes zero.
kindu80 for text a client sends on a script’s behalf. 1 for one of the client’s own error texts, each distinct text sent once per session.
unusedu8A client writes zero.
texttext, ended by a zero byteWhat the unit says, ended by a zero byte; the two take at most 1024 bytes.

Votes

Surrender votes, and a vote on evening out a match.

Surrender

A server tells a side a surrender vote has been called with SurrenderVoteCalled. A client answers with SurrenderVote, and a server tells the side where the vote stands with SurrenderStatus. SurrenderAllowed says whether a champion’s player can call a vote, turning the choice in the client’s menu on or off.

In 0.8.13.26–0.9.22.15

There is no surrender vote: a client sends and takes no message about one.

In 0.9.22.16–0.9.25.20

A client has no panel for the vote. SurrenderVoteCalled only announces a vote, as just cast or as cast already, and a client’s player votes by typing. Where a vote fails, SurrenderFailed says how long until another can be called.

In 0.9.25.21–1.0.0.24

SurrenderVoteCalled shows the caller’s vote to that side and, where it says the vote opens, opens the vote’s panel for that side.

In 0.9.25.24–0.9.25.35

A client takes SurrenderVoteCalled whenever it arrives, its own champion on the field or not.

Evening out a match

A server can hold a vote on giving the side behind gold, experience and turrets. BalanceVote opens the vote’s panel for the voting side and adds one voter with each message; a client answers with BalanceVoteAnswer from the panel or as its player types /equalize, once per vote. BalanceResult says how the vote ended, or why it could not be held.

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).

SurrenderVoteCalled

What a server sends to open a surrender vote, or to report one already open. The header names no object: it carries zero.

Definition.

In 0.9.22.16–0.9.25.20

Command 160 on events, sent by the server, reliable.

A client has no panel for the vote: it only announces it.

FieldTypeWhat it is
how1-byte bits
how.unusedbit 0Unused; a client reads nothing here.
how.castbit 1Set where caller has just voted, clear where caller had voted already. A client announces either with caller, inFavour, against and side.
how.unusedHighbit 2 to 7Unused; a server writes zero.
calleru32The unit that called the vote.
inFavouru8How many have voted for.
againstu8How many have voted against.
sideu32Which side is voting.
Vectors (1)

one-on-0-9-22-16

In 0.9.25.21–0.9.25.35

Command 160 on events, sent by the server, reliable.

A client fails where it has no player of its own, or, for its own side, no game screen. Without its vote panel it opens no panel and records no vote, but still announces that a vote began where openTheMenu is set.

FieldTypeWhat it is
how1-byte bits
how.countAsYesbit 0Applies only where side is the client’s own: set shows caller voting yes, clear voting no, opening the menu or not.
how.openTheMenubit 1Set where the vote opens: a client of side opens the vote’s panel from seats and closesIn, which have no other effect; every client with a player of its own announces that a vote began, with caller, inFavour, against and side.
how.unusedbit 2 to 7Unused; a server writes zero.
calleru32The unit that called the vote.
inFavouru8How many have voted for.
againstu8How many have voted against.
seatsu8How many seats can vote.
sideu32Which side is voting.
closesInf32How long the vote stays open, in seconds.
Vectors (1)

one-on-0-9-25-24

In 0.9.25.36–1.0.0.24

Command 158 on events, sent by the server, reliable.

A client ignores it unless its menu and its own champion both exist.

FieldTypeWhat it is
how1-byte bits
how.countAsYesbit 0Applies only where side is the client’s own: set shows caller voting yes, clear voting no, opening the menu or not.
how.openTheMenubit 1Set where the vote opens: a client of side opens the vote’s panel from seats and closesIn, which have no other effect; every client with a player of its own announces that a vote began, with caller, inFavour, against and side.
how.unusedbit 2 to 7Unused; a server writes zero.
calleru32The unit that called the vote.
inFavouru8How many have voted for.
againstu8How many have voted against.
seatsu8How many seats can vote.
sideu32Which side is voting.
closesInf32How long the vote stays open, in seconds.

SurrenderVote

What a client sends to vote on surrendering. The header names no object: it carries zero.

Definition.

In 0.9.22.16–0.9.25.35

Command 159 on requests, sent by the client, reliable.

A client sends it as its player votes, by button or chat command, whether or not a vote is open.

FieldTypeWhat it is
how1-byte bits
how.inFavourbit 0Set where the answer is yes.
how.unusedbit 1 to 7A client writes no value of its own here; a server ignores them.
Vectors (1)

one-on-0-9-25-24

In 0.9.25.36–1.0.0.24

Command 157 on requests, sent by the client, reliable.

It answers a call to surrender.

FieldTypeWhat it is
how1-byte bits
how.inFavourbit 0Set where the answer is yes, clear where it is no.
how.unusedbit 1 to 7A client leaves these bits as they happen to be; a server ignores them.

SurrenderStatus

What a server sends to tell a side where its surrender vote stands. The header names no object: it carries zero.

Definition.

In 0.9.22.16–0.9.25.35

Command 162 on events, sent by the server, reliable.

FieldTypeWhat it is
reasonu32Why the vote stands where it does. A client acts on 0 to 4 and ignores the message for any other value; 0 resets the vote whatever side is, and 1 resets it only where side is the client’s own. A client announces 0, 2, 3 and 4 whether or not it has a player of its own, and fails on 1 without one.
inFavouru8How many voted for.
againstu8How many voted against.
sideu32Which side.
Vectors (1)

one-on-0-9-25-24

In 0.9.25.36–1.0.0.24

Command 160 on events, sent by the server, reliable.

A client ignores the message unless its interface and its own champion both exist.

FieldTypeWhat it is
reasonu32Why the vote stands where it does. A client acts on 0 to 4 and ignores the message for any other value; 0 resets the vote whatever side holds, and 1 resets it only where side is the client’s own.
inFavouru8How many voted for.
againstu8How many voted against.
sideu32Which side.

SurrenderFailed

What a server sends when a surrender vote fails, to say how long until another can be called. The header carries zero.

Definition.

In 0.9.22.16–0.9.25.20

Command 161 on events, sent by the server, reliable.

FieldTypeWhat it is
secondsLeftf32How long until a vote can be called again, in seconds. A client announces it.
Vectors (1)

one-on-0-9-22-16

The interface

What a client shows its player besides the field: the view and camera, input locks, the minimap and text over the screen. Tips, quests, highlights and the tutorial are in Tutorial and guidance.

The view

A client reports where its view sits and which way it faces with Camera, which a server answers (see Ordering). A client tells a server what it has selected with SelectObject, and as it locks its view to its champion or releases it with CameraLock.

A server carries a client’s view from one place to another with MoveCamera. A server can also lock or free a client’s camera with CameraLockSet, which the client answers with CameraLock except while it holds its camera itself, and set a point a player’s view keeps to with CameraBehaviour.

In 0.9.25.24–1.0.0.24

A client sends no Camera while its camera is locked: a server that needs a client’s view reports frees its camera with CameraLockSet.

In 0.9.25.24–1.0.0.24

Camera names one point, the one the view looks at, in place of where the view sits and which way it faces.

In 0.9.25.24–1.0.0.24

A client ignores CameraLockSet that arrives while it holds its camera itself, and answers nothing.

Input

A server locks or unlocks kinds of input, such as movement, spells or the shop, with InputLock or InputLockToggled.

In 0.8.13.26–0.9.22.13

No message locks a client’s input, in either direction.

In 0.9.22.14–0.9.22.15

A server locks and unlocks input with InputLockToggled alone. A client flips locks of its own too, and tells the server which with InputLocksFlipped.

In 0.9.22.16–0.9.25.35

A client locks and unlocks its own input too, and tells the server each time: InputLocksFlipped for the locks it flipped, as when a camera move a script drives starts and ends, and InputLockChanged for the locks it set or cleared.

In 0.9.25.24–1.0.0.24

A client keeps every lock a message sets or clears, and later input obeys them, but it acts on a lock at once only where the message’s mask is exactly one of 1, 4, 8, 16, 32 or 128.

The minimap and text on screen

MinimapIcon changes what a client draws for a unit on its map. A server can float text over a unit (FloatingText, UnitText), warn a player who seems to be away (AfkWarning), and take the interface down (HudDisabled).

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).

Camera

What a client sends to say where its view sits and which way it faces. Each report is sent once where a server answers it, and again and again where a server does not. The header names no object: it carries zero.

Definition.

In 0.8.13.26–0.9.25.23

Carried on requests, sent by the client, unreliable, under these commands:

BuildsCommand
0.8.13.26–0.9.22.1363
0.9.22.14–0.9.25.2359
FieldTypeWhat it is
atXf32Where the view stands, along one ground axis.
atYf32Its height.
atZf32Along the other ground axis.
facingXf32The way it faces, along one ground axis.
facingYf32The way it faces, in height.
facingZf32The way it faces, along the other ground axis.
clientIdu32The client id the sender holds: that of the client the view belongs to.
syncIdu8Names this report, counting up as the view moves. A client sends the report again until a server returns the name.
Vectors (2)

one-on-0-8-13-26, one-on-0-9-25-21

In 0.9.25.24–1.0.0.24

Command 59 on requests, sent by the client, unreliable.

A client sends a new report each time its view moves more than 200 units, at most one every tenth of a second, and sends an unanswered one again after twice its ping, in seconds, plus 1/30 of a second. While its view is locked it sends none.

FieldTypeWhat it is
lookAtXf32The point the view looks at, along one ground axis: where it stands, plus 2000 units the way it faces.
lookAtYf32Its height, taken the same way.
lookAtZf32Along the other ground axis, taken the same way.
clientIdu32The client id the sender holds: that of the client the view belongs to.
syncIdu8Names this report, counting up as the view moves and wrapping after 255. A client sends the report again until a server returns the name.

SelectObject

What a client sends as the object it has selected changes. The header names no object: it carries zero.

Definition.

In every range of this book

Carried on requests, sent by the client, reliable, under these commands:

BuildsCommand
0.8.13.26–0.9.22.1365
0.9.22.14–1.0.0.2461
FieldTypeWhat it is
clientIdu32The client id of the client selecting: the one its Registered gave it. Zero is a client id like any other rather than an absence.
selectedu32A client writes zero here.
Vectors (1)

one-on-0-8-13-26

CameraLock

What a client sends as it locks its view to a unit or releases it. The header names no object: it carries zero.

Definition.

In 0.8.13.26–0.9.22.13

Command 64 on requests, sent by the client, reliable.

A client sends it as its player sets the lock, carrying the new state; while a forced lock holds, the player’s setting is dropped. As the client’s champion dies, a forced lock starts and it sends 0; as the champion comes back, the lock lifts and it sends the state held before the death.

FieldTypeWhat it is
state1-byte bits
state.lockedbit 0Set while the view follows a unit.
state.unusedbit 1 to 7Unused; a client writes zero.
clientIdu32The client id of the client locking. Zero is a client id like any other rather than an absence.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 60 on requests, sent by the client, reliable.

A client sends it on each CameraLockSet with state as that message carried it, all eight bits included, and also as its player sets the lock or the game forces a lock or lifts one. While a forced lock holds, a CameraLockSet or player setting is dropped. As a forced lock begins, a client keeps the state then in force and sends it as the lock lifts; a second forced lock during the first sends its own state and keeps nothing new.

FieldTypeWhat it is
state1-byte bits
state.lockedbit 0Set while the view follows a unit.
state.unusedbit 1 to 7As CameraLockSet carried them; zero in a report the client makes on its own.
clientIdu32The client id of the client locking. Zero is a client id like any other rather than an absence.
Vectors (1)

one-on-0-9-22-14

MoveCamera

What a server sends to carry a client’s view from one place to another. The header names the champion of the player it is sent to.

Definition.

In 0.9.22.14–0.9.25.20

Command 131 on events, sent by the server, reliable.

Only the client whose own champion the header names moves its view; others, and every client where the header names no champion, take the message and do nothing.

FieldTypeWhat it is
fromXf32Where the view starts, along one ground axis, in world units.
fromYf32Where the view starts, in height, in world units.
fromZf32Where the view starts, along the other ground axis, in world units.
toXf32Where the view ends, along one ground axis, in world units.
toYf32Where the view ends, in height, in world units.
toZf32Where the view ends, along the other ground axis, in world units.
travelTimef32How long the view takes to get there, in seconds. The view moves at an even speed over the distance along the ground.
Vectors (1)

one-on-0-9-22-16

In 0.9.25.21–0.9.25.35

Command 131 on events, sent by the server, reliable.

Only the client whose own champion the header names moves its view; others, and every client where the header names no champion, take the message and do nothing.

FieldTypeWhat it is
how1-byte bitsHow the view moves.
how.fromWhereItIsbit 0Set to start from where the camera stands, fromX, fromY and fromZ having no effect; clear to start from them.
how.unused1bit 1Unused; a server writes zero.
how.unusedbit 2 to 7Unused; a server writes zero.
fromXf32Where the view starts, along one ground axis, in world units.
fromYf32Where the view starts, in height, in world units.
fromZf32Where the view starts, along the other ground axis, in world units.
toXf32Where the view ends, along one ground axis, in world units.
toYf32Where the view ends, in height, in world units.
toZf32Where the view ends, along the other ground axis, in world units.
travelTimef32How long the view takes to get there, in seconds. The view moves at an even speed over the distance along the ground.
Vectors (1)

one-on-0-9-25-24

In 0.9.25.36–1.0.0.24

Command 130 on events, sent by the server, reliable.

Only the client whose own champion the header names moves its view; others, and every client where the header names no champion, take the message and do nothing.

FieldTypeWhat it is
how1-byte bitsHow the view moves.
how.fromWhereItIsbit 0Set to start from where the camera stands, fromX, fromY and fromZ having no effect; clear to start from them.
how.unused1bit 1Unused; a server writes zero.
how.unusedbit 2 to 7Unused; a server writes zero.
fromXf32Where the view starts, along one ground axis, in world units.
fromYf32Where the view starts, in height, in world units.
fromZf32Where the view starts, along the other ground axis, in world units.
toXf32Where the view ends, along one ground axis, in world units.
toYf32Where the view ends, in height, in world units.
toZf32Where the view ends, along the other ground axis, in world units.
travelTimef32How long the view takes to get there, in seconds. The view moves at an even speed over the distance along the ground. A client ignores the message where it is zero or less.

CameraLockSet

What a server sends to lock the camera to the champion or free it. A client answers with CameraLock. The header names no object: a server writes zero.

Definition.

In 0.9.22.14–0.9.25.35

Command 128 on events, sent by the server, reliable.

A client answers at once with CameraLock, returning the state byte as it arrived. While the game holds a forced lock, it ignores the message and sends nothing.

FieldTypeWhat it is
lockedu8Nonzero to lock the camera, zero to free it; a client tests the whole byte, so any set bit locks it.
Vectors (1)

one-on-0-9-25-24

In 0.9.25.36–1.0.0.24

Command 127 on events, sent by the server, reliable.

A client answers at once with CameraLock, returning the state byte as it arrived. While the game forces the view free, a client ignores the message and sends nothing for it, then or later.

FieldTypeWhat it is
lockedu8Nonzero to lock the camera, zero to free it; a client tests the whole byte, so any set bit locks it.

CameraBehaviour

What a server sends to set a point a champion’s player’s view keeps to. The header names the champion.

Definition.

In every range of this book

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.8.13.26–0.9.22.1397
0.9.22.14–1.0.0.2494

Only the client whose own champion the header names applies it.

FieldTypeWhat it is
xf32Along one ground axis, in world units.
yf32In height, in world units.
zf32Along the other ground axis, in world units.
Vectors (1)

one-on-0-8-13-26

InputLock

What a server sends to lock or unlock a kind of input on a client. The header carries zero.

Definition.

In 0.9.22.16–1.0.0.24

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.9.22.16–0.9.25.35149
0.9.25.36–1.0.0.24147
FieldTypeWhat it is
categoryu32Which input, as a set of bits. Values: 1 cameraLocking, 2 movement, 4 abilities, 8 summonerSpells, 16 shop, 32 chat, 64 minimapMovement, 128 cameraMovement.
lockedu8Set to lock, clear to unlock.
Vectors (1)

camera-locking-on-0-9-25-24

InputLockToggled

What a server sends to turn kinds of input off where they are on, or on where they are off. The header carries zero.

Definition.

In 0.9.22.14–0.9.25.35

Command 125 on events, sent by the server, reliable.

A client acts on the change at once only where locks is 1, 4, 8, 16, 32 or 128; any other value still changes what is locked, and takes effect as the player next tries.

FieldTypeWhat it is
locksu32Each lock set flips. Values: 1 cameraLock, 2 movement, 4 spells, 8 summonerSpells, 16 shop, 32 chat, 64 minimapMovement, 128 cameraMovement.
Vectors (1)

shop-on-0-9-25-24

In 0.9.25.36–1.0.0.24

Command 124 on events, sent by the server, reliable.

A client acts on the change at once only where exactly one lock is set; any other value still changes what is locked, and takes effect as the player next tries.

FieldTypeWhat it is
locksu32Each lock set flips. Values: 1 cameraLock, 2 movement, 4 spells, 8 summonerSpells, 16 shop, 32 chat, 64 minimapMovement, 128 cameraMovement.

InputLocksFlipped

What a client sends after flipping kinds of its own input, off where they were on and on where they were off: as a camera move a script drives starts and ends, and at other moments of its own. The header carries zero.

Definition.

In 0.9.22.14–0.9.25.35

Command 124 on requests, sent by the client, reliable.

FieldTypeWhat it is
locksu32Each lock it flipped. A camera move flips cameraMovement. Values: 1 cameraLock, 2 movement, 4 spells, 8 summonerSpells, 16 shop, 32 chat, 64 minimapMovement, 128 cameraMovement.
Vectors (1)

one-on-0-9-25-24

InputLockChanged

What a client sends after locking or unlocking kinds of its own input. The header carries zero.

Definition.

In 0.9.22.16–0.9.25.35

Command 148 on requests, sent by the client, reliable.

FieldTypeWhat it is
locksu32Which input, as a set of bits. Values: 1 cameraLock, 2 movement, 4 spells, 8 summonerSpells, 16 shop, 32 chat, 64 minimapMovement, 128 cameraMovement.
lockedu8Set where it locked them, clear where it unlocked them.
Vectors (1)

one-on-0-9-25-24

FloatingText

What a server sends to show text floating over a unit. The header names the unit.

Definition.

In every range of this book

Command 30 on events, sent by the server, reliable.

FieldTypeWhat it is
unusedu32Unused; a server writes zero.
delayf32Unused; a server writes zero.
sloti32Where the text goes. 0 floats it over the unit while the unit is in the client’s own view, where the player’s floating-text settings allow. 1 to 50 writes it, in colour, to that line of a debugging display, only where the unit is the one the player has selected. A client does nothing for any other value.
erroru8Nonzero has a client show the text on screen as a message for ten seconds, whatever slot holds, and float an error notice of its own over the unit, under the same view and settings as slot 0; it does nothing else with the message.
colouru8The text’s colour on the debugging display; it has no effect for slot 0.
texttext, ended by a zero byteThe text, ended by a zero byte; the two take at most 1024 bytes.
Vectors (1)

one-on-0-8-13-26

AfkWarning

What a server sends to warn the player that they seem to be away, in a popup with one button that only closes it. It carries nothing of its own. The header carries zero.

Definition.

In 0.9.22.14–1.0.0.24

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.9.22.14–0.9.25.35146
0.9.25.36–1.0.0.24145

No body.

Vectors (1)

one-on-0-9-25-24

HudDisabled

What a server sends to take down a client’s interface as the match ends. The header names no object: it carries zero.

Definition.

In 0.9.25.36–1.0.0.24

Command 171 on events, sent by the server, reliable.

A client also opens its chat entry, as the chat key does, where chat is open to it.

No body.

Announcement

What a server sends to show one of a client’s own fixed announcements for five seconds.

Definition.

In 0.8.13.26–0.9.22.13

Command 70 on events, sent by the server, reliable.

FieldTypeWhat it is
announcementu32Which of the client’s announcements, -1 to 27. The text of each is the client’s own and is not recorded here. -1 shows a text that is none of the 28, and 5, 6, 20, 21 and 25 show only a placeholder; any other value has no defined effect.
unitu32A unit whose name the announcement carries, or zero for an announcement that names none. A client shows nothing where it does not know the unit.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 66 on events, sent by the server, reliable.

FieldTypeWhat it is
announcementu32Which of the client’s announcements, -1 to 27. The text of each is the client’s own and is not recorded here. -1 shows a text that is none of the 28; any other value has no defined effect.
unitu32A unit whose name the announcement carries, or zero for an announcement that names none. A client shows nothing where it does not know the unit.

CameraAck

What a server returns for a view report, naming the report it answers. A server names in the header the champion of the player it is sent to.

Definition.

In 0.8.13.26–0.9.22.13

Command 112 on events, sent by the server, reliable.

FieldTypeWhat it is
syncIdu8The name the report carried. A client sends the report again until this comes back.
Vectors (1)

one-on-0-8-13-26

In 0.9.22.14–1.0.0.24

Command 110 on events, sent by the server, reliable.

FieldTypeWhat it is
syncIdu8The name the report carried. A client sends the report again until this comes back. It takes a value only where it is newer than the last it took, counting with wrap within 128 steps, and ignores any other.

Tutorial and guidance

What a server shows a player to lead them: tips, quests, objectives and text at the side of the screen, highlights, and the tutorial.

A server tells a champion something has come about with Situation.

Highlights

A server lights up parts of the screen and units with HudHighlighted, HudHighlightToggled, UiHighlight, UnitHighlighted and UnitHighlightRemoved, and makes part of the minimap or of the shop blink with MinimapHighlighted and ShopHighlighted.

Tips, quests and objectives

A server puts a tip in front of a player with TipShown, addressed to that player’s champion, and a client reports a click on it, or the tip being closed, with TipEvent. A server can add, complete and remove quests in the quest tracker with QuestUpdated, and a client reports the pointer passing over a quest, and a click on it, with QuestEvent. A server can also show, change and hide an objective panel (ObjectiveShown, ObjectiveReplaced, ObjectiveHidden) and a box of text at the side of the screen (SideTextShown, SideTextRefreshed, SideTextHidden).

The tutorial

In the tutorial, a server can put lines of the client’s own text in its chat (TutorialChatLine) and open the tutorial’s popup (TutorialPopup), which the client answers with TutorialPopupClosed.

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).

HudHighlighted

What a server sends to light up part of the screen, as a tutorial does. Only HudHighlightToggled turns it off. The header carries zero.

Definition.

In 0.9.22.16–0.9.25.35

Command 157 on events, sent by the server, reliable.

FieldTypeWhat it is
elementu8What to light up on the main controls, 0 to 8; a larger value has no defined effect. 4, 5 and 6 each name a part of a second panel; which part each value names is not recorded. Values: 0 spell, 1 spellUpgrade, 2 summonerSpell, 3 recall, 4 shop, 5 gold, 6 experience, 7 health, 8 mana.
numberu8Which slot, for a spell or a summoner spell; it has no effect for any element but 0, 1 and 2.
Vectors (1)

spell-on-0-9-25-24

In 0.9.25.36–1.0.0.24

Command 155 on events, sent by the server, reliable.

FieldTypeWhat it is
elementu8What to light up on the main controls, 0 to 8; a larger value has no defined effect. 4, 5 and 6 each name a part of a second panel; which part each value names is not recorded. Values: 0 spell, 1 spellUpgrade, 2 summonerSpell, 3 recall, 4 shop, 5 gold, 6 experience, 7 health, 8 mana.
numberu8Which slot, for a spell or a summoner spell; it has no effect for 4, 5 or 6.

HudHighlightToggled

What a server sends to light up part of the screen, or to put it out. The header carries zero.

Definition.

In 0.9.25.21–0.9.25.35

Command 166 on events, sent by the server, reliable.

FieldTypeWhat it is
partu8Which part of the screen. A client ignores any other value. Values: 1 hud, 2 shop, 3 minimap.
elementu8What to light up, as in HudHighlighted. A value beyond those named has no defined effect.
numberu8Which slot, as in HudHighlighted.
secondu8A third value where part is 2; a server writes zero otherwise.
state1-byte bitsWhether it is lit.
state.onbit 0Set to light it up, clear to put it out.
state.unusedbit 1 to 7A client ignores these bits; a server writes zero.
Vectors (1)

hud-on-0-9-25-24

In 0.9.25.36–1.0.0.24

Command 164 on events, sent by the server, reliable.

FieldTypeWhat it is
partu8Which part of the screen. A client ignores any other value. Values: 1 hud, 2 shop, 3 minimap.
elementu8What to light up, as in HudHighlighted. A value beyond those named does nothing.
numberu8Which slot, as in HudHighlighted.
secondu8A third value where part is 2; a server writes zero otherwise.
state1-byte bitsWhether it is lit.
state.onbit 0Set to light it up, clear to put it out.
state.unusedbit 1 to 7A client ignores these bits; a server writes zero.

UnitHighlighted

What a server sends to outline a unit with a pulsing light, as a tutorial does, until UnitHighlightRemoved. The header carries zero.

Definition.

In 0.9.22.14–1.0.0.24

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.9.22.14–0.9.25.35142
0.9.25.36–1.0.0.24141
FieldTypeWhat it is
unitu32The unit: one that can be damaged.
Vectors (1)

one-on-0-9-25-24

UnitHighlightRemoved

What a server sends to take away the light UnitHighlighted put on a unit. The header carries zero.

Definition.

In 0.9.22.14–1.0.0.24

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.9.22.14–0.9.25.35143
0.9.25.36–1.0.0.24142
FieldTypeWhat it is
unitu32The unit. Where it has no light, nothing happens.
Vectors (1)

one-on-0-9-25-24

MinimapHighlighted

What a server sends to make part of the minimap blink, as a tutorial does.

Definition.

In 0.9.25.21–0.9.25.35

Command 165 on events, sent by the server, reliable.

FieldTypeWhat it is
elementu8Which part of the minimap blinks. 0 is its camera button, and a server sends only 0; any other value has no defined effect.
Vectors (1)

one-on-0-9-25-24

In 0.9.25.36–1.0.0.24

Command 163 on events, sent by the server, reliable.

FieldTypeWhat it is
elementu8Which part of the minimap blinks; a server sends 0, its camera button. A client acts only once it knows its own champion, and does not check the value: any other has no defined effect.

ShopHighlighted

What a server sends to make a shop element blink once, as a tutorial does. The header names no object: a server writes zero.

Definition.

In 0.9.22.16–0.9.25.20

Command 158 on events, sent by the server, reliable.

FieldTypeWhat it is
elementu8A shop element blinks once, where the shop window is open. Element 0 is the buy button, 1 the sell button, 2 the shop item number names, and 3 the item second names within the category number names. A client fails for any larger value.
numberu8Which of the element’s entries.
secondu8For the shop’s element 3, which item within the category; a client reads nothing here otherwise.
Vectors (1)

one-on-0-9-22-16

In 0.9.25.21–1.0.0.24

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.9.25.21–0.9.25.35158
0.9.25.36–1.0.0.24156
FieldTypeWhat it is
elementu8A shop element blinks once, where the shop window is open. Element 0 is the buy button, 1 the sell button, 2 the shop item number names, 3 the item second names within the category number names, and 4 the recommended item number names. A larger value than 4 has no defined effect.
numberu8Which of the element’s entries.
secondu8For the shop’s element 3, which item within the category; a client reads nothing here otherwise.
Vectors (1)

one-on-0-9-25-24

ObjectiveShown

What a server sends to show the objective panel with a text. The header carries zero.

Definition.

In 0.9.22.16–1.0.0.24

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.9.22.16–0.9.25.35151
0.9.25.36–1.0.0.24149
FieldTypeWhat it is
texttext, ended by a zero byteThe objective, ended by a zero byte.
Vectors (1)

one-on-0-9-25-24

ObjectiveReplaced

What a server sends to replace the text of the objective panel, showing the panel if it is hidden. The header carries zero.

Definition.

In 0.9.22.16–1.0.0.24

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.9.22.16–0.9.25.35153
0.9.25.36–1.0.0.24151

A client ignores it where it has no objective panel.

FieldTypeWhat it is
texttext, ended by a zero byteThe objective, ended by a zero byte.
Vectors (1)

one-on-0-9-25-24

ObjectiveHidden

What a server sends to hide the objective panel. It carries nothing of its own. The header carries zero.

Definition.

In 0.9.22.16–1.0.0.24

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.9.22.16–0.9.25.35152
0.9.25.36–1.0.0.24150

No body.

Vectors (1)

one-on-0-9-25-24

SideTextShown

What a server sends to show a box of text at the right edge of the screen. The header names no object: a server writes zero.

Definition.

In 0.9.22.16–0.9.25.35

Command 154 on events, sent by the server, reliable.

A client also sizes the panel to the text and shows it low on the screen: its edge at 98.5% of the screen’s width, and 85% of the screen’s height less the height of one interface element, scaled by the screen’s width over 1680.

FieldTypeWhat it is
texttext, 128 bytesA key into the client’s own text, which it looks up and shows. The text ends at its first zero byte, which falls within the field.
Vectors (1)

one-on-0-9-25-24

In 0.9.25.36–1.0.0.24

Command 152 on events, sent by the server, reliable.

A client also sizes the panel to the text and shows it. The box sits at the lower right, at 98.5% of the screen’s width and 85% of its height, less room for the interface.

FieldTypeWhat it is
texttext, 128 bytesA key into the client’s own text, which it looks up and shows. The text ends at its first zero byte, which falls within the field.

SideTextRefreshed

What a server sends to change the text in the box SideTextShown opened, in place. The header names no object: a server writes zero.

Definition.

In 0.9.22.16–1.0.0.24

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.9.22.16–0.9.25.35156
0.9.25.36–1.0.0.24154
FieldTypeWhat it is
texttext, 128 bytesA key into the client’s own text, which it looks up and shows. The text ends at its first zero byte, which falls within the field.
Vectors (1)

one-on-0-9-25-24

SideTextHidden

What a server sends to close the box of text SideTextShown opened. It carries nothing of its own. The header names no object: a server writes zero.

Definition.

In 0.9.22.16–1.0.0.24

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.9.22.16–0.9.25.35155
0.9.25.36–1.0.0.24153

No body.

Vectors (1)

one-on-0-9-25-24

TutorialChatLine

What a server sends to put a line of the client’s own text in its chat, as a line from the game. The header carries zero.

Definition.

In 0.9.25.21–1.0.0.24

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.9.25.21–0.9.25.35167
0.9.25.36–1.0.0.24165
FieldTypeWhat it is
texttext, 128 bytesA key into the client’s own text, which it looks up and shows. The text ends at its first zero byte, which falls within the field.
Vectors (1)

one-on-0-9-25-24

TutorialPopup

What a server sends to open the tutorial’s popup: a caption, this text and a single button, which a client answers with TutorialPopupClosed. A client has one such popup; a second message replaces its text. The header carries zero.

Definition.

In 0.9.22.14–0.9.22.15

Command 144 on events, sent by the server, reliable.

FieldTypeWhat it is
texttext, 128 bytesA key into the client’s own text for the popup’s body. A client copies the whole field first, so the text ends at a zero byte within it.
Vectors (1)

one-on-0-9-22-14

In 0.9.22.16–1.0.0.24

Carried on events, sent by the server, reliable, under these commands:

BuildsCommand
0.9.22.16–0.9.25.35144
0.9.25.36–1.0.0.24143
FieldTypeWhat it is
texttext, 128 bytesA key into the client’s own text for the popup’s body. The text ends at its first zero byte, which falls within the field.
Vectors (1)

one-on-0-9-25-24

TutorialPopupClosed

What a client sends as its player presses the button of the tutorial’s popup (TutorialPopup). It carries nothing of its own. The header carries zero.

Definition.

In 0.9.22.14–1.0.0.24

Carried on requests, sent by the client, reliable, under these commands:

BuildsCommand
0.9.22.14–0.9.25.35145
0.9.25.36–1.0.0.24144

No body.

Vectors (1)

one-on-0-9-25-24

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.

Definition.

In every range of this book

FieldTypeWhat it is
choiceu32Which choice, by the number the client knows it as. Zero where the place stands empty.
ranku8How 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.

Definition.

In every range of this book

FieldTypeWhat it is
header2-byte bits
header.pointCountbit 0 to 15How 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.
pathrecordEverything the movement carries after its point count.
path.unitu32The unit the path belongs to.
path.pointscount in header.pointCount × recordEvery 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[].xf32Along one ground axis, in world units.
path.points[].zf32Along 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.

Definition.

In every range of this book

FieldTypeWhat it is
header2-byte bits
header.pointCountbit 0 to 15How 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.
pathrecordEverything the movement carries after its point count.
path.unitu32The unit the path belongs to.
path.termsSpeedParamsHow the unit is made to travel.
path.pointscount in header.pointCount × recordEvery 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[].xf32Along one ground axis, in world units.
path.points[].zf32Along the other, in world units.

Particle

One drawn particle: where it sits, what it hangs off, and how far into its run it is.

Definition.

In every range of this book

FieldTypeWhat it is
targetu32The unit the particle is aimed at, or zero.
particleu32The name this particle answers to, so later messages can name it.
boundTou32The 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.
atXf32Where the particle sits, along one ground axis, in world units.
atYf32Where it sits, in height, in world units.
atZf32Where it sits, along the other ground axis, in world units.
towardXf32Where the particle is aimed, along one ground axis, in world units.
towardYf32Where it is aimed, in height, in world units.
towardZf32Where it is aimed, along the other ground axis, in world units.
ownerXf32Where the unit that made it stood, along one ground axis, in world units.
ownerYf32Where that unit stood, in height, in world units.
ownerZf32Where that unit stood, along the other ground axis, in world units.
runningForf32How 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.

Definition.

In every range of this book

FieldTypeWhat it is
particleu32Which particle, by the number its name gives, as Objects and identifiers works it out.
flagsu16How 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.
targetBoneu32Where on the unit aimed at they hang, by the number the name of that place gives, as Objects and identifiers works it out.
boneu32Where on the unit that made them they hang, by the same reading.
particleCountu8How many particles follow.
particlescount in particleCount × ParticleThe 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.

Definition.

In every range of this book

FieldTypePresent whenWhat it is
present1-byte bits
present.group0bit 0Set where this group’s values follow.
present.group1bit 1Set where this group’s values follow.
present.group2bit 2Set where this group’s values follow.
present.group3bit 3Set where this group’s values follow.
present.group4bit 4Set where this group’s values follow. They come after every other group’s, whatever the flags.
present.unusedbit 5 to 7A client takes only groups 0 to 4.
unitu32The unit whose values these are.
group0recordpresent.group0 setThe values of group 0, where the flag says they follow.
group0.whichu32Says which of the group’s values follow, one bit each, lowest first.
group0.valuescount in the bits set in which × bytesThe values themselves, four bytes each, in the order the bits above name them.
group1recordpresent.group1 setThe values of group 1, where the flag says they follow.
group1.whichu32Says which of the group’s values follow, one bit each, lowest first.
group1.valuescount in the bits set in which × bytesThe values themselves, four bytes each, in the order the bits above name them.
group2recordpresent.group2 setThe values of group 2, where the flag says they follow.
group2.whichu32Says which of the group’s values follow, one bit each, lowest first.
group2.valuescount in the bits set in which × bytesThe values themselves, four bytes each, in the order the bits above name them.
group3recordpresent.group3 setThe values of group 3, where the flag says they follow.
group3.whichu32Says which of the group’s values follow, one bit each, lowest first.
group3.valuescount in the bits set in which × bytesThe values themselves, four bytes each, in the order the bits above name them.
group4recordpresent.group4 setThe values of group 4, where the flag says they follow.
group4.whichu32Says which of the group’s values follow, one bit each, lowest first.
group4.valuescount in the bits set in which × bytesThe 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.

Definition.

In every range of this book

FieldTypeWhat it is
playeri64Which player holds the place, or a negative number where it stands empty. It has a player identifier’s width.
levelu16The level the seat holder has reached across matches.
summoneru32The 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.
otherSummoneru32The spell in the other.

SpeedParams

How a unit is made to travel, in place of what a receiving end would otherwise choose for it.

Definition.

In every range of this book

FieldTypeWhat it is
speedf32How fast the unit travels along the path, in world units a second, standing in for its own pace.
gravityf32How sharply the unit arcs through the air along the way. Zero where it keeps to the ground.
fromXf32Where 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.
fromZf32Where 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.

Definition.

In every range of this book

FieldTypeWhat it is
sizeu16How 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.
spellu32Which spell, by the number its name gives, as Objects and identifiers works it out.
castu32The name this casting answers to, so later messages can name it.
levelu8The rank the spell stands at, counting from 1: a spell at its first rank carries 1.
attackSpeedf32What the caster’s attack rhythm is scaled by while this runs.
casteru32The unit casting.
chainOwneru32The unit the casting is credited to, where a chain of casts leads back to another.
targetXf32Where the casting is aimed, along one ground axis, in world units.
targetYf32Where the casting is aimed, in height, in world units.
targetZf32Where the casting is aimed, along the other ground axis, in world units.
targetEndXf32Where the casting stops being aimed, for a spell that sweeps, along one ground axis, in world units.
targetEndYf32Where the casting stops being aimed, for a spell that sweeps, in height, in world units.
targetEndZf32Where the casting stops being aimed, for a spell that sweeps, along the other ground axis, in world units.
hitCountu8How many units the casting names as hit, at most 32. A client sets no bound of its own.
hitscount in hitCount × SpellHitThe units the casting hits, each a unit then a one-byte result.
castTimef32How long the casting takes before it takes effect, in seconds.
extraCastTimef32What is added to that, in seconds.
totalTimef32How long the whole casting runs, in seconds.
cooldownf32How long until the spell can be cast again, in seconds.
how1-byte bits
how.basicAttackbit 0Set where the casting is the caster’s own swing rather than a spell.
how.secondBasicAttackbit 1Set where the swing is the second of a pair.
how.unusedbit 2 to 7A client reads nothing here; a server writes zero.
slotu8Which of the caster’s slots the spell sits in.
costf32What the casting spends from the caster’s resource.
launchXf32Where what the casting throws leaves from, along one ground axis, in world units.
launchYf32Where what the casting throws leaves from, in height, in world units.
launchZf32Where 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.

Definition.

In every range of this book

FieldTypeWhat it is
unitu32The unit hit.
resultu8How the hit landed.

Patches

What is particular to each patch this book covers: the builds it shipped, the live checks that ran on them, every message it carries, what the specification leaves unrecorded there, and how it differs from the patch before it. Where builds of two patches are held to the same facts, they share a section.

No build of this book has these, though the chapters name them, so what the chapters say of them says nothing of this book: AnimationAdvanced, AnimationOverrides, AppearanceCleared, AscendedUnit, AttackIndicators, AttackSpeedBounds, BalanceResult, BalanceVote, BalanceVoteAnswer, BalanceVoteRefused, BotKick, BounceMissile, CampCleared, CampMarker, CampOpened, CampTimer, CancelTargeting, CapturePointChanged, CapturePointValue, ChampionDied, ChampionRemoved, ChampionStats, CharacterPreload, ChatAllowance, ContextEmote, CreateFollower, CursorRings, DeathTimer, EffectAddedGroup, EffectCounter, EffectCountGroup, EffectRemovedGroup, EffectReplacedGroup, EmitterPause, EnterTeamSight, FadeSounds, FloatingTextOnMap, FogSet, FollowerMaster, ForceDeath, GameOptions, GroundAttackMode, HealthBar, HoverIndicator, HoverTarget, InhibitorDied, InventorySlot, InventorySnapshot, InventorySnapshotOnMap, ItemCharges, ItemSubstitution, ItemUsed, LeaveTeamSight, LevelCap, MapProp, MapPropChanged, MarkerMoved, MatchStarted, MinimapIcon, MinionKillCount, MissileCourse, MissileLaunched, MissileRetarget, MissileSpeed, MusicCue, NavigationFlags, ParticleEnterTeamSight, ParticleLeaveTeamSight, ParticleSource, Pause, PauseAnimation, QuestEvent, QuestUpdated, RegionMoved, ResourceDisplay, ResourceKindChanged, RespawnPoint, Resume, ScoreAdded, ScreenTint, ShieldAdded, ShopEnabled, ShopUndo, ShopUndoCount, Shutdown, Situation, SoftReconnect, SoundPlayed, SpawnBot, SpawnMarker, SpawnTurret, SpellCharge, SpellCharges, SpellCostChanged, SpellIconChanged, SpellInSlot, SpellLevel, SpellOffsetTargetChanged, SpellRangeChanged, SpellRankLimits, SpellSlotChanged, SpellSlotChangedForOwner, SpellTargeterHidden, SpellTargeterShown, SpellToggled, StatisticIncremented, StreamChunk, StreamChunkRange, StreamMetadata, StreamRequest, SubstitutionCleared, SurrenderAllowed, SwapItems, SystemMessage, TeamChanged, TeamScore, ThemeMusic, TipEvent, TipShown, UiHighlight, UnitDiedOnMap, UnitText, UseObject, VictoryDance, VoiceCommand, VoiceOverride, ZoomReport.

0.8.13.26–0.9.22.13

Client builds from 0.8.13.26 up to, not including, 0.9.22.14. Patch notes: V0.8.13.26.

Build checkedPassedFailedSkippedCommitDate
0.8.13.268062e341b12026-11-04

Other ranges of this book have these, and this one does not, so what the chapters say of them says nothing of it: AfkWarning, BotDebug, CameraLockSet, CloseShop, DeathHistory, Exit, FadeMinions, FadeRemoved, FadeTo, FogToggled, GameSpeed, GreyscaleWhenDead, HudDisabled, HudHighlightToggled, HudHighlighted, InputLock, InputLockToggled, JoinSide, LoadingProgress, MinimapHighlighted, MissileHits, MissileReport, MoveCamera, NexusIdle, NexusSkin, ObjectiveHidden, ObjectiveReplaced, ObjectiveShown, Paused, PlayerDisconnected, Replication, Resumed, Roster, SeatChampion, SeatLoadProgress, SeatName, ShopHighlighted, SideTextHidden, SideTextRefreshed, SideTextShown, SpellNameChanged, SpellNumbers, SpellTargetingChanged, SurrenderStatus, SurrenderVote, SurrenderVoteCalled, TransientAck, TutorialChatLine, TutorialPopup, TutorialPopupClosed, UnitHighlightRemoved, UnitHighlighted, VoiceEvent, VoiceEventDone, VolumeMuted, WaypointAck, WaypointGroup, WaypointGroupAtSpeed, WorldEvent.

Every message of this range (98)

0.9.22.14–0.9.22.15

Client builds from 0.9.22.14 up to, not including, 0.9.22.16. Patch notes: V0.9.22.14.

Build checkedPassedFailedSkippedCommitDate
0.9.22.14905a00b64a2026-11-04

Other ranges of this book have these, and this one does not, so what the chapters say of them says nothing of it: FadeMinions, GreyscaleWhenDead, HudDisabled, HudHighlightToggled, HudHighlighted, InputLock, MinimapHighlighted, MissileHits, NexusIdle, NexusSkin, ObjectiveHidden, ObjectiveReplaced, ObjectiveShown, ShopHighlighted, SideTextHidden, SideTextRefreshed, SideTextShown, SpellNameChanged, SpellNumbers, SurrenderStatus, SurrenderVote, SurrenderVoteCalled, TutorialChatLine, VoiceEventDone, VolumeMuted, WorldEvent.

Every message of this range (132)
MessageCommand
AfkWarning146
Announcement66
AppearancePopped91
AppearancePushed90
Attack53
AttackFrom54
Autocast40
BotDebug105
BotState107
BotTargets106
BuildingDied73
BuyItem41
Camera59
CameraAck110
CameraBehaviour94
CameraLock60
CameraLockSet128
CastSpell35
ChainTargets103
CharacterSelected15
Chat0
ClientEvent108
ClientFinished17
ClientReady16
ClientVersion67
ClockConvergence76
ClockReply75
ClockSync74
CloseShop147
CooldownSet33
CreateChampion6
CreateNeutral7
CreateTurret8
Damage23
DeathHistory112
DestroyMissile102
EffectAdded37
EffectCount80
EffectRemoved39
EffectReplaced38
EmotePlayed11
EnterLocalSight57
EnterSight55
Exit115
ExperienceGained28
FaceDirection93
FacePosition93
FadeRemoved138
FadeTo137
FloatingText30
FogToggled126
GameEnded14
GameSpeed136
GoldGained27
GoldRedirect89
InhibitorState65
InputLocksFlipped124
InputLockToggled125
ItemAdded42
JoinSide100
KillParticle22
LeaveLocalSight58
LeaveSight56
LevelUp47
LoadingProgress113
Loadout83
MapPing25
MatchIdentity111
MissileReport63
MissileState63
MoveCamera131
MovementBounds127
MoveOrder20
ParticlesCreated21
Path77
PathWithSpeed78
Paused134
PingPlaced26
PlayAnimation9
PlayEmote10
PlayerDisconnected116
QueryStatus3
QueryStatusAnswer4
Reconnected118
ReconnectedInMatch117
RegionAdded86
RegionAttached85
RegionRemoved84
Register0
Registered0
RemoveItem43
RemoveItemAnswer44
Replication129
Respawned72
Resumed135
ResyncEnded119
Revived71
Roster103
SeatChampion101
SeatLoadProgress114
SeatName102
SelectObject61
SpawnEnd12
SpawnFromBarracks49
SpawnPet32
SpawnStart5
SpawnUnit87
SpellCastAnswer36
SpellCooldown33
SpellTargetingChanged133
SpellUpgraded19
StartGame13
StatTick64
StopAnimation88
StopAttack48
SwapItemsAnswer46
TargetHeldChampion70
TargetUnit69
TransientAck130
TutorialPopup144
TutorialPopupClosed145
UnitDied34
UnitHighlighted142
UnitHighlightRemoved143
UnitSpoke30
UnitStopped24
UpgradeSpell18
VersionSync68
VoiceEvent132
WaypointAck120
WaypointGroup121
WaypointGroupAtSpeed122

Against 0.8.13.26–0.9.22.13

Where a build from 0.9.22.14 up to, not including, 0.9.22.16 differs from one from 0.8.13.26 up to, not including, 0.9.22.14. Anything not named here is the same in both.

Transport

In 0.9.22.14–0.9.22.15, not in 0.8.13.26–0.9.22.13

MessageSent byCommandWhat it does
AfkWarningserver146 on eventsWarn the player that they seem to be away, in a popup with one button that only closes it
BotDebugserver105 on eventsWhat a server sends describing what a bot is thinking
CameraLockSetserver128 on eventsLock the camera to the champion or free it
CloseShopserver147 on eventsClose a client’s shop
DeathHistoryserver112 on eventsSay what led to a death, so the client can lay it out
Exitclient115 on requestsWhat a client sends as it leaves
FadeRemovedserver138 on eventsUndo a fade on a unit
FadeToserver137 on eventsFade a unit towards an opacity over time
FogToggledserver126 on eventsTurn the drawing of the fog of war off where it is on, or on where it is off
GameSpeedserver136 on eventsSet how fast the game’s clock runs
InputLockToggledserver125 on eventsTurn kinds of input off where they are on, or on where they are off
InputLocksFlippedclient124 on requestsWhat a client sends after flipping kinds of its own input, off where they were on and on where they were off: as a camera move a script drives starts and ends, and at other moments of its own
JoinSideclient100 on rosterAsk for a seat on one of the two sides while the match is being put together
LoadingProgressclient113 on requestsWhat a client sends while a match loads, saying how far it has got
MissileReportclient63 on requestsReport where a missile that flies straight is and where it is going
MoveCameraserver131 on eventsCarry a client’s view from one place to another
MovementBoundsserver127 on eventsSet a circle that a client keeps its view or its champion’s orders within
Pausedserver134 on eventsPut the match on hold
PlayerDisconnectedserver116 on eventsWhat a server sends as a player’s client drops out
Reconnectedserver118 on eventsSay a client has reconnected
ReconnectedInMatchclient117 on requestsWhat a client sends right after the server answers its registration
Replicationserver129 on transientSay what has changed about units a client can see
Resumedserver135 on eventsTake the match off hold
ResyncEndedserver119 on eventsEnd the resynchronising a client began on its own Reconnected, after which it takes spawns again as they come
Rosterserver103 on rosterLay out both sides and who is on them, while the match is being put together
SeatChampionserver101 on rosterSay which champion a seat is playing, while the match is being put together
SeatLoadProgressserver114 on transientTell everyone how far one seat has got through loading, and how it is holding up
SeatNameserver102 on rosterSay what a seat is called, while the match is being put together
SpellTargetingChangedserver133 on eventsChange how a spell already in a unit’s slot is aimed
TargetHeldChampionserver70 on eventsMark that a unit is attacking a champion, or to take the mark away
TransientAckclient130 on requestsSay a batch of changes arrived, naming which batch
TutorialPopupserver144 on eventsOpen the tutorial’s popup: a caption, this text and a single button, which a client answers with TutorialPopupClosed
TutorialPopupClosedclient145 on requestsWhat a client sends as its player presses the button of the tutorial’s popup (TutorialPopup)
UnitHighlightRemovedserver143 on eventsTake away the light UnitHighlighted put on a unit
UnitHighlightedserver142 on eventsOutline a unit with a pulsing light, as a tutorial does, until UnitHighlightRemoved
VoiceEventserver132 on eventsPlay a voice event
WaypointAckclient120 on requestsWhat a client sends once it has taken in a group of movements, naming which group
WaypointGroupserver121 on transientMove units
WaypointGroupAtSpeedserver122 on eventsMove units along paths of its own choosing, stating how each one travels rather than leaving it to the receiving end

In 0.8.13.26–0.9.22.13, not in 0.9.22.14–0.9.22.15

MessageSent byCommand it had
PlaceTurretserver55 on events
ValueGroup0server49 on events
ValueGroup1server50 on events
ValueGroup2server51 on events
ValueGroup3server52 on events

Commands

These differ only in their command. Each row is a run of commands moved by the same amount:

Laid out differently

  • Attack
    • Its command is 57 in 0.8.13.26–0.9.22.13 and 53 in 0.9.22.14–0.9.22.15.
    • slot is in 0.9.22.14–0.9.22.15 (u8), after missile, and not in 0.8.13.26–0.9.22.13.
  • AttackFrom (vectors: one-on-0-9-22-14)
    • Its command is 58 in 0.8.13.26–0.9.22.13 and 54 in 0.9.22.14–0.9.22.15.
    • slot is in 0.9.22.14–0.9.22.15 (u8), after missile, and not in 0.8.13.26–0.9.22.13.
  • Chat
    • speaker is in 0.9.22.14–0.9.22.15 (u32) at the start, and not in 0.8.13.26–0.9.22.13.
    • audience is in 0.9.22.14–0.9.22.15 (u32), after speaker, and not in 0.8.13.26–0.9.22.13.
    • textLength is in 0.9.22.14–0.9.22.15 (u32), after audience, and not in 0.8.13.26–0.9.22.13.
    • text is text, ended by a zero byte in 0.8.13.26–0.9.22.13 and text, sized by textLength in 0.9.22.14–0.9.22.15.
    • terminator is in 0.9.22.14–0.9.22.15 (bytes, 1), after text, and not in 0.8.13.26–0.9.22.13.
  • ClientEvent (vectors: buff-on-0-9-22-14, consumable-bought-on-0-9-22-14, critical-strike-on-0-9-22-14, damage-dealt-on-0-9-22-14, damage-taken-on-0-9-22-14, death-assist-on-0-9-22-14, died-on-0-9-22-14, gold-earned-on-0-9-22-14, gold-spent-on-0-9-22-14, heal-cast-on-0-9-22-14, heal-on-0-9-22-14, killing-spree-on-0-9-22-14, one-on-0-9-22-14)
    • Its command is 110 in 0.8.13.26–0.9.22.13 and 108 in 0.9.22.14–0.9.22.15.
    • event takes 55 playerLeft, 56 playerReconnected, 62 itemBought in 0.9.22.14–0.9.22.15 and not in 0.8.13.26–0.9.22.13.
    • value is in 0.9.22.14–0.9.22.15 (u32), after spent, and not in 0.8.13.26–0.9.22.13.
    • heal.unused is in 0.9.22.14–0.9.22.15 (u32), after heal.parentScript, and not in 0.8.13.26–0.9.22.13.
    • heal.unusedToo is in 0.9.22.14–0.9.22.15 (u32), after heal.unused, and not in 0.8.13.26–0.9.22.13.
    • effect.unused is in 0.9.22.14–0.9.22.15 (u32), after effect.parentScript, and not in 0.8.13.26–0.9.22.13.
    • effect.unusedToo is in 0.9.22.14–0.9.22.15 (u32), after effect.unused, and not in 0.8.13.26–0.9.22.13.
    • assist.share is in 0.9.22.14–0.9.22.15 (f32), after assist.magical, and not in 0.8.13.26–0.9.22.13.
    • assist.gold is in 0.9.22.14–0.9.22.15 (f32), after assist.share, and not in 0.8.13.26–0.9.22.13.
    • kill is in 0.9.22.14–0.9.22.15 (record), after assist.gold, and not in 0.8.13.26–0.9.22.13.
  • CooldownSet
    • token is in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
    • clientByte is in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
  • CreateChampion
    • skillLevel is in 0.9.22.14–0.9.22.15 (u8), after node, and not in 0.8.13.26–0.9.22.13.
    • bot is in 0.9.22.14–0.9.22.15 (u8), after side, and not in 0.8.13.26–0.9.22.13.
    • skin is in 0.9.22.14–0.9.22.15 (i32), after bot, and not in 0.8.13.26–0.9.22.13.
    • asset is text, ended by a zero byte in 0.8.13.26–0.9.22.13 and text, 128 bytes in 0.9.22.14–0.9.22.15.
    • flag is in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
  • CreateNeutral
    • campAtX is in 0.9.22.14–0.9.22.15 (f32), after atZ, and not in 0.8.13.26–0.9.22.13.
    • campAtY is in 0.9.22.14–0.9.22.15 (f32), after campAtX, and not in 0.8.13.26–0.9.22.13.
    • campAtZ is in 0.9.22.14–0.9.22.15 (f32), after campAtY, and not in 0.8.13.26–0.9.22.13.
  • CreateTurret (vectors: one-on-0-9-22-14)
    • atX is in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
    • atY is in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
    • atZ is in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
    • asset is in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
  • Damage
    • how is in 0.9.22.14–0.9.22.15 (1-byte bits) at the start, and not in 0.8.13.26–0.9.22.13.
    • result is in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
  • EffectAdded
    • runningFor is in 0.9.22.14–0.9.22.15 (f32), after effect, and not in 0.8.13.26–0.9.22.13.
  • InhibitorState (vectors: down-on-0-9-22-14)
    • Its command is 69 in 0.8.13.26–0.9.22.13 and 65 in 0.9.22.14–0.9.22.15.
    • duration is u32 in 0.8.13.26–0.9.22.13 and i32 in 0.9.22.14–0.9.22.15.
  • Loadout (vectors: one-on-0-9-22-14)
    • Its command is 86 in 0.8.13.26–0.9.22.13 and 83 in 0.9.22.14–0.9.22.15.
    • runes is 8 × u32 in 0.8.13.26–0.9.22.13 and 30 × u32 in 0.9.22.14–0.9.22.15.
  • MapPing
    • target is in 0.9.22.14–0.9.22.15 (u32), after z, and not in 0.8.13.26–0.9.22.13.
    • clientId is in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
  • MissileState (vectors: one-on-0-9-22-14)
    • Its command is 67 in 0.8.13.26–0.9.22.13 and 63 in 0.9.22.14–0.9.22.15.
    • keptX is in 0.9.22.14–0.9.22.15 (f32), after atZ, and not in 0.8.13.26–0.9.22.13.
    • keptY is in 0.9.22.14–0.9.22.15 (f32), after keptX, and not in 0.8.13.26–0.9.22.13.
    • keptZ is in 0.9.22.14–0.9.22.15 (f32), after keptY, and not in 0.8.13.26–0.9.22.13.
    • directionX is in 0.9.22.14–0.9.22.15 (f32), after keptZ, and not in 0.8.13.26–0.9.22.13.
    • directionY is in 0.9.22.14–0.9.22.15 (f32), after directionX, and not in 0.8.13.26–0.9.22.13.
    • directionZ is in 0.9.22.14–0.9.22.15 (f32), after directionY, and not in 0.8.13.26–0.9.22.13.
    • how is in 0.9.22.14–0.9.22.15 (1-byte bits), after directionZ, and not in 0.8.13.26–0.9.22.13.
  • ParticlesCreated (vectors: one-on-0-9-22-14)
    • groupCount is in 0.9.22.14–0.9.22.15 (u8) at the start, and not in 0.8.13.26–0.9.22.13.
    • groups is in 0.9.22.14–0.9.22.15 (count in groupCount × ParticleGroup), after groupCount, and not in 0.8.13.26–0.9.22.13.
    • particle is in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
    • flags is in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
    • unknown is in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
    • boundTo is in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
    • effect is in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
    • unknownB is in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
    • atX is in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
    • atY is in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
    • atZ is in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
    • target is in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
    • unknownC is in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
  • PlayAnimation (vectors: one-on-0-9-22-14)
    • flags has locked at bit 6 in 0.9.22.14–0.9.22.15, and not in 0.8.13.26–0.9.22.13.
    • flags has fadeAtEnd at bit 7 in 0.9.22.14–0.9.22.15, and not in 0.8.13.26–0.9.22.13.
    • flags.unused is at bit 6, 26 bits wide, in 0.8.13.26–0.9.22.13 and at bit 8, 24 bits wide, in 0.9.22.14–0.9.22.15.
  • RegionAdded
    • Its command is 89 in 0.8.13.26–0.9.22.13 and 86 in 0.9.22.14–0.9.22.15.
    • otherExtra is in 0.9.22.14–0.9.22.15 (u32), after extra, and not in 0.8.13.26–0.9.22.13.
  • RegionAttached
    • Its command is 88 in 0.8.13.26–0.9.22.13 and 85 in 0.9.22.14–0.9.22.15.
    • otherExtra is in 0.9.22.14–0.9.22.15 (u32), after extra, and not in 0.8.13.26–0.9.22.13.
  • SpawnFromBarracks (vectors: one-on-0-9-22-14)
    • Its command is 53 in 0.8.13.26–0.9.22.13 and 49 in 0.9.22.14–0.9.22.15.
    • unread is in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
  • SpawnUnit (vectors: one-on-0-9-22-14)
    • Its command is 90 in 0.8.13.26–0.9.22.13 and 87 in 0.9.22.14–0.9.22.15.
    • team is u32 in 0.8.13.26–0.9.22.13 and 4-byte bits in 0.9.22.14–0.9.22.15.
    • team has team at bit 0 in 0.9.22.14–0.9.22.15, and not in 0.8.13.26–0.9.22.13.
    • team has unused at bit 9 in 0.9.22.14–0.9.22.15, and not in 0.8.13.26–0.9.22.13.
    • flags is in 0.9.22.14–0.9.22.15 (1-byte bits), after team, and not in 0.8.13.26–0.9.22.13.
  • SpellCooldown
    • unread is in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
  • StopAttack
    • how is in 0.9.22.14–0.9.22.15 (1-byte bits) at the start, and not in 0.8.13.26–0.9.22.13.
    • keepAnimating is in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
    • forceCast is in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
  • UnitStopped (vectors: one-on-0-9-22-14)
    • syncId is in 0.9.22.14–0.9.22.15 (i32), after facingZ, and not in 0.8.13.26–0.9.22.13.
  • VersionSync
    • Its command is 72 in 0.8.13.26–0.9.22.13 and 68 in 0.9.22.14–0.9.22.15.
    • map is in 0.9.22.14–0.9.22.15 (i32), after agreement, and not in 0.8.13.26–0.9.22.13.
    • seats is in 0.9.22.14–0.9.22.15 (12 × Seat), after map, and not in 0.8.13.26–0.9.22.13.
    • build is text, ended by a zero byte in 0.8.13.26–0.9.22.13 and text, 256 bytes in 0.9.22.14–0.9.22.15.

Chapters

  • In the objects chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: No region id stands for no region.
  • In the objects chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A client acts on that Registered alone and ignores every other, so it pairs no other player’s player id with a client id.
  • In the objects chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A client given a create message for a net id it already holds stops.
  • In the objects chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: Map 1 holds the six Barracks names, HQ_T1, HQ_T2, the six spawn points named __P_Order_Spawn_Barracks__ and __P_Chaos_Spawn_Barracks__ with C01, L01 or R01, and the shops OrderShop01 and ChaosShop, whose identifier is 4279618595.
  • In the objects chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: CreateTurret creates a turret of its own at the place its body gives, rather than naming one the map holds.
  • In the ordering chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A client compares no numbers on movements: it takes every path as it arrives, whatever syncId it carries.
  • In the ordering chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A client sends a view report again until a server answers with its number.
  • In the space chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A champion is created facing +z, whatever its map’s table of spawn positions says, and so is a monster.
  • In the space chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A client loads the map its own settings name, map 1 where they name none, and has data for map 1 alone, Summoner’s Rift.
  • In the time chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A client’s match clock starts at 0 as the client finishes loading, and runs on the client’s own timer from then; a ClockSync sets it wherever it stands.
  • In the values chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A cast’s slot also takes 64, for a basic attack.
  • In the values chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A champion’s own book ends at slot 22.
  • In the values chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A champion’s inventory ends at slot 14, and holds neither a trinket nor an item for recalling.
  • In the data chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: The client has map 1 alone.
  • In the data chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A name’s opening says what the object is: Turret a turret, Barracks an inhibitor, HQ_ a nexus.
  • In the data chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A champion begins on its side’s spawn point itself, or at (6000, 0, 6000) on a map with none.
  • In the data chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: No map adds items of its own, and there are no figures for a whole mode.
  • In the joining chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A client whose command line holds no double quote ends.
  • In the joining chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A client waits for the answer naming its own player id as long as it takes, and offers its player no choice.
  • In the joining chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: VersionSync names neither the map nor anyone at the match: a client loads the map its own configuration names (see The client’s data).
  • In the vision chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: EnterSight states nothing but the unit it names, and only marks that unit as in view.
  • In the vision chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: LeaveLocalSight takes a unit out of what one client alone can see, and leaves it held.
  • In the vision chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: GoldGained shows floating gold only for the client’s own champion.
  • In the movement chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A client reads nothing of EnterSight.
  • In the movement chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A movement with no points empties the unit’s path.
  • In the movement chapter, a passage holds for 0.9.22.14–0.9.22.15 and not 0.8.13.26–0.9.22.13: 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).
  • In the replication chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A server grants gold with GoldGained.
  • In the match chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: StatTick asks every unit’s stats to advance by that span.
  • In the match chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A client whose connection drops, while loading or in play, shows its player that it was disconnected, and neither connects again nor leaves.
  • In the combat chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: Result 0 of Damage is a notice a client shows for only one in every thirty it receives, and result 5 a miss, shown for its player’s own unit.
  • In the effects chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: ParticlesCreated starts one particle, named by the message’s own id.
  • In the shop chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: An item’s own data says whether it can be bought.
  • In the shop chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: Opening the shop sends nothing either.
  • In the shop chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: For an item built from others, a client asks only where a slot is free or holds one of its parts, and where the champion’s gold covers what remains after the parts it holds.
  • In the communication chapter, a passage holds for 0.9.22.14–0.9.22.15 and not 0.8.13.26–0.9.22.13: VoiceEvent carries only the event’s name and asks for no answer.
  • In the interface chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: No message locks a client’s input, in either direction.
  • In the interface chapter, a passage holds for 0.9.22.14–0.9.22.15 and not 0.8.13.26–0.9.22.13: A server locks and unlocks input with InputLockToggled alone.

Only notes

These read the same on the wire, and only their notes change. What each says in 0.9.22.14–0.9.22.15:

  • Autocast, slot: “The slot cast by itself, from -1 to 44. A client takes a value outside that range as it stands. What -1 does is not recorded.”, where 0.8.13.26–0.9.22.13 has “The slot cast by itself, from -1 to 22. A client takes a value outside that range as it stands. What -1 does is not recorded.”
  • CastSpell, how.slot: “Which slot is being cast from, from 0 to 44. A client still sends a larger slot, its low seven bits only.”, where 0.8.13.26–0.9.22.13 has “Which slot is being cast from, from 0 to 22. A client still sends a larger slot, its low seven bits only.”
  • ExperienceGained, unit: “The unit granted it, a champion. A client fails for any other unit it holds, and does nothing for a unit it does not know.”, where 0.8.13.26–0.9.22.13 has “The unit granted it, one with a mind, such as a champion or a minion. A client does nothing for a unit it does not know.”
  • ItemAdded, its layout: “There is no charges field: a client takes an item’s charges from the item’s own data. A client applies it only to a champion’s item slots.”, where 0.8.13.26–0.9.22.13 has “There is no charges field: a client takes an item’s charges from the item’s own data. A server sends it to units nobody is buying for.”
  • ItemAdded, slot: “The slot it went to, 0 to 36. A larger value than 36 has no defined effect.”, where 0.8.13.26–0.9.22.13 has “The slot it went to, 0 to 14. A larger value than 14 has no defined effect.”
  • PingPlaced, its layout: “Where target is a unit it holds, of a kind that takes notices, a client shows a notice for it, but not again for the next ping on the same target; it keeps the last target of each side apart. The header names the champion that placed the ping, as source does.”, where 0.8.13.26–0.9.22.13 has “A client marks atX and atZ on each of its two map views, and only while it shows a map. The header can carry zero.”
  • PingPlaced, atY: “Its height, in world units. A client does not use it to place the ping.”, where 0.8.13.26–0.9.22.13 has “A client reads nothing here.”
  • PingPlaced, target: “The unit pinged, or zero where a place was pinged instead.”, where 0.8.13.26–0.9.22.13 has “A client reads nothing here.”
  • PingPlaced, source: “The unit that placed it.”, where 0.8.13.26–0.9.22.13 has “A client reads nothing here.”
  • RemoveItemAnswer, slot: “Which slot, 0 to 36. A larger value than 36 has no defined effect.”, where 0.8.13.26–0.9.22.13 has “Which slot, 0 to 14. A larger value than 14 has no defined effect.”
  • SwapItemsAnswer, from: “The slot the item left, 0 to 36. A client swaps the two slots named whatever their values, so a server keeps both within range.”, where 0.8.13.26–0.9.22.13 has “The slot the item left, 0 to 14. A client swaps the two slots named whatever their values, so a server keeps both within range.”
  • SwapItemsAnswer, to: “The slot it went to, 0 to 36. A client swaps the two slots named whatever their values, so a server keeps both within range.”, where 0.8.13.26–0.9.22.13 has “The slot it went to, 0 to 14. A client swaps the two slots named whatever their values, so a server keeps both within range.”
  • UnitDied, its layout: “A client does nothing for a unit already dead. Otherwise it stops the unit’s cast and attack and, where killer is nonzero, puts the unit down for stayDown, whether or not it knows killer, and shows what that kind of unit shows for a kill, for a minion only where killer is on another side.”, where 0.8.13.26–0.9.22.13 has “A client does nothing more for a unit already dead, or where killer is zero. Otherwise, whether or not it knows killer, it puts the unit down for stayDown: dead, with no health, its movement, cast and attack stopped. For a minion whose killer, or the killer’s owner, is the player’s own champion, it then shows a kill notice.”

0.9.22.16–0.9.25.20

Client builds from 0.9.22.16 up to, not including, 0.9.25.21. Patch notes: V0.9.22.16, V0.9.22.18.

Build checkedPassedFailedSkippedCommitDate
0.9.22.16905e96264e2026-11-04
0.9.22.18905e82b3212026-11-04

Other ranges of this book have these, and this one does not, so what the chapters say of them says nothing of it: FadeMinions, GreyscaleWhenDead, HudDisabled, HudHighlightToggled, MinimapHighlighted, NexusIdle, NexusSkin, SpellNameChanged, SpellNumbers, TutorialChatLine, VoiceEventDone, VolumeMuted, WorldEvent.

Every message of this range (148)
MessageCommand
AfkWarning146
Announcement66
AppearancePopped91
AppearancePushed90
Attack53
AttackFrom54
Autocast40
BotDebug105
BotState107
BotTargets106
BuildingDied73
BuyItem41
Camera59
CameraAck110
CameraBehaviour94
CameraLock60
CameraLockSet128
CastSpell35
ChainTargets103
CharacterSelected15
Chat0
ClientEvent108
ClientFinished17
ClientReady16
ClientVersion67
ClockConvergence76
ClockReply75
ClockSync74
CloseShop147
CooldownSet33
CreateChampion6
CreateNeutral7
CreateTurret8
Damage23
DeathHistory112
DestroyMissile102
EffectAdded37
EffectCount80
EffectRemoved39
EffectReplaced38
EmotePlayed11
EnterLocalSight57
EnterSight55
Exit115
ExperienceGained28
FaceDirection93
FacePosition93
FadeRemoved138
FadeTo137
FloatingText30
FogToggled126
GameEnded14
GameSpeed136
GoldGained27
GoldRedirect89
HudHighlighted157
InhibitorState65
InputLock149
InputLockChanged148
InputLocksFlipped124
InputLockToggled125
ItemAdded42
JoinSide100
KillParticle22
LeaveLocalSight58
LeaveSight56
LevelUp47
LoadingProgress113
Loadout83
MapPing25
MatchIdentity111
MissileHits163
MissileReport63
MissileState63
MoveCamera131
MovementBounds127
MoveOrder20
ObjectiveHidden152
ObjectiveReplaced153
ObjectiveShown151
ParticlesCreated21
Path77
PathWithSpeed78
Paused134
PingPlaced26
PlayAnimation9
PlayEmote10
PlayerDisconnected116
QueryStatus3
QueryStatusAnswer4
Reconnected118
ReconnectedInMatch117
RegionAdded86
RegionAttached85
RegionRemoved84
Register0
Registered0
RemoveItem43
RemoveItemAnswer44
Replication129
Respawned72
Resumed135
ResyncEnded119
Revived71
Roster103
SeatChampion101
SeatLoadProgress114
SeatName102
SelectObject61
ShopHighlighted158
SideTextHidden155
SideTextRefreshed156
SideTextShown154
SpawnEnd12
SpawnFromBarracks49
SpawnPet32
SpawnStart5
SpawnUnit87
SpellCastAnswer36
SpellCooldown33
SpellTargetingChanged133
SpellUpgraded19
StartGame13
StatTick64
StopAnimation88
StopAttack48
SurrenderFailed161
SurrenderStatus162
SurrenderVote159
SurrenderVoteCalled160
SwapItemsAnswer46
TargetHeldChampion70
TargetUnit69
TransientAck130
TutorialPopup144
TutorialPopupClosed145
TutorialShopOpened150
UnitDied34
UnitHighlighted142
UnitHighlightRemoved143
UnitSpoke30
UnitStopped24
UpgradeSpell18
VersionSync68
VoiceEvent132
WaypointAck120
WaypointGroup121
WaypointGroupAtSpeed122

Against 0.9.22.14–0.9.22.15

Where a build from 0.9.22.16 up to, not including, 0.9.25.21 differs from one from 0.9.22.14 up to, not including, 0.9.22.16. Anything not named here is the same in both.

In 0.9.22.16–0.9.25.20, not in 0.9.22.14–0.9.22.15

MessageSent byCommandWhat it does
HudHighlightedserver157 on eventsLight up part of the screen, as a tutorial does
InputLockserver149 on eventsLock or unlock a kind of input on a client
InputLockChangedclient148 on requestsWhat a client sends after locking or unlocking kinds of its own input
MissileHitsserver163 on eventsSay which units a missile struck
ObjectiveHiddenserver152 on eventsHide the objective panel
ObjectiveReplacedserver153 on eventsReplace the text of the objective panel, showing the panel if it is hidden
ObjectiveShownserver151 on eventsShow the objective panel with a text
ShopHighlightedserver158 on eventsMake a shop element blink once, as a tutorial does
SideTextHiddenserver155 on eventsClose the box of text SideTextShown opened
SideTextRefreshedserver156 on eventsChange the text in the box SideTextShown opened, in place
SideTextShownserver154 on eventsShow a box of text at the right edge of the screen
SurrenderFailedserver161 on eventsWhat a server sends when a surrender vote fails, to say how long until another can be called
SurrenderStatusserver162 on eventsTell a side where its surrender vote stands
SurrenderVoteclient159 on requestsVote on surrendering
SurrenderVoteCalledserver160 on eventsOpen a surrender vote, or to report one already open
TutorialShopOpenedclient150 on requestsWhat a client sends as its player opens the shop

Laid out differently

  • ClientEvent (vectors: buff-on-0-9-22-16, consumable-bought-on-0-9-22-16, critical-strike-on-0-9-22-16, damage-dealt-on-0-9-22-16, damage-taken-on-0-9-22-16, death-assist-on-0-9-22-16, died-on-0-9-22-16, gold-earned-on-0-9-22-16, gold-spent-on-0-9-22-16, heal-cast-on-0-9-22-16, heal-on-0-9-22-16, item-bought-on-0-9-22-16, killing-spree-on-0-9-22-16, one-on-0-9-22-16)
    • event takes 63 surrenderVoteStarted, 64 surrenderVoteCast, 65 surrenderAlreadyVoted, 66 surrenderCountdown, 67 surrenderFailed, 68 surrenderTooEarly, 69 surrenderAgreed, 70 surrenderVoteSpam, 71 minionsSpawned, 72 welcome, 73 startNoticeTwo in 0.9.22.16–0.9.25.20 and not in 0.9.22.14–0.9.22.15.
    • value is present when event = 20 in 0.9.22.14–0.9.22.15, and present when event = 20 or 62 in 0.9.22.16–0.9.25.20.
  • DeathHistory (vectors: one-on-0-9-22-16)
    • entries[].event takes 66 surrenderCountdown, 71 minionsSpawned, 72 welcome, 73 startNoticeTwo in 0.9.22.16–0.9.25.20 and not in 0.9.22.14–0.9.22.15.
    • entries[].value is present when event = 20 in 0.9.22.14–0.9.22.15, and present when event = 20 or 62 in 0.9.22.16–0.9.25.20.
  • MissileReport
    • unknownAX is in 0.9.22.16–0.9.25.20 (f32), after atZ, and not in 0.9.22.14–0.9.22.15.
    • unknownAY is in 0.9.22.16–0.9.25.20 (f32), after unknownAX, and not in 0.9.22.14–0.9.22.15.
    • unknownAZ is in 0.9.22.16–0.9.25.20 (f32), after unknownAY, and not in 0.9.22.14–0.9.22.15.
    • travelX is in 0.9.22.16–0.9.25.20 (f32), after unknownAZ, and not in 0.9.22.14–0.9.22.15.
    • travelY is in 0.9.22.16–0.9.25.20 (f32), after travelX, and not in 0.9.22.14–0.9.22.15.
    • travelZ is in 0.9.22.16–0.9.25.20 (f32), after travelY, and not in 0.9.22.14–0.9.22.15.
    • velocityX is in 0.9.22.16–0.9.25.20 (f32), after travelZ, and not in 0.9.22.14–0.9.22.15.
    • velocityY is in 0.9.22.16–0.9.25.20 (f32), after velocityX, and not in 0.9.22.14–0.9.22.15.
    • velocityZ is in 0.9.22.16–0.9.25.20 (f32), after velocityY, and not in 0.9.22.14–0.9.22.15.
    • endX is in 0.9.22.16–0.9.25.20 (f32), after velocityZ, and not in 0.9.22.14–0.9.22.15.
    • endY is in 0.9.22.16–0.9.25.20 (f32), after endX, and not in 0.9.22.14–0.9.22.15.
    • endZ is in 0.9.22.16–0.9.25.20 (f32), after endY, and not in 0.9.22.14–0.9.22.15.
    • targetX is in 0.9.22.16–0.9.25.20 (f32), after endZ, and not in 0.9.22.14–0.9.22.15.
    • targetY is in 0.9.22.16–0.9.25.20 (f32), after targetX, and not in 0.9.22.14–0.9.22.15.
    • targetZ is in 0.9.22.16–0.9.25.20 (f32), after targetY, and not in 0.9.22.14–0.9.22.15.
    • cast is bytes, 128 in 0.9.22.14–0.9.22.15 and bytes, sized by remaining in 0.9.22.16–0.9.25.20.
    • keptX is in 0.9.22.14–0.9.22.15 and not in 0.9.22.16–0.9.25.20.
    • keptY is in 0.9.22.14–0.9.22.15 and not in 0.9.22.16–0.9.25.20.
    • keptZ is in 0.9.22.14–0.9.22.15 and not in 0.9.22.16–0.9.25.20.
    • directionX is in 0.9.22.14–0.9.22.15 and not in 0.9.22.16–0.9.25.20.
    • directionY is in 0.9.22.14–0.9.22.15 and not in 0.9.22.16–0.9.25.20.
    • directionZ is in 0.9.22.14–0.9.22.15 and not in 0.9.22.16–0.9.25.20.
  • MissileState
    • casterAtX is in 0.9.22.16–0.9.25.20 (f32), after atZ, and not in 0.9.22.14–0.9.22.15.
    • casterAtY is in 0.9.22.16–0.9.25.20 (f32), after casterAtX, and not in 0.9.22.14–0.9.22.15.
    • casterAtZ is in 0.9.22.16–0.9.25.20 (f32), after casterAtY, and not in 0.9.22.14–0.9.22.15.
    • facingX is in 0.9.22.16–0.9.25.20 (f32), after casterAtZ, and not in 0.9.22.14–0.9.22.15.
    • facingY is in 0.9.22.16–0.9.25.20 (f32), after facingX, and not in 0.9.22.14–0.9.22.15.
    • facingZ is in 0.9.22.16–0.9.25.20 (f32), after facingY, and not in 0.9.22.14–0.9.22.15.
    • velocityX is in 0.9.22.16–0.9.25.20 (f32), after facingZ, and not in 0.9.22.14–0.9.22.15.
    • velocityY is in 0.9.22.16–0.9.25.20 (f32), after velocityX, and not in 0.9.22.14–0.9.22.15.
    • velocityZ is in 0.9.22.16–0.9.25.20 (f32), after velocityY, and not in 0.9.22.14–0.9.22.15.
    • endX is in 0.9.22.16–0.9.25.20 (f32), after velocityZ, and not in 0.9.22.14–0.9.22.15.
    • endY is in 0.9.22.16–0.9.25.20 (f32), after endX, and not in 0.9.22.14–0.9.22.15.
    • endZ is in 0.9.22.16–0.9.25.20 (f32), after endY, and not in 0.9.22.14–0.9.22.15.
    • unitAtX is in 0.9.22.16–0.9.25.20 (f32), after endZ, and not in 0.9.22.14–0.9.22.15.
    • unitAtY is in 0.9.22.16–0.9.25.20 (f32), after unitAtX, and not in 0.9.22.14–0.9.22.15.
    • unitAtZ is in 0.9.22.16–0.9.25.20 (f32), after unitAtY, and not in 0.9.22.14–0.9.22.15.
    • how names bit 0 flag in 0.9.22.14–0.9.22.15 and bounced in 0.9.22.16–0.9.25.20.
    • keptX is in 0.9.22.14–0.9.22.15 and not in 0.9.22.16–0.9.25.20.
    • keptY is in 0.9.22.14–0.9.22.15 and not in 0.9.22.16–0.9.25.20.
    • keptZ is in 0.9.22.14–0.9.22.15 and not in 0.9.22.16–0.9.25.20.
    • directionX is in 0.9.22.14–0.9.22.15 and not in 0.9.22.16–0.9.25.20.
    • directionY is in 0.9.22.14–0.9.22.15 and not in 0.9.22.16–0.9.25.20.
    • directionZ is in 0.9.22.14–0.9.22.15 and not in 0.9.22.16–0.9.25.20.

Chapters

  • In the votes chapter, a passage holds for 0.9.22.14–0.9.22.15 and not 0.9.22.16–0.9.25.20: There is no surrender vote: a client sends and takes no message about one.
  • In the votes chapter, a passage holds for 0.9.22.16–0.9.25.20 and not 0.9.22.14–0.9.22.15: A client has no panel for the vote.
  • In the interface chapter, a passage holds for 0.9.22.14–0.9.22.15 and not 0.9.22.16–0.9.25.20: A server locks and unlocks input with InputLockToggled alone.
  • In the interface chapter, a passage holds for 0.9.22.16–0.9.25.20 and not 0.9.22.14–0.9.22.15: A client locks and unlocks its own input too, and tells the server each time: InputLocksFlipped for the locks it flipped, as when a camera move a script drives starts and ends, and InputLockChanged for the locks it set or cleared.

Only notes

These read the same on the wire, and only their notes change. What each says in 0.9.22.16–0.9.25.20:

  • TutorialPopup, text: “A key into the client’s own text for the popup’s body. The text ends at its first zero byte, which falls within the field.”, where 0.9.22.14–0.9.22.15 has “A key into the client’s own text for the popup’s body. A client copies the whole field first, so the text ends at a zero byte within it.”

0.9.25.21–0.9.25.23

Client builds from 0.9.25.21 up to, not including, 0.9.25.24. Patch notes: V0.9.25.21.

Build checkedPassedFailedSkippedCommitDate
0.9.25.211004d82cfce2026-11-04

Other ranges of this book have these, and this one does not, so what the chapters say of them says nothing of it: FadeMinions, GreyscaleWhenDead, HudDisabled, NexusIdle, NexusSkin, SpellNameChanged, WorldEvent.

Every message of this range (153)
MessageCommand
AfkWarning146
Announcement66
AppearancePopped91
AppearancePushed90
Attack53
AttackFrom54
Autocast40
BotDebug105
BotState107
BotTargets106
BuildingDied73
BuyItem41
Camera59
CameraAck110
CameraBehaviour94
CameraLock60
CameraLockSet128
CastSpell35
ChainTargets103
CharacterSelected15
Chat0
ClientEvent108
ClientFinished17
ClientReady16
ClientVersion67
ClockConvergence76
ClockReply75
ClockSync74
CloseShop147
CooldownSet33
CreateChampion6
CreateNeutral7
CreateTurret8
Damage23
DeathHistory112
DestroyMissile102
EffectAdded37
EffectCount80
EffectRemoved39
EffectReplaced38
EmotePlayed11
EnterLocalSight57
EnterSight55
Exit115
ExperienceGained28
FaceDirection93
FacePosition93
FadeRemoved138
FadeTo137
FloatingText30
FogToggled126
GameEnded14
GameSpeed136
GoldGained27
GoldRedirect89
HudHighlighted157
HudHighlightToggled166
InhibitorState65
InputLock149
InputLockChanged148
InputLocksFlipped124
InputLockToggled125
ItemAdded42
JoinSide100
KillParticle22
LeaveLocalSight58
LeaveSight56
LevelUp47
LoadingProgress113
Loadout83
MapPing25
MatchIdentity111
MinimapHighlighted165
MissileHits163
MissileReport63
MissileState63
MoveCamera131
MovementBounds127
MoveOrder20
ObjectiveHidden152
ObjectiveReplaced153
ObjectiveShown151
ParticlesCreated21
Path77
PathWithSpeed78
Paused134
PingPlaced26
PlayAnimation9
PlayEmote10
PlayerDisconnected116
QueryStatus3
QueryStatusAnswer4
Reconnected118
ReconnectedInMatch117
RegionAdded86
RegionAttached85
RegionRemoved84
Register0
Registered0
RemoveItem43
RemoveItemAnswer44
Replication129
Respawned72
Resumed135
ResyncEnded119
Revived71
Roster103
SeatChampion101
SeatLoadProgress114
SeatName102
SelectObject61
ShopHighlighted158
SideTextHidden155
SideTextRefreshed156
SideTextShown154
SpawnEnd12
SpawnFromBarracks49
SpawnPet32
SpawnStart5
SpawnUnit87
SpellCastAnswer36
SpellCooldown33
SpellNumbers168
SpellTargetingChanged133
SpellUpgraded19
StartGame13
StatTick64
StopAnimation88
StopAttack48
SurrenderStatus162
SurrenderVote159
SurrenderVoteCalled160
SwapItemsAnswer46
TargetHeldChampion70
TargetUnit69
TransientAck130
TutorialChatLine167
TutorialPopup144
TutorialPopupClosed145
TutorialShopOpened150
UnitDied34
UnitHighlighted142
UnitHighlightRemoved143
UnitSpoke30
UnitStopped24
UpgradeSpell18
VersionSync68
VoiceEvent132
VoiceEventDone164
VolumeMuted169
WaypointAck120
WaypointGroup121
WaypointGroupAtSpeed122

Against 0.9.22.16–0.9.25.20

Where a build from 0.9.25.21 up to, not including, 0.9.25.24 differs from one from 0.9.22.16 up to, not including, 0.9.25.21. Anything not named here is the same in both.

In 0.9.25.21–0.9.25.23, not in 0.9.22.16–0.9.25.20

MessageSent byCommandWhat it does
HudHighlightToggledserver166 on eventsLight up part of the screen, or to put it out
MinimapHighlightedserver165 on eventsMake part of the minimap blink, as a tutorial does
SpellNumbersserver168 on eventsFill in the numbers a client shows beside a unit’s spells
TutorialChatLineserver167 on eventsPut a line of the client’s own text in its chat, as a line from the game
VoiceEventDoneclient164 on requestsWhat a client sends once a voice event (VoiceEvent) that asked for it has played
VolumeMutedserver169 on eventsMute or unmute one kind of sound

In 0.9.22.16–0.9.25.20, not in 0.9.25.21–0.9.25.23

MessageSent byCommand it had
SurrenderFailedserver161 on events

Laid out differently

Chapters

  • In the communication chapter, a passage holds for 0.9.22.16–0.9.25.20 and not 0.9.25.21–0.9.25.23: VoiceEvent carries only the event’s name and asks for no answer.
  • In the votes chapter, a passage holds for 0.9.22.16–0.9.25.20 and not 0.9.25.21–0.9.25.23: A client has no panel for the vote.
  • In the votes chapter, a passage holds for 0.9.25.21–0.9.25.23 and not 0.9.22.16–0.9.25.20: SurrenderVoteCalled shows the caller’s vote to that side and, where it says the vote opens, opens the vote’s panel for that side.

Only notes

These read the same on the wire, and only their notes change. What each says in 0.9.25.21–0.9.25.23:

  • ShopHighlighted, element: “A shop element blinks once, where the shop window is open. Element 0 is the buy button, 1 the sell button, 2 the shop item number names, 3 the item second names within the category number names, and 4 the recommended item number names. A larger value than 4 has no defined effect.”, where 0.9.22.16–0.9.25.20 has “A shop element blinks once, where the shop window is open. Element 0 is the buy button, 1 the sell button, 2 the shop item number names, and 3 the item second names within the category number names. A client fails for any larger value.”

0.9.25.24–0.9.25.35

Client builds from 0.9.25.24 up to, not including, 0.9.25.36. Patch notes: V0.9.25.24.

Build checkedPassedFailedSkippedCommitDate
0.9.25.241004186b1bf2026-11-04

Other ranges of this book have these, and this one does not, so what the chapters say of them says nothing of it: FadeMinions, GreyscaleWhenDead, HudDisabled, NexusIdle, NexusSkin, SpellNameChanged.

Every message of this range (154)
MessageCommand
AfkWarning146
Announcement66
AppearancePopped91
AppearancePushed90
Attack53
AttackFrom54
Autocast40
BotDebug105
BotState107
BotTargets106
BuildingDied73
BuyItem41
Camera59
CameraAck110
CameraBehaviour94
CameraLock60
CameraLockSet128
CastSpell35
ChainTargets103
CharacterSelected15
Chat0
ClientEvent108
ClientFinished17
ClientReady16
ClientVersion67
ClockConvergence76
ClockReply75
ClockSync74
CloseShop147
CooldownSet33
CreateChampion6
CreateNeutral7
CreateTurret8
Damage23
DeathHistory112
DestroyMissile102
EffectAdded37
EffectCount80
EffectRemoved39
EffectReplaced38
EmotePlayed11
EnterLocalSight57
EnterSight55
Exit115
ExperienceGained28
FaceDirection93
FacePosition93
FadeRemoved138
FadeTo137
FloatingText30
FogToggled126
GameEnded14
GameSpeed136
GoldGained27
GoldRedirect89
HudHighlighted157
HudHighlightToggled166
InhibitorState65
InputLock149
InputLockChanged148
InputLocksFlipped124
InputLockToggled125
ItemAdded42
JoinSide100
KillParticle22
LeaveLocalSight58
LeaveSight56
LevelUp47
LoadingProgress113
Loadout83
MapPing25
MatchIdentity111
MinimapHighlighted165
MissileHits163
MissileReport63
MissileState63
MoveCamera131
MovementBounds127
MoveOrder20
ObjectiveHidden152
ObjectiveReplaced153
ObjectiveShown151
ParticlesCreated21
Path77
PathWithSpeed78
Paused134
PingPlaced26
PlayAnimation9
PlayEmote10
PlayerDisconnected116
QueryStatus3
QueryStatusAnswer4
Reconnected118
ReconnectedInMatch117
RegionAdded86
RegionAttached85
RegionRemoved84
Register0
Registered0
RemoveItem43
RemoveItemAnswer44
Replication129
Respawned72
Resumed135
ResyncEnded119
Revived71
Roster103
SeatChampion101
SeatLoadProgress114
SeatName102
SelectObject61
ShopHighlighted158
SideTextHidden155
SideTextRefreshed156
SideTextShown154
SpawnEnd12
SpawnFromBarracks49
SpawnPet32
SpawnStart5
SpawnUnit87
SpellCastAnswer36
SpellCooldown33
SpellNumbers168
SpellTargetingChanged133
SpellUpgraded19
StartGame13
StatTick64
StopAnimation88
StopAttack48
SurrenderStatus162
SurrenderVote159
SurrenderVoteCalled160
SwapItemsAnswer46
TargetHeldChampion70
TargetUnit69
TransientAck130
TutorialChatLine167
TutorialPopup144
TutorialPopupClosed145
TutorialShopOpened150
UnitDied34
UnitHighlighted142
UnitHighlightRemoved143
UnitSpoke30
UnitStopped24
UpgradeSpell18
VersionSync68
VoiceEvent132
VoiceEventDone164
VolumeMuted169
WaypointAck120
WaypointGroup121
WaypointGroupAtSpeed122
WorldEvent170

Against 0.9.25.21–0.9.25.23

Where a build from 0.9.25.24 up to, not including, 0.9.25.36 differs from one from 0.9.25.21 up to, not including, 0.9.25.24. Anything not named here is the same in both.

In 0.9.25.24–0.9.25.35, not in 0.9.25.21–0.9.25.23

MessageSent byCommandWhat it does
WorldEventserver170 on eventsSay something happened that the whole match is told about

Laid out differently

  • Camera
    • lookAtX is in 0.9.25.24–0.9.25.35 (f32) at the start, and not in 0.9.25.21–0.9.25.23.
    • lookAtY is in 0.9.25.24–0.9.25.35 (f32), after lookAtX, and not in 0.9.25.21–0.9.25.23.
    • lookAtZ is in 0.9.25.24–0.9.25.35 (f32), after lookAtY, and not in 0.9.25.21–0.9.25.23.
    • atX is in 0.9.25.21–0.9.25.23 and not in 0.9.25.24–0.9.25.35.
    • atY is in 0.9.25.21–0.9.25.23 and not in 0.9.25.24–0.9.25.35.
    • atZ is in 0.9.25.21–0.9.25.23 and not in 0.9.25.24–0.9.25.35.
    • facingX is in 0.9.25.21–0.9.25.23 and not in 0.9.25.24–0.9.25.35.
    • facingY is in 0.9.25.21–0.9.25.23 and not in 0.9.25.24–0.9.25.35.
    • facingZ is in 0.9.25.21–0.9.25.23 and not in 0.9.25.24–0.9.25.35.
  • Damage
    • how names bit 7 sound in 0.9.25.21–0.9.25.23 and unused in 0.9.25.24–0.9.25.35.

Chapters

  • In the transport chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client asks for 7 channels.
  • In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A region id of 0 names no region: given a RegionAdded carrying 0, a client gives the region an id of its own, its own node in the top byte and a count below it, which no message from a server can name.
  • In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: Registration pairs each player id with a client id: a server answers a client’s Register with one Registered for every seat.
  • In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A bot’s champion carries 4294967295.
  • In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client that still holds the earlier object gives the net id to the new one, so messages naming it reach the new object, and removing either leaves the id naming neither.
  • In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: Every object a map places carries the identifier its name gives, turrets, navigation points and props among them.
  • In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: | Map | Holds | | –– | ———————————————————————————————————————————————————————————————————————————–– | | 1, 2 | the six Barracks names, HQ_T1, HQ_T2, orderShop01, chaosShop01, the six spawn points named __P_…, and turrets named Turret_T1_… and Turret_T2_…, Turret_OrderTurretShrine and Turret_ChaosTurretShrine among them | | 3 | Barracks_T1_C1, Barracks_T2_C1, HQ_T1, HQ_T2, OrderShop01, ChaosShop01, ____P_Chaos_Spawn_Barracks__C01, and turrets, Turret_T1_C_08 among them |
  • In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: CreateTurret gives a net id to a turret the map already holds, matched by name.
  • In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: CreateTurret matches a turret’s name without regard to case, and does nothing where the map holds no turret of that name.
  • In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client removes a nexus about 4 seconds after BuildingDied names it, and can fail as it does.
  • In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client sends a WaypointGroup’s WaypointAck before it reads any path, whatever units the paths name.
  • In the ordering chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A server can instead send Replication reliably on the events channel.
  • In the ordering chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: WaypointGroup, WaypointGroupAtSpeed, Path, PathWithSpeed, EnterSight, and UnitStopped and SpellCastAnswer where they carry one, share one count per unit, from -1.
  • In the ordering chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: Nothing answers a view report: a client sends its latest report again, twice the round trip time plus 1/30 of a second apart, for as long as the match runs.
  • In the ordering chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client also answers each Path and PathWithSpeed, taken or not, with a WaypointAck carrying its syncId.
  • In the space chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A champion faces as its map’s table of spawn positions says (see CreateChampion).
  • In the space chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client has data for maps 1, 2 and 3.
  • In the time chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client’s match clock does not run until the first ClockSync arrives, which sets it.
  • In the time chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: GameSpeed sets the pace of the match clock, and a hold sets the pace to 0 until play resumes.
  • In the time chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client runs no clock but the match clock, and takes whatever speed GameSpeed gives.
  • In the time chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A GameSpeed that arrives during a hold sets the match clock running again at once.
  • In the values chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A cast’s slot also takes 64 to 70, for a basic attack.
  • In the values chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A champion’s own book ends at slot 44.
  • In the values chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A champion’s inventory ends at slot 36, and a player sees and uses only slots 0 to 5.
  • In the data chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: The client has maps 1, 2 and 3.
  • In the data chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: CreateTurret names a building by its name alone, compared without regard to case, and one naming no building does nothing.
  • In the data chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A name’s opening says what the object is, the first match winning and a minion spawner’s tested before Barracks: Turret a turret, Barracks an inhibitor, HQ_ a nexus.
  • In the data chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A champion begins at its side’s spawn point moved by an offset from DATA/Characters/HeroSpawnOffsets.inibin, read from the section Order<n> or Chaos<n> under the keys Pos<i> and Facing<i>, where i is one more than CreateChampion’s spawn index.
  • In the data chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: Map 3 alone adds an Items.inibin.
  • In the joining chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: Any whitespace separates the words of the fourth argument.
  • In the joining chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client waits 30 seconds for the answer naming its own player id.
  • In the joining chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: VersionSync names the map to load and everyone at the match.
  • In the joining chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client writes zero where its player id goes in LoadingProgress.
  • In the joining chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A server MUST put the seat’s player id in SeatLoadProgress: the loading screen shows a seat’s card from the VersionSync seat with that id.
  • In the joining chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client answers a batch as soon as it arrives, within the run or not, and never answers one naming a unit it does not hold.
  • In the joining chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client whose connection drops before play begins ends rather than connecting again.
  • In the vision chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: EnterSight states where the unit stands or which path it walks, and nothing of its looks, shields, health or resource.
  • In the vision chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: GoldGained naming the client’s own champion, with an amount above 0 and a source the client holds, shows the gold over the source.
  • In the vision chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: Any other GoldGained shows the gold gained or lost over the unit it names, whichever unit that is.
  • In the vision chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: LevelUp shows its effect over any unit the client can see.
  • In the movement chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A unit coming into sight while standing carries its place and facing in EnterSight instead.
  • In the movement chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A sending end MUST NOT send a movement with no points; a receiving end refuses it.
  • In the movement chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client reads nothing after a refused movement in its group, and still answers the group.
  • In the movement chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client takes a WaypointGroup or a WaypointGroupAtSpeed on channels 2, 3 and 4 alike.
  • In the movement chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client sends the WaypointAck before reading any movement in the group, and lists no units in it.
  • In the replication chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: The groups follow in the order 0 to 4, and nothing gives a group’s length: each value is four bytes, so a group takes four bytes for its set of values and four for each bit that set has set.
  • In the replication chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A value that says yes or no is an integer, 1 for yes and 0 for no.
  • In the replication chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A prop answers to no table, and a client takes nothing a batch carries for one.
  • In the replication chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: The building table is the same on every map.
  • In the replication chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: Each row also gives the type a value is written in.
  • In the replication chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: ## A champion | Group | Bits | Value | Type | | —– | –––– | ———————————————————————————————–– | —– | | 0 | 0 | Experience | float | | 0 | 1 | Gold in hand | float | | 0 | 2 to 3 | Which slots can be cast from: the champion’s own, then the second set | u32 | | 0 | 4 to 7 | What the spell in slots 0 to 3 costs | float | | 0 | 8 to 11 | What the spell in slots 41 to 44 costs | float | | 0 | 12 to 13 | What the spell in slots 0 and 1 of the second set costs | float | | 1 | 0 to 1 | Health and resource as they stand | float | | 1 | 2 to 3 | Health and resource at their greatest | float | | 1 | 4 | What the champion is doing, as a set of bits | u32 | | 1 | 5 to 8 | Whether it is proof against spells, proof against all harm, targetable, and proof against strikes | u32 | | 2 | 0 to 1 | Whether it is proof against strikes, then against spells, as group 1 bits 8 and 5 | u32 | | 2 | 2 | Damage it deals by striking | float | | 2 | 3 | Damage its spells deal before modifiers | float | | 2 | 4 | How often it turns a blow aside | float | | 2 | 5 | Its size | float | | 2 | 6 | How often it strikes critically | float | | 2 | 7 to 8 | Armour and spell resistance | float | | 2 | 9 to 10 | How fast health and resource return | float | | 2 | 11 | How fast it moves | float | | 2 | 12 | How far it strikes from | float | | 2 | 13 to 14 | Flat and percent modifiers on the damage it strikes with | float | | 2 | 15 to 16 | Flat and percent modifiers on its spells’ damage | float | | 2 | 17 to 18 | Flat and percent reduction of the spell damage it takes | float | | 2 | 19 | A multiplier on how fast it strikes | float | | 2 | 20 | A flat addition to how far it casts | float | | 2 | 21 | A modifier on its cooldowns | float | | 3 | 0 to 1 | A percent and a flat addition to how far it sees | float | | 3 | 2 | Level | u32 | ## A turret | Group | Bits | Value | Type | | —– | –––– | –––––––––––––––––––––––––––– | —– | | 1 | 0 | Damage it deals by striking | float | | 1 | 1 to 2 | Armour and spell resistance | float | | 1 | 3 | How fast it moves | float | | 1 | 4 | A multiplier on how fast it strikes | float | | 1 | 5 | Its size | float | | 1 | 6 to 7 | Flat and percent modifiers on the damage it strikes with | float | | 1 | 8 to 9 | Flat and percent modifiers on its spells’ damage | float | | 1 | 10 to 11 | How fast health and resource return | float | | 1 | 12 to 13 | Health as it stands, then at its greatest | float | | 3 | 0 to 1 | A percent and a flat addition to how far it sees | float | ## A minion, and a unit belonging to no side | Group | Bits | Value | Type | | —– | –––– | ———————————————————————————————–– | —– | | 1 | 0 to 1 | Health as it stands, then at its greatest | float | | 1 | 2 to 3 | Whether it is proof against strikes, then against spells | u32 | | 1 | 4 | What the unit is doing, as a set of bits | u32 | | 1 | 5 to 8 | Whether it is proof against spells, proof against all harm, targetable, and proof against strikes | u32 | | 1 | 9 | Damage it deals by striking | float | | 1 | 10 to 11 | Armour and spell resistance | float | | 1 | 12 | How fast it moves | float | | 1 | 13 | A multiplier on how fast it strikes | float | | 1 | 14 | Its size | float | | 1 | 15 to 16 | Flat and percent modifiers on the damage it strikes with | float | | 1 | 17 to 18 | Flat and percent modifiers on its spells’ damage | float | | 1 | 19 to 20 | How fast health and resource return | float | | 3 | 0 to 1 | A percent and a flat addition to how far it sees | float | ## A building Inhibitors, nexuses and the buildings minions come from share one table.
  • In the replication chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A server grants experience with ExperienceGained and gold with GoldGained.
  • In the match chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client shows the speed GameSpeed sets over its champion.
  • In the match chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: The speed GameSpeed sets takes effect at once: sent during a hold, it ends the hold, and a Resumed after it changes nothing.
  • In the match chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: No unit advances for StatTick.
  • In the match chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client reads nothing from Paused.
  • In the match chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client reads nothing from Resumed.
  • In the match chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client also leaves as one abandoning as its player declines to reconnect or cancels a reconnection under way, and as its player dismisses the notice that it was dropped for being away.
  • In the match chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client shows a notice in chat for PlayerDisconnected.
  • In the match chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client started again for a match in progress knows nothing of it, and joins as at the start: a server takes it through Joining a match from registering to StartGame, with a spawn run that states the field as it stands, and a ClockSync.
  • In the match chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client sends ReconnectedInMatch on every connection it makes, the first included, with a byte that is 0 where the match is in play and 1 otherwise.
  • In the match chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client dropped during play connects again only where its player agrees: for the reason 0 it asks, and on a yes connects again, showing that it is reconnecting until it is back or its player cancels.
  • In the match chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client gives up on a connection where a reliable message it sent goes unacknowledged for 30 seconds, while loading and in play alike.
  • In the combat chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client moves the attacker to the place AttackFrom gives only where it stands more than 400 units from it.
  • In the combat chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: Damage shows a figure for the results that carry one, normal and critical; zero is the result that shows the unit as invulnerable, not a plain hit.
  • In the combat chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: Of the other results of Damage, 1 shows nothing, 2 a dodge and 5 a miss; 3 is critical, and 4 and any above 5 are normal.
  • In the combat chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: TargetHeldChampion marks a unit as attacking the client’s own champion: a client sets the mark only where the message names that champion, and clears it for any other.
  • In the combat chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A server MUST NOT send BuildingDied for the nexus: a client removes the nexus some 4 seconds later while still using it, and fails.
  • In the spells chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A command its player types sends UpgradeSpell without checking anything.
  • In the spells chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: Only a missile that flies straight acts on MissileHits.
  • In the effects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: ParticlesCreated starts sets of particles, each named by its own id.
  • In the shop chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: Opening the shop sends TutorialShopOpened, in any match, except while the shop is locked.
  • In the shop chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client asks only while the shop is not locked, with the champion dead or near a shop of its side.
  • In the shop chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A message that locks other input along with the shop stops the shop opening, but leaves an open shop open and its key on.
  • In the communication chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: Where a VoiceEvent asks for an answer, a client sends VoiceEventDone once it has played the event.
  • In the communication chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client never answers a VoiceEvent it cannot play.
  • In the votes chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client takes SurrenderVoteCalled whenever it arrives, its own champion on the field or not.
  • In the interface chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client sends no Camera while its camera is locked: a server that needs a client’s view reports frees its camera with CameraLockSet.
  • In the interface chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: Camera names one point, the one the view looks at, in place of where the view sits and which way it faces.
  • In the interface chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client ignores CameraLockSet that arrives while it holds its camera itself, and answers nothing.
  • In the interface chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client keeps every lock a message sets or clears, and later input obeys them, but it acts on a lock at once only where the message’s mask is exactly one of 1, 4, 8, 16, 32 or 128.

Only notes

These read the same on the wire, and only their notes change. What each says in 0.9.25.24–0.9.25.35:

  • ClientEvent, event: “Which event, from 0 to 73, and so which fields follow. A value above 73 has no defined effect.”, where 0.9.25.21–0.9.25.23 has “Which event, from 0 to 70, and so which fields follow.”
  • DeathHistory, entries[].event: “Which event, from 0 to 73, and so which fields follow.”, where 0.9.25.21–0.9.25.23 has “Which event, from 0 to 70, and so which fields follow.”

0.9.25.36–1.0.0.24

Client builds from 0.9.25.36 up to, not including, 1.0.0.25. Patch notes: V0.9.25.34.

Build checkedPassedFailedSkippedCommitDate
0.9.25.3610042d10e672026-11-04
Every message of this range (158)
MessageCommand
AfkWarning145
Announcement66
AppearancePopped91
AppearancePushed90
Attack53
AttackFrom54
Autocast40
BotDebug105
BotState107
BotTargets106
BuildingDied73
BuyItem41
Camera59
CameraAck110
CameraBehaviour94
CameraLock60
CameraLockSet127
CastSpell35
ChainTargets103
CharacterSelected15
Chat0
ClientEvent108
ClientFinished17
ClientReady16
ClientVersion67
ClockConvergence76
ClockReply75
ClockSync74
CloseShop146
CooldownSet33
CreateChampion6
CreateNeutral7
CreateTurret8
Damage23
DeathHistory112
DestroyMissile102
EffectAdded37
EffectCount80
EffectRemoved39
EffectReplaced38
EmotePlayed11
EnterLocalSight57
EnterSight55
Exit115
ExperienceGained28
FaceDirection93
FacePosition93
FadeMinions174
FadeRemoved137
FadeTo136
FloatingText30
FogToggled125
GameEnded14
GameSpeed135
GoldGained27
GoldRedirect89
GreyscaleWhenDead170
HudDisabled171
HudHighlighted155
HudHighlightToggled164
InhibitorState65
InputLock147
InputLockToggled124
ItemAdded42
JoinSide100
KillParticle22
LeaveLocalSight58
LeaveSight56
LevelUp47
LoadingProgress113
Loadout83
MapPing25
MatchIdentity111
MinimapHighlighted163
MissileHits161
MissileReport63
MissileState63
MoveCamera130
MovementBounds126
MoveOrder20
NexusIdle173
NexusSkin169
ObjectiveHidden150
ObjectiveReplaced151
ObjectiveShown149
ParticlesCreated21
Path77
PathWithSpeed78
Paused133
PingPlaced26
PlayAnimation9
PlayEmote10
PlayerDisconnected116
QueryStatus3
QueryStatusAnswer4
Reconnected118
ReconnectedInMatch117
RegionAdded86
RegionAttached85
RegionRemoved84
Register0
Registered0
RemoveItem43
RemoveItemAnswer44
Replication128
Respawned72
Resumed134
ResyncEnded119
Revived71
Roster103
SeatChampion101
SeatLoadProgress114
SeatName102
SelectObject61
ShopHighlighted156
SideTextHidden153
SideTextRefreshed154
SideTextShown152
SpawnEnd12
SpawnFromBarracks49
SpawnPet32
SpawnStart5
SpawnUnit87
SpellCastAnswer36
SpellCooldown33
SpellNameChanged172
SpellNumbers166
SpellTargetingChanged132
SpellUpgraded19
StartGame13
StatTick64
StopAnimation88
StopAttack48
SurrenderStatus160
SurrenderVote157
SurrenderVoteCalled158
SwapItemsAnswer46
TargetHeldChampion70
TargetUnit69
TransientAck129
TutorialChatLine165
TutorialPopup143
TutorialPopupClosed144
TutorialShopOpened148
UnitDied34
UnitHighlighted141
UnitHighlightRemoved142
UnitSpoke30
UnitStopped24
UpgradeSpell18
VersionSync68
VoiceEvent131
VoiceEventDone162
VolumeMuted167
WaypointAck120
WaypointGroup121
WaypointGroupAtSpeed122
WorldEvent168

Against 0.9.25.24–0.9.25.35

Where a build from 0.9.25.36 up to, not including, 1.0.0.25 differs from one from 0.9.25.24 up to, not including, 0.9.25.36. Anything not named here is the same in both.

In 0.9.25.36–1.0.0.24, not in 0.9.25.24–0.9.25.35

MessageSent byCommandWhat it does
FadeMinionsserver174 on eventsFade one side’s minions
GreyscaleWhenDeadserver170 on eventsSay whether a client draws the world without colour while its champion is down
HudDisabledserver171 on eventsTake down a client’s interface as the match ends
NexusIdleserver173 on eventsPut each nexus into its idle particles
NexusSkinserver169 on eventsChange how one side’s nexus looks
SpellNameChangedserver172 on eventsPut another spell into a slot of a unit’s that already holds one

In 0.9.25.24–0.9.25.35, not in 0.9.25.36–1.0.0.24

MessageSent byCommand it had
InputLockChangedclient148 on requests
InputLocksFlippedclient124 on requests

Commands

These differ only in their command. Each row is a run of commands moved by the same amount:

Laid out differently

  • AppearancePushed
    • overrideSpells is in 0.9.25.36–1.0.0.24 (u8), after entry, and not in 0.9.25.24–0.9.25.35.

Chapters

  • In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A region id of 0 names no region: given a RegionAdded carrying 0, a client gives the region an id of its own, its own node in the top byte and a count below it, which no message from a server can name.
  • In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: Registration pairs each player id with a client id: a server answers a client’s Register with one Registered for every seat.
  • In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A bot’s champion carries 4294967295.
  • In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: | Map | Holds | | –– | ———————————————————————————————————————————————————————————————————————————–– | | 1, 2 | the six Barracks names, HQ_T1, HQ_T2, orderShop01, chaosShop01, the six spawn points named __P_…, and turrets named Turret_T1_… and Turret_T2_…, Turret_OrderTurretShrine and Turret_ChaosTurretShrine among them | | 3 | Barracks_T1_C1, Barracks_T2_C1, HQ_T1, HQ_T2, OrderShop01, ChaosShop01, ____P_Chaos_Spawn_Barracks__C01, and turrets, Turret_T1_C_08 among them |
  • In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A new SpawnPet for an owner removes that owner’s pet before it.
  • In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A client removes a nexus about 4 seconds after BuildingDied names it, and can fail as it does.
  • In the ordering chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: Nothing answers a view report: a client sends its latest report again, twice the round trip time plus 1/30 of a second apart, for as long as the match runs.
  • In the space chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A client has data for maps 1, 2 and 3.
  • In the time chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A GameSpeed that arrives during a hold sets the match clock running again at once.
  • In the time chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A client takes that moment from its own match clock, once, as its game loop runs.
  • In the values chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A champion’s own book ends at slot 44.
  • In the data chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A path carries its points as they lie in the world, and takes no origin from the ground.
  • In the data chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: The client has maps 1, 2 and 3.
  • In the data chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: Each object’s file is .sco as text or .SCB as binary, and gives its name on its Name= line.
  • In the data chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A name’s opening says what the object is, the first match winning and a minion spawner’s tested before Barracks: Turret a turret, Barracks an inhibitor, HQ_ a nexus.
  • In the joining chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A server MUST put the seat’s player id in SeatLoadProgress: the loading screen shows a seat’s card from the VersionSync seat with that id.
  • In the vision chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: LevelUp shows its effect over any unit the client can see.
  • In the replication chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: ## A champion | Group | Bits | Value | Type | | —– | –––– | ———————————————————————————————–– | —– | | 0 | 0 | Experience | float | | 0 | 1 | Gold in hand | float | | 0 | 2 to 3 | Which slots can be cast from: the champion’s own, then the second set | u32 | | 0 | 4 to 7 | What the spell in slots 0 to 3 costs | float | | 0 | 8 to 11 | What the spell in slots 41 to 44 costs | float | | 0 | 12 to 13 | What the spell in slots 0 and 1 of the second set costs | float | | 1 | 0 to 1 | Health and resource as they stand | float | | 1 | 2 to 3 | Health and resource at their greatest | float | | 1 | 4 | What the champion is doing, as a set of bits | u32 | | 1 | 5 to 8 | Whether it is proof against spells, proof against all harm, targetable, and proof against strikes | u32 | | 2 | 0 to 1 | Whether it is proof against strikes, then against spells, as group 1 bits 8 and 5 | u32 | | 2 | 2 | Damage it deals by striking | float | | 2 | 3 | Damage its spells deal before modifiers | float | | 2 | 4 | How often it turns a blow aside | float | | 2 | 5 | Its size | float | | 2 | 6 | How often it strikes critically | float | | 2 | 7 to 8 | Armour and spell resistance | float | | 2 | 9 to 10 | How fast health and resource return | float | | 2 | 11 | How fast it moves | float | | 2 | 12 | How far it strikes from | float | | 2 | 13 to 14 | Flat and percent modifiers on the damage it strikes with | float | | 2 | 15 to 16 | Flat and percent modifiers on its spells’ damage | float | | 2 | 17 to 18 | Flat and percent reduction of the spell damage it takes | float | | 2 | 19 | A multiplier on how fast it strikes | float | | 2 | 20 | A flat addition to how far it casts | float | | 2 | 21 | A modifier on its cooldowns | float | | 3 | 0 to 1 | A percent and a flat addition to how far it sees | float | | 3 | 2 | Level | u32 | ## A turret | Group | Bits | Value | Type | | —– | –––– | –––––––––––––––––––––––––––– | —– | | 1 | 0 | Damage it deals by striking | float | | 1 | 1 to 2 | Armour and spell resistance | float | | 1 | 3 | How fast it moves | float | | 1 | 4 | A multiplier on how fast it strikes | float | | 1 | 5 | Its size | float | | 1 | 6 to 7 | Flat and percent modifiers on the damage it strikes with | float | | 1 | 8 to 9 | Flat and percent modifiers on its spells’ damage | float | | 1 | 10 to 11 | How fast health and resource return | float | | 1 | 12 to 13 | Health as it stands, then at its greatest | float | | 3 | 0 to 1 | A percent and a flat addition to how far it sees | float | ## A minion, and a unit belonging to no side | Group | Bits | Value | Type | | —– | –––– | ———————————————————————————————–– | —– | | 1 | 0 to 1 | Health as it stands, then at its greatest | float | | 1 | 2 to 3 | Whether it is proof against strikes, then against spells | u32 | | 1 | 4 | What the unit is doing, as a set of bits | u32 | | 1 | 5 to 8 | Whether it is proof against spells, proof against all harm, targetable, and proof against strikes | u32 | | 1 | 9 | Damage it deals by striking | float | | 1 | 10 to 11 | Armour and spell resistance | float | | 1 | 12 | How fast it moves | float | | 1 | 13 | A multiplier on how fast it strikes | float | | 1 | 14 | Its size | float | | 1 | 15 to 16 | Flat and percent modifiers on the damage it strikes with | float | | 1 | 17 to 18 | Flat and percent modifiers on its spells’ damage | float | | 1 | 19 to 20 | How fast health and resource return | float | | 3 | 0 to 1 | A percent and a flat addition to how far it sees | float | ## A building Inhibitors, nexuses and the buildings minions come from share one table.
  • In the match chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: No unit advances for StatTick.
  • In the match chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A client that receives GameEnded while still loading takes it as in play: it records the result and sends ClientFinished.
  • In the combat chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A server MUST NOT send BuildingDied for the nexus: a client removes the nexus some 4 seconds later while still using it, and fails.
  • In the spells chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A client still casts from a casting record whose length disagrees with its count of targets.
  • In the votes chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A client takes SurrenderVoteCalled whenever it arrives, its own champion on the field or not.
  • In the interface chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A client locks and unlocks its own input too, and tells the server each time: InputLocksFlipped for the locks it flipped, as when a camera move a script drives starts and ends, and InputLockChanged for the locks it set or cleared.

Only notes

These read the same on the wire, and only their notes change. What each says in 0.9.25.36–1.0.0.24:

  • BuildingDied, its layout: no note, where 0.9.25.24–0.9.25.35 has “A server sends it for no nexus. A client takes a building it names away four seconds later, and a nexus it takes away leaves the client failing at its next game event. An inhibitor stays: a client plays its destruction and raises a game event carrying attacker. A nexus falls with GameEnded.”
  • BuildingDied, attacker: “The unit that destroyed it. A client reads nothing here.”, where 0.9.25.24–0.9.25.35 has “The unit that destroyed it. Only an inhibitor reads it; a client reads nothing here for any other building.”
  • ChainTargets, its layout: “Where the client already holds the missile, the missile takes the list; otherwise the list waits for the caster’s next chain missile.”, where 0.9.25.24–0.9.25.35 has “Where the client already holds the missile, the missile takes the list, and so does the caster’s current cast; otherwise the list waits for the caster’s next chain missile.”
  • ChainTargets, count: “How many of the slots are used, 0 to 32; 0 clears every target the client holds, and a count below zero names no targets and clears nothing. A count above 32 has no defined effect.”, where 0.9.25.24–0.9.25.35 has “How many of the slots are used, 0 to 32; 0 or less leaves the targets the client holds as they are. A client sets no bound, and more than 32 has no defined effect.”
  • ChainTargets, targets: “Always 32 slots; those past count have no effect. A slot naming a unit the client does not know is left empty.”, where 0.9.25.24–0.9.25.35 has “Always 32 slots; those past count have no effect.”

Index of messages

MessageSent bySystemRanges
AfkWarningserverinterface0.9.22.14–1.0.0.24
Announcementserverinterface0.8.13.26–1.0.0.24
AppearancePoppedservereffects0.8.13.26–1.0.0.24
AppearancePushedservereffects0.8.13.26–1.0.0.24
Attackservercombat0.8.13.26–1.0.0.24
AttackFromservercombat0.8.13.26–1.0.0.24
Autocastserverspells0.8.13.26–1.0.0.24
BotDebugserverunits0.9.22.14–1.0.0.24
BotStateserverunits0.8.13.26–1.0.0.24
BotTargetsserverunits0.8.13.26–1.0.0.24
BuildingDiedservercombat0.8.13.26–1.0.0.24
BuyItemclientshop0.8.13.26–1.0.0.24
Cameraclientinterface0.8.13.26–1.0.0.24
CameraAckserverinterface0.8.13.26–1.0.0.24
CameraBehaviourserverinterface0.8.13.26–1.0.0.24
CameraLockclientinterface0.8.13.26–1.0.0.24
CameraLockSetserverinterface0.9.22.14–1.0.0.24
CastSpellclientspells0.8.13.26–1.0.0.24
ChainTargetsserverspells0.8.13.26–1.0.0.24
CharacterSelectedclientjoining0.8.13.26–1.0.0.24
Chatbothcommunication0.8.13.26–1.0.0.24
ClientEventserverobjectives0.8.13.26–1.0.0.24
ClientFinishedclientmatch0.8.13.26–1.0.0.24
ClientReadyclientjoining0.8.13.26–1.0.0.24
ClientVersionclientjoining0.8.13.26–1.0.0.24
ClockConvergenceservermatch0.8.13.26–1.0.0.24
ClockReplyclientmatch0.8.13.26–1.0.0.24
ClockSyncservermatch0.8.13.26–1.0.0.24
CloseShopservershop0.9.22.14–1.0.0.24
CooldownSetclientspells0.8.13.26–1.0.0.24
CreateChampionserverunits0.8.13.26–1.0.0.24
CreateNeutralserverunits0.8.13.26–1.0.0.24
CreateTurretserverunits0.8.13.26–1.0.0.24
Damageservercombat0.8.13.26–1.0.0.24
DeathHistoryservercombat0.9.22.14–1.0.0.24
DestroyMissileserverspells0.8.13.26–1.0.0.24
EffectAddedservereffects0.8.13.26–1.0.0.24
EffectCountservereffects0.8.13.26–1.0.0.24
EffectRemovedservereffects0.8.13.26–1.0.0.24
EffectReplacedservereffects0.8.13.26–1.0.0.24
EmotePlayedservercommunication0.8.13.26–1.0.0.24
EnterLocalSightservervision0.8.13.26–1.0.0.24
EnterSightservervision0.8.13.26–1.0.0.24
Exitclientmatch0.9.22.14–1.0.0.24
ExperienceGainedserverreplication0.8.13.26–1.0.0.24
FaceDirectionservermovement0.8.13.26–1.0.0.24
FacePositionclientmovement0.8.13.26–1.0.0.24
FadeMinionsservereffects0.9.25.36–1.0.0.24
FadeRemovedservereffects0.9.22.14–1.0.0.24
FadeToservereffects0.9.22.14–1.0.0.24
FloatingTextserverinterface0.8.13.26–1.0.0.24
FogToggledservervision0.9.22.14–1.0.0.24
GameEndedservermatch0.8.13.26–1.0.0.24
GameSpeedservermatch0.9.22.14–1.0.0.24
GoldGainedserverreplication0.8.13.26–1.0.0.24
GoldRedirectserverreplication0.8.13.26–1.0.0.24
GreyscaleWhenDeadservercombat0.9.25.36–1.0.0.24
HudDisabledserverinterface0.9.25.36–1.0.0.24
HudHighlightedserverguidance0.9.22.16–1.0.0.24
HudHighlightToggledserverguidance0.9.25.21–1.0.0.24
InhibitorStateservercombat0.8.13.26–1.0.0.24
InputLockserverinterface0.9.22.16–1.0.0.24
InputLockChangedclientinterface0.9.22.16–0.9.25.35
InputLocksFlippedclientinterface0.9.22.14–0.9.25.35
InputLockToggledserverinterface0.9.22.14–1.0.0.24
ItemAddedservershop0.8.13.26–1.0.0.24
JoinSideclientjoining0.9.22.14–1.0.0.24
KillParticleservereffects0.8.13.26–1.0.0.24
LeaveLocalSightservervision0.8.13.26–1.0.0.24
LeaveSightservervision0.8.13.26–1.0.0.24
LevelUpserverreplication0.8.13.26–1.0.0.24
LoadingProgressclientjoining0.9.22.14–1.0.0.24
Loadoutservershop0.8.13.26–1.0.0.24
MapPingclientcommunication0.8.13.26–1.0.0.24
MatchIdentityserverjoining0.8.13.26–1.0.0.24
MinimapHighlightedserverguidance0.9.25.21–1.0.0.24
MissileHitsserverspells0.9.22.16–1.0.0.24
MissileReportclientspells0.9.22.14–1.0.0.24
MissileStateserverspells0.8.13.26–1.0.0.24
MoveCameraserverinterface0.9.22.14–1.0.0.24
MovementBoundsservermovement0.9.22.14–1.0.0.24
MoveOrderclientmovement0.8.13.26–1.0.0.24
NexusIdleservereffects0.9.25.36–1.0.0.24
NexusSkinservereffects0.9.25.36–1.0.0.24
ObjectiveHiddenserverguidance0.9.22.16–1.0.0.24
ObjectiveReplacedserverguidance0.9.22.16–1.0.0.24
ObjectiveShownserverguidance0.9.22.16–1.0.0.24
ParticlesCreatedservereffects0.8.13.26–1.0.0.24
Pathservermovement0.8.13.26–1.0.0.24
PathWithSpeedservermovement0.8.13.26–1.0.0.24
Pausedservermatch0.9.22.14–1.0.0.24
PingPlacedservercommunication0.8.13.26–1.0.0.24
PlaceTurretserverunits0.8.13.26–0.9.22.13
PlayAnimationservereffects0.8.13.26–1.0.0.24
PlayEmoteclientcommunication0.8.13.26–1.0.0.24
PlayerDisconnectedservermatch0.9.22.14–1.0.0.24
QueryStatusclientjoining0.8.13.26–1.0.0.24
QueryStatusAnswerserverjoining0.8.13.26–1.0.0.24
Reconnectedservermatch0.9.22.14–1.0.0.24
ReconnectedInMatchclientmatch0.9.22.14–1.0.0.24
RegionAddedservervision0.8.13.26–1.0.0.24
RegionAttachedservervision0.8.13.26–1.0.0.24
RegionRemovedservervision0.8.13.26–1.0.0.24
Registerclientjoining0.8.13.26–1.0.0.24
Registeredserverjoining0.8.13.26–1.0.0.24
RemoveItemclientshop0.8.13.26–1.0.0.24
RemoveItemAnswerservershop0.8.13.26–1.0.0.24
Replicationserverreplication0.9.22.14–1.0.0.24
Respawnedservercombat0.8.13.26–1.0.0.24
Resumedservermatch0.9.22.14–1.0.0.24
ResyncEndedserverjoining0.9.22.14–1.0.0.24
Revivedservercombat0.8.13.26–1.0.0.24
Rosterserverjoining0.9.22.14–1.0.0.24
SeatChampionserverjoining0.9.22.14–1.0.0.24
SeatLoadProgressserverjoining0.9.22.14–1.0.0.24
SeatNameserverjoining0.9.22.14–1.0.0.24
SelectObjectclientinterface0.8.13.26–1.0.0.24
ShopHighlightedserverguidance0.9.22.16–1.0.0.24
SideTextHiddenserverguidance0.9.22.16–1.0.0.24
SideTextRefreshedserverguidance0.9.22.16–1.0.0.24
SideTextShownserverguidance0.9.22.16–1.0.0.24
SpawnEndserverjoining0.8.13.26–1.0.0.24
SpawnFromBarracksserverunits0.8.13.26–1.0.0.24
SpawnPetserverunits0.8.13.26–1.0.0.24
SpawnStartserverjoining0.8.13.26–1.0.0.24
SpawnUnitserverunits0.8.13.26–1.0.0.24
SpellCastAnswerserverspells0.8.13.26–1.0.0.24
SpellCooldownserverspells0.8.13.26–1.0.0.24
SpellNameChangedserverspells0.9.25.36–1.0.0.24
SpellNumbersserverspells0.9.25.21–1.0.0.24
SpellTargetingChangedserverspells0.9.22.14–1.0.0.24
SpellUpgradedserverspells0.8.13.26–1.0.0.24
StartGameserverjoining0.8.13.26–1.0.0.24
StatTickserverreplication0.8.13.26–1.0.0.24
StopAnimationservereffects0.8.13.26–1.0.0.24
StopAttackservercombat0.8.13.26–1.0.0.24
SurrenderFailedservervotes0.9.22.16–0.9.25.20
SurrenderStatusservervotes0.9.22.16–1.0.0.24
SurrenderVoteclientvotes0.9.22.16–1.0.0.24
SurrenderVoteCalledservervotes0.9.22.16–1.0.0.24
SwapItemsAnswerservershop0.8.13.26–1.0.0.24
TargetHeldChampionservercombat0.9.22.14–1.0.0.24
TargetUnitservercombat0.8.13.26–1.0.0.24
TransientAckclientreplication0.9.22.14–1.0.0.24
TutorialChatLineserverguidance0.9.25.21–1.0.0.24
TutorialPopupserverguidance0.9.22.14–1.0.0.24
TutorialPopupClosedclientguidance0.9.22.14–1.0.0.24
TutorialShopOpenedclientshop0.9.22.16–1.0.0.24
UnitDiedservercombat0.8.13.26–1.0.0.24
UnitHighlightedserverguidance0.9.22.14–1.0.0.24
UnitHighlightRemovedserverguidance0.9.22.14–1.0.0.24
UnitSpokeclientcommunication0.8.13.26–1.0.0.24
UnitStoppedservermovement0.8.13.26–1.0.0.24
UpgradeSpellclientspells0.8.13.26–1.0.0.24
ValueGroup0serverreplication0.8.13.26–0.9.22.13
ValueGroup1serverreplication0.8.13.26–0.9.22.13
ValueGroup2serverreplication0.8.13.26–0.9.22.13
ValueGroup3serverreplication0.8.13.26–0.9.22.13
VersionSyncserverjoining0.8.13.26–1.0.0.24
VoiceEventservercommunication0.9.22.14–1.0.0.24
VoiceEventDoneclientcommunication0.9.25.21–1.0.0.24
VolumeMutedservercommunication0.9.25.21–1.0.0.24
WaypointAckclientmovement0.9.22.14–1.0.0.24
WaypointGroupservermovement0.9.22.14–1.0.0.24
WaypointGroupAtSpeedservermovement0.9.22.14–1.0.0.24
WorldEventserverobjectives0.9.25.24–1.0.0.24