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

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.

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.

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.

In 1.0.0.130–1.0.0.140

Every answer for its own player id, the first included, has a client send ReconnectedInMatch, saying whether play has yet begun.

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.

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 1.0.0.130–1.0.0.140

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 1.0.0.140

A client writes its own client id where its player id goes in LoadingProgress, in the low four bytes with zeros above.

The loading screen

What a client draws while it loads comes from what it has been sent by then (see the spawn run below for what it takes before CharacterSelected).

A player’s card is built from several messages. Its place on the screen is that seat’s place in the Roster, and its name is that player’s SeatName. The registration answers (Registered) pair each player with a client id, and the latest SeatLoadProgress for that client gives the card its progress and, on the client’s own card only, its ping. The first SeatLoadProgress after the player’s SeatChampion sets the card up: its portrait and the champion’s name, from that SeatChampion’s champion and skin, then everything else from the VersionSync seat whose player id the SeatLoadProgress names. A card with no SeatChampion yet shows a black portrait, and one with no registration or no SeatLoadProgress yet says it is not connected. A later SeatChampion does not change a card already set up.

In 1.0.0.140

A card draws a seat’s icon only where it is 0 or more. A seat is a bot’s where its flags is not zero, whatever its bits, and the card of a bot takes its name from the client’s own name for that bot, not from the seat’s botName. No bit of flags chooses older portrait art.

The spawn run

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

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

In 1.0.0.138–3.1.0.0

A turret’s CreateTurret can come on its own or inside the EnterSight that brings the turret into view.

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.

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 1.0.0.130–1.0.0.140

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 1.0.0.130–1.0.0.141

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. The proof is what settles the claim.
proofi64The player id enciphered with the 16-byte key; a plain copy where the client has no key.
Vectors (1)

one-on-1-0-0-141

In 1.0.0.142–3.1.0.0

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. The proof is what settles the claim.
versionu32The build the client runs, with each part written out and run together, so 4.17.0.233 arrives as 41700233 and 4.17.0.267 as 41700267. A client always carries it, and the answer a server carries back repeats the same number.
proofi64The player id enciphered with the 16-byte key; a plain copy where the client has no key.
trailingbytes, 4Arbitrary; it carries no meaning.

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 1.0.0.130–1.0.0.141

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. A watching client takes the champion of the player holding this client id as its own, so a server answers one with a client id no player in the streamed match holds (see Watching a match).
playerIdi64The player the answer is for; a client takes it only where this is its own player id, and reads nothing after it.
Vectors (1)

one-on-1-0-0-141

In 1.0.0.142–3.1.0.0

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

Straight after a request a server sends one answer for every seat, and every one of them carries that request’s build and proof back.

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. A watching client takes the champion of the player holding this client id as its own, so a server answers one with a client id no player in the streamed match holds (see Watching a match).
playerIdi64Who occupies that seat.
versionu32The build the client said it runs. Where the answer follows a request, a server writes the number that request carried, and otherwise the build itself. A client ignores it.
proofbytes, 8The eight bytes a request fills with its proof. Where the answer follows a request, a server writes what that request carried, and otherwise zero. A client ignores them.
trailingbytes, 4Unused; a server writes zero.

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

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

BuildsCommand
1.0.0.130–1.0.0.14323
1.0.0.144–3.1.0.020

No body.

Vectors (1)

one-on-1-0-0-143

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

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

BuildsCommand
1.0.0.130–1.0.0.131141
1.0.0.132–1.0.0.137142
1.0.0.138144
1.0.0.139–1.0.0.143143
1.0.0.144–1.0.0.149137
1.0.0.150–3.1.0.0134
FieldTypeWhat it is
readyu8Whether the server is ready. 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.
Vectors (6)

yes-on-1-0-0-131, yes-on-1-0-0-136, yes-on-1-0-0-138, yes-on-1-0-0-143, yes-on-1-0-0-149, yes-on-1-0-0-154

ClientVersion

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

Definition.

In 1.0.0.130–1.0.0.138

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

BuildsCommand
1.0.0.130–1.0.0.131197
1.0.0.132–1.0.0.134198
1.0.0.135200
1.0.0.136–1.0.0.137198
1.0.0.138200
FieldTypeWhat it is
clockf32The client’s own clock as it sends this, in seconds.
clientIdu32The client id of the client reporting.
texttext, 256 bytesThe build, as text. The text ends at a zero byte.
Vectors (5)

one-on-1-0-0-131, one-on-1-0-0-134, one-on-1-0-0-135, one-on-1-0-0-136, one-on-1-0-0-138

In 1.0.0.139–1.0.0.140

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

A client does not send it while watching a match.

FieldTypeWhat it is
clockf32The client’s own clock as it sends this, in seconds.
clientIdu32The client id of the client reporting.
texttext, 256 bytesThe build as text: a fixed word, the build number, then the build type in square brackets. The text ends at a zero byte.
Vectors (1)

one-on-1-0-0-140

In 1.0.0.141–1.0.0.144

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

BuildsCommand
1.0.0.141–1.0.0.143201
1.0.0.144189
FieldTypeWhat it is
clockf32The client’s own clock as it sends this, in seconds.
clientIdu32The client id of the client reporting.
texttext, 256 bytesThe build, as text. The text ends at a zero byte.
Vectors (2)

one-on-1-0-0-143, one-on-1-0-0-144

In 1.0.0.145–3.1.0.0

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

BuildsCommand
1.0.0.145–1.0.0.149189
1.0.0.150–3.1.0.0186
FieldTypeWhat it is
clientIdu32The client id of the client reporting.
texttext, 256 bytesThe build, as text. The text ends at a zero byte.
Vectors (2)

one-on-1-0-0-149, one-on-1-0-0-154

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 1.0.0.130–1.0.0.139

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

BuildsCommand
1.0.0.13087
1.0.0.13187
1.0.0.132–1.0.0.13788
1.0.0.138–1.0.0.13990

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

FieldTypeWhat it is
agreementu8Nonzero where the build the client runs matches, which a client needs to load; zero has it show both versions and end.
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. Written out in full and padded with zero bytes to the width above.
modetext, 128 bytesWhich way the match is played, written and padded as above.
teamNametext, 25 bytesWhat one side is called where it plays as a standing team, written and padded as above.
teamTagtext, 7 bytesThe short form of that name, written and padded as above.
otherTeamNametext, 25 bytesWhat the other side is called, under the same terms.
otherTeamTagtext, 7 bytesThe short form of that one.
metricsHosttext, 1024 bytesWhere a client reports figures about the match, written and padded as above.
metricsPathtext, 1024 bytesWhat it asks for there, written and padded as above.
metricsPortu16Which port it reaches that at.
reporting1-byte bits
reporting.reportsToFilebit 0Set to have a client also write its reports to a file of its own.
reporting.unusedbit 1 to 7Unused; a server writes zero.
Vectors (4)

one-on-1-0-0-130, one-on-1-0-0-131, one-on-1-0-0-136, one-on-1-0-0-139

In 1.0.0.140–1.0.0.143

Command 90 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
agreementu81 has a client load. 0 has it show both versions and end; any value from 2 to 255 also has it end, without showing them.
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. Written out in full and padded with zero bytes to the width above.
modetext, 128 bytesWhich way the match is played, written and padded as above.
teamNametext, 25 bytesWhat one side is called where it plays as a standing team, written and padded as above.
teamTagtext, 7 bytesThe short form of that name, written and padded as above.
otherTeamNametext, 25 bytesWhat the other side is called, under the same terms.
otherTeamTagtext, 7 bytesThe short form of that one.
metricsHosttext, 1024 bytesWhere a client reports figures about the match, written and padded as above.
metricsPathtext, 1024 bytesWhat it asks for there, written and padded as above.
metricsPortu16Which port it reaches that at.
reporting1-byte bits
reporting.reportsToFilebit 0Set to have a client also write its reports to a file of its own.
reporting.matchedbit 1Set to hide all chat: a client refuses to send a line to all players and shows a notice instead, a different one where it is watching the match.
reporting.unusedbit 2 to 7Unused; a server writes zero.
Vectors (1)

one-on-1-0-0-143

In 1.0.0.144

Command 84 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 build the client runs matches, which a client needs to load; zero has it show both versions and end.
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. Written out in full and padded with zero bytes to the width above.
modetext, 128 bytesWhich way the match is played, written and padded as above.
teamNametext, 25 bytesWhat one side is called where it plays as a standing team, written and padded as above.
teamTagtext, 7 bytesThe short form of that name, written and padded as above.
otherTeamNametext, 25 bytesWhat the other side is called, under the same terms.
otherTeamTagtext, 7 bytesThe short form of that one.
metricsHosttext, 1024 bytesWhere a client reports figures about the match, written and padded as above.
metricsPathtext, 1024 bytesWhat it asks for there, written and padded as above.
metricsPortu16Which port it reaches that at.
reporting1-byte bits
reporting.reportsToFilebit 0Set to have a client also write its reports to a file of its own.
reporting.matchedbit 1Set where the match was put together rather than made by hand.
reporting.unusedbit 2 to 7Unused; a server writes zero.
Vectors (1)

one-on-1-0-0-144

In 1.0.0.145–1.0.0.146

Command 84 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 build the client runs matches, which a client needs to load; zero has it show both versions and end.
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. Written out in full and padded with zero bytes to the width above.
modetext, 128 bytesWhich way the match is played, written and padded as above.
teamNametext, 25 bytesWhat one side is called where it plays as a standing team, written and padded as above.
teamTagtext, 7 bytesThe short form of that name, written and padded as above.
otherTeamNametext, 25 bytesWhat the other side is called, under the same terms.
otherTeamTagtext, 7 bytesThe short form of that one.
metricsHosttext, 1024 bytesWhere a client reports figures about the match, written and padded as above.
metricsPathtext, 1024 bytesWhat it asks for there, written and padded as above.
metricsPortu16Which port it reaches that at.
reporting1-byte bits
reporting.reportsToFilebit 0Set to have a client also write its reports to a file of its own.
reporting.matchedbit 1Set where the match was put together rather than made by hand.
reporting.unusedbit 2 to 7Unused; a server writes zero.
tipi8Which note the client shows before play, as it stands. A client watching a recorded match takes both bytes below as zero.
tipColouri8Kept by the client, which reads nothing more from it.
tipDurationi8Kept by the client, which reads nothing more from it.
loadingTipsu8Nonzero shows the note on the loading screen.
playingTipsu8Nonzero shows it during play, from time to time.
Vectors (1)

one-on-1-0-0-146

In 1.0.0.147–1.0.0.149

Command 84 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
agreement1-byte bits
agreement.buildMatchesbit 0Set where the client’s build is one the server serves.
agreement.reportsToFilebit 1Set to have a client also write its reports to a file of its own.
agreement.matchedbit 2Set where the match was put together rather than made by hand.
agreement.unusedbit 3 to 7Unused; a server writes zero.
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. Written out in full and padded with zero bytes to the width above.
modetext, 128 bytesWhich way the match is played, written and padded as above.
teamNametext, 25 bytesWhat one side is called where it plays as a standing team, written and padded as above.
teamTagtext, 7 bytesThe short form of that name, written and padded as above.
otherTeamNametext, 25 bytesWhat the other side is called, under the same terms.
otherTeamTagtext, 7 bytesThe short form of that one.
metricsHosttext, 1024 bytesWhere a client reports figures about the match, written and padded as above.
metricsPathtext, 1024 bytesWhat it asks for there, written and padded as above.
metricsPortu16Which port it reaches that at.
tipi8Which note the client shows before play, as it stands. A client watching a recorded match takes both bytes below as zero.
tipColouri8Kept by the client, which reads nothing more from it.
tipDurationi8Kept by the client, which reads nothing more from it.
loadingTipsu8Nonzero shows the note on the loading screen.
playingTipsu8Nonzero shows it during play, from time to time.
Vectors (2)

one-on-1-0-0-147, one-on-1-0-0-149

In 1.0.0.150–3.1.0.0

Command 81 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
agreement1-byte bits
agreement.buildMatchesbit 0Set where the client’s build is one the server serves.
agreement.reportsToFilebit 1Set to have a client also write its reports to a file of its own.
agreement.matchedbit 2Set where the match was put together rather than made by hand.
agreement.unusedbit 3 to 7Unused; a server writes zero.
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. Written out in full and padded with zero bytes to the width above.
modetext, 128 bytesWhich way the match is played, written and padded as above.
teamNametext, 25 bytesWhat one side is called where it plays as a standing team, written and padded as above.
teamTagtext, 7 bytesThe short form of that name, written and padded as above.
otherTeamNametext, 25 bytesWhat the other side is called, under the same terms.
otherTeamTagtext, 7 bytesThe short form of that one.
metricsHosttext, 1024 bytesWhere a client reports figures about the match, written and padded as above.
metricsPathtext, 1024 bytesWhat it asks for there, written and padded as above.
metricsPortu16Which port it reaches that at.
tipi8Which note the client shows before play.
tipColouri8Which colouring it shows it in.
tipDurationi8Which display time to hold the note up for, applying only where tips are enabled and shown somewhere. tip, tipColour and tipDuration each select one of the notes, colourings and display times a client defines, tip counted modulo the number of notes. Where a value selects none, or the time is not above zero, a client shows no note.
tipFlags1-byte bitsHow the note is shown. A client sends these four bytes back in ClientReady, as it has corrected them.
tipFlags.enabledbit 0Set where there is a note. A client shows the note only where this and loadingScreen or inGame are set, and shows none where tip, tipColour or tipDuration names nothing.
tipFlags.replaybit 1Of no effect; a client clears it, with enabled, while playing a replay.
tipFlags.loadingScreenbit 2Set to show the note on the loading screen.
tipFlags.inGamebit 3Set to show the note during play, in a box on the screen.
tipFlags.cyclebit 4Set to have the box during play show every note in turn.
tipFlags.unusedbit 5 to 7Unused; a server writes zero.
Vectors (2)

one-on-1-0-0-150, one-on-1-0-0-154

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 1.0.0.130–1.0.0.146

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

FieldTypeWhat it is
paddingbytes, 3Never written by a client.
clientIdu32The client id of the client asking.
sideu32The side it asks for.
Vectors (1)

one-on-1-0-0-146

In 1.0.0.147–3.1.0.0

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

FieldTypeWhat it is
clientIdu32The client id of the client asking.
sideu32The side it asks for.

Roster

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

Definition.

In 1.0.0.130–1.0.0.146

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

FieldTypeWhat it is
paddingbytes, 3Unused; a client reads nothing here.
sideRoomu32How many seats the first side has room for, and so how many leading places of side a client copies. A server sends at most 24: a client refuses a count above 48 and keeps the one before, and for 25 to 48 copies on past the side’s places into the fields after them.
otherSideRoomu32How many the other has room for, under the same terms.
gapbytes, 4Unused; a client reads nothing here.
side24 × i64The players on one side, twenty four places. A client copies as many leading places as sideRoom gives; the rest hold zero. A place cannot be read on its own, because zero is an identifier a match gives out as well as what an unused place holds. It has a player identifier’s width.
otherSide24 × i64The players on the other, under the same reading, as many as otherSideRoom gives.
sideTakenu32How many of the leading places on the first side carry a player. A client keeps it, and it limits nothing.
otherSideTakenu32How many on the other, under the same terms.
Vectors (1)

one-on-1-0-0-146

In 1.0.0.147–3.1.0.0

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

FieldTypeWhat it is
sideRoomu32How many seats the first side has room for.
otherSideRoomu32How many the other has room for.
side24 × i64The players on one side, twenty four places. The count below says how many of the leading places carry a player; the rest hold zero. A place cannot be read on its own, because zero is an identifier a match gives out as well as what an unused place holds. It has a player identifier’s width.
otherSide24 × i64The players on the other, under the same reading and its own count.
sideTakenu32How many of the leading places on the first side carry a player.
otherSideTakenu32How many on the other.

SeatName

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

Definition.

In 1.0.0.130–1.0.0.146

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

FieldTypeWhat it is
paddingbytes, 7Unused; a client reads nothing here.
playeri64The player this is about. 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: it reads the name up to its 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.
Vectors (1)

one-on-1-0-0-146

In 1.0.0.147–3.1.0.0

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

FieldTypeWhat it is
playeri64The player this is about. It has a player identifier’s width.
skini32Which look the seat’s champion wears.
nameLengthu32How many bytes the name below occupies, counting the byte that ends it.
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 1.0.0.130–1.0.0.146

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

FieldTypeWhat it is
paddingbytes, 7Unused; a client reads nothing here.
playeri64The player this is about. 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.
assettext, sized by assetLength minus 1The name the client loads the champion’s art and sound under. It is not padded.
terminatorbytes, 1A zero byte closing the text, which the length above counts.
Vectors (1)

one-on-1-0-0-146

In 1.0.0.147–3.1.0.0

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

FieldTypeWhat it is
playeri64The player this is about. 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.
assettext, sized by assetLength minus 1The name the client loads the champion’s art and sound under. It 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 1.0.0.130–1.0.0.143

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

FieldTypeWhat it is
clientIdu32The client id of the client reporting.
playerIdi64Who is reporting. A client sends zero.
percentf32How far loading has got, from zero to one hundred.
etaf32How long the client expects still to take, in seconds.
status4-byte bits
status.countbit 0 to 15It rises with each report, not always by one.
status.pingbit 16 to 30Round trip time the client measures, in milliseconds.
status.unusedbit 31Never written by a client.
done1-byte bits
done.loadedbit 0Set in every report whose progress stands at one hundred, and in no other.
done.unusedbit 1 to 7Never written by a client.
Vectors (1)

one-on-1-0-0-143

In 1.0.0.144–1.0.0.146

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

FieldTypeWhat it is
clientIdu32The client id of the client reporting.
playerIdi64Who is reporting. A client sends every bit set, which names nobody.
percentf32How far loading has got, from zero to one hundred.
etaf32How long the client expects still to take, in seconds.
status4-byte bits
status.countbit 0 to 15It rises with each report, not always by one.
status.pingbit 16 to 30Round trip time the client measures, in milliseconds.
status.unusedbit 31Never written by a client.
done1-byte bits
done.loadedbit 0Set in every report whose progress stands at one hundred, and in no other.
done.unusedbit 1 to 7Never written by a client.
Vectors (1)

one-on-1-0-0-146

In 1.0.0.147–3.1.0.0

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

FieldTypeWhat it is
clientIdu32The client id of the client reporting.
playerIdi64Who is reporting. A client sends every bit set, which names nobody.
percentf32How far loading has got, from zero to one hundred.
etaf32How long the client expects still to take, in seconds.
status4-byte bits
status.countbit 0 to 15It rises with each report, not always by one.
status.pingbit 16 to 30Round trip time the client measures, in milliseconds.
status.loadedbit 31Set in every report whose progress stands at one hundred, and in no other.

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 1.0.0.130–1.0.0.133

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

BuildsCommand
1.0.0.130–1.0.0.131157
1.0.0.132–1.0.0.133158
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 bitsCopied with the rest; no reader of it is known.
status.countbit 0 to 15It rises with each report, not always by one.
status.pingbit 16 to 30Round trip time the client measures, in milliseconds.
status.loadedbit 31Set in every report whose progress stands at one hundred, and in no other.
done1-byte bits
done.loadedbit 0Set where the seat has loaded; a client then shows no time left.
done.unusedbit 1 to 7Unused; a server writes zero.
Vectors (2)

one-on-1-0-0-131, one-on-1-0-0-133

In 1.0.0.134–3.1.0.0

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

BuildsCommand
1.0.0.134158
1.0.0.135160
1.0.0.136–1.0.0.137158
1.0.0.138160
1.0.0.139–1.0.0.143159
1.0.0.144–1.0.0.149149
1.0.0.150–3.1.0.0146
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 bits
status.countbit 0 to 15It rises with each report, not always by one.
status.pingbit 16 to 30Round trip time the client measures, in milliseconds.
status.loadedbit 31Set in every report whose progress stands at one hundred, and in no other.
Vectors (7)

one-on-1-0-0-134, one-on-1-0-0-135, one-on-1-0-0-136, one-on-1-0-0-138, one-on-1-0-0-143, one-on-1-0-0-149, one-on-1-0-0-154

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

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

BuildsCommand
1.0.0.130–1.0.0.131101
1.0.0.132–1.0.0.137102
1.0.0.138–1.0.0.143104
1.0.0.144–1.0.0.14998
1.0.0.150–3.1.0.095
FieldTypeWhat it is
botsOnOneSideu8How many bots play on side 100. A client adds it to that side’s head count, which picks the set of spawn positions and facings it places champions by (CreateChampion’s spawnIndex).
botsOnTheOtheru8The other. It shares the reading above.
Vectors (5)

one-on-1-0-0-131, one-on-1-0-0-136, one-on-1-0-0-143, one-on-1-0-0-149, one-on-1-0-0-154

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

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

BuildsCommand
1.0.0.130–1.0.0.14318
1.0.0.144–3.1.0.017

No body.

Vectors (1)

one-on-1-0-0-143

StartGame

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

Definition.

In 1.0.0.130–1.0.0.131

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

A client ignores it once the match has ended or while it is leaving, and acts on it again where it is repeated.

FieldTypeWhat it is
rules1-byte bits
rules.pausingbit 0Where set, a client announces that pausing is allowed, except while playing a replay. It keeps nothing of it.
rules.unusedbit 1 to 7Unused; a server writes zero.
Vectors (1)

one-on-1-0-0-131

In 1.0.0.132–1.0.0.137

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

A client past spawning ignores it.

FieldTypeWhat it is
rules1-byte bits
rules.pausingbit 0Set where holding the match is allowed.
rules.unusedbit 1 to 7Unused; a server writes zero.
Vectors (1)

one-on-1-0-0-136

In 1.0.0.138–1.0.0.143

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

A client skips the start only once the match has ended or it is leaving: after GameEnded, Shutdown or an exit. Before, during and after spawning, it starts again.

FieldTypeWhat it is
rules1-byte bits
rules.pausingbit 0Set to have a client that is not watching the match show a notice in its chat that pausing is allowed. A client keeps nothing of it, and it limits no pausing.
rules.unusedbit 1 to 7Unused; a server writes zero.
Vectors (1)

one-on-1-0-0-143

In 1.0.0.144–1.0.0.145

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

A client past spawning ignores it.

FieldTypeWhat it is
rules1-byte bits
rules.pausingbit 0Set where holding the match is allowed.
rules.unusedbit 1 to 7Unused; a server writes zero.
Vectors (1)

one-on-1-0-0-145

In 1.0.0.146

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

A client past spawning ignores it.

FieldTypeWhat it is
rules1-byte bits
rules.pausingbit 0Set where holding the match is allowed.
rules.noticebit 1Set to post a notice in chat as play begins.
rules.unusedbit 2 to 7Unused; a server writes zero.
Vectors (1)

one-on-1-0-0-146

In 1.0.0.147–3.1.0.0

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

BuildsCommand
1.0.0.147–1.0.0.14992
1.0.0.150–3.1.0.089

A client past spawning ignores it.

FieldTypeWhat it is
rules1-byte bits
rules.pausingbit 0Set where holding the match is allowed.
rules.unusedbit 1 to 7Unused; a server writes zero.
Vectors (2)

one-on-1-0-0-149, one-on-1-0-0-154

ClientReady

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

Definition.

In 1.0.0.130–1.0.0.132

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

BuildsCommand
1.0.0.130–1.0.0.13185
1.0.0.13286

No body.

Vectors (2)

one-on-1-0-0-131, one-on-1-0-0-132

In 1.0.0.133–1.0.0.137

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

FieldTypeWhat it is
maskedStatusu32It varies from client to client; a server ignores it.
masku32A random value the client picks to mask the one above.
Vectors (1)

one-on-1-0-0-136

In 1.0.0.138–1.0.0.143

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

It comes unprompted, before any start of play reaches the client.

FieldTypeWhat it is
maskedStatusu32A status, masked. Taken by exclusive or with mask and with the client’s own champion id, it gives 262917615 where the client’s check of itself found a fault, and any other value otherwise. While watching a match, a client leaves this and mask unset, so they carry no meaning.
masku32A random value the client picks to mask the one above.
Vectors (1)

one-on-1-0-0-143

In 1.0.0.144

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

FieldTypeWhat it is
maskedStatusu32It varies from client to client; a server ignores it.
masku32A random value the client picks to mask the one above.
Vectors (1)

one-on-1-0-0-144

In 1.0.0.145–1.0.0.149

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

The tip fields carry VersionSync’s tip bytes, each one outside its valid range negated (0 as -128), and tips cleared where any is. Playing a replay, a client sends all four as zero.

FieldTypeWhat it is
maskedStatusu32It varies from client to client; a server ignores it.
masku32A random value the client picks to mask the one above.
tipChosenu8Which tip the client is set to show.
tipColouru8How it is coloured.
tipDurationu8How long it stays, as an entry among the display times in the client’s own settings rather than a length of time.
loadingTipsu8As VersionSync gave it.
playingTipsu8As VersionSync gave it.
Vectors (1)

one-on-1-0-0-149

In 1.0.0.150–3.1.0.0

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

The tip fields carry VersionSync’s tip bytes, each one outside its valid range negated (0 as -128), and tips cleared where any is. Playing a replay, a client sends all four as zero.

FieldTypeWhat it is
maskedStatusu32It varies from client to client; a server ignores it.
masku32A random value the client picks to mask the one above.
tipChosenu8Which tip the client is set to show.
tipColouru8How it is coloured.
tipDurationu8How long it stays, as an entry among the display times in the client’s own settings rather than a length of time.
settings1-byte bits
settings.tipsbit 0Set while tips are wanted at all.
settings.reportingbit 1Set while the client reports on itself.
settings.loadingTipsbit 2Set while tips are wanted while loading.
settings.playingTipsbit 3Set while tips are wanted during play.
settings.debugbit 4Set while the client runs in a debugging state.
settings.unusedbit 5 to 7A client returns them as the server sent them.
Vectors (1)

one-on-1-0-0-154

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

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

BuildsCommand
1.0.0.130–1.0.0.131198
1.0.0.132–1.0.0.134199
1.0.0.135201
1.0.0.136–1.0.0.137199
1.0.0.138201
1.0.0.139–1.0.0.140200
1.0.0.141–1.0.0.143202
1.0.0.144–1.0.0.149190
1.0.0.150–3.1.0.0187

No body.

Vectors (9)

one-on-1-0-0-131, one-on-1-0-0-134, one-on-1-0-0-135, one-on-1-0-0-136, one-on-1-0-0-138, one-on-1-0-0-140, one-on-1-0-0-143, one-on-1-0-0-149, one-on-1-0-0-154

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 1.0.0.130–1.0.0.149

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

BuildsCommand
1.0.0.130–1.0.0.131152
1.0.0.132–1.0.0.134153
1.0.0.135155
1.0.0.136–1.0.0.137153
1.0.0.138155
1.0.0.139–1.0.0.143154
1.0.0.144–1.0.0.149146
FieldTypeWhat it is
gamei64The match’s identifier.
nametext, 128 bytesThe player’s name, padded with zero bytes.
Vectors (7)

one-on-1-0-0-131, one-on-1-0-0-134, one-on-1-0-0-135, one-on-1-0-0-136, one-on-1-0-0-138, one-on-1-0-0-143, one-on-1-0-0-149

In 1.0.0.150–3.1.0.0

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

FieldTypeWhat it is
gamei64The match’s identifier.
platformtext, 32 bytesWhich platform the match belongs to, written and padded as above.
nametext, 128 bytesThe player’s name, padded with zero bytes.
Vectors (1)

one-on-1-0-0-154

MatchStarted

What a server sends to set when the match began. The header names no object: it carries zero.

Definition.

In every range of this book

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

BuildsCommand
1.0.0.130–1.0.0.131202
1.0.0.132–1.0.0.134203
1.0.0.135205
1.0.0.136–1.0.0.137203
1.0.0.138205
1.0.0.139–1.0.0.140204
1.0.0.141–1.0.0.143206
1.0.0.144–1.0.0.149194
1.0.0.150–3.1.0.0191
FieldTypeWhat it is
startedAtf32When the match began, as a moment on the match clock, in seconds.
Vectors (9)

one-on-1-0-0-131, one-on-1-0-0-134, one-on-1-0-0-135, one-on-1-0-0-136, one-on-1-0-0-138, one-on-1-0-0-140, one-on-1-0-0-143, one-on-1-0-0-149, one-on-1-0-0-154

ModulePacket

What a client sends to carry data from a module of its own, often a message of its own that the module has taken over. A server need do nothing with it. The header carries zero.

Definition.

In 1.0.0.130–1.0.0.131

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

FieldTypeWhat it is
kindu16999 where the client passed the data through its own transform, 2 where it did not. A client sends both under command 237; a second sender sends 999 under 236. Nothing is sent under 238.
lengthu16How many bytes of the data below carry anything, at most 1024.
databytes, 1024The data, in its first length bytes; a client leaves the rest unwritten.
Vectors (1)

one-on-1-0-0-131

In 1.0.0.132–1.0.0.134

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

FieldTypeWhat it is
kindu16999 where the client passed the data through its own transform, 2 where it did not. A client sends kind 999 under command 237 and kind 2 under 238.
lengthu16How many bytes of the data below carry anything, at most 1024.
databytes, 1024The data, in its first length bytes; a client leaves the rest unwritten.
Vectors (1)

one-on-1-0-0-134

In 1.0.0.135–1.0.0.139

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

BuildsCommand
1.0.0.135235
1.0.0.136–1.0.0.137233
1.0.0.138235
1.0.0.139234
FieldTypeWhat it is
kindu16999 where the client passed the data through its own transform, 2 where it did not.
lengthu16How many bytes of the data below carry anything, at most 1024.
databytes, 1024The data, in its first length bytes; a client leaves the rest unwritten.
Vectors (4)

one-on-1-0-0-135, one-on-1-0-0-136, one-on-1-0-0-138, one-on-1-0-0-139

In 1.0.0.140

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

FieldTypeWhat it is
kindu8What the data is for.
extrau8The first byte of the module’s data from one sender, the command itself from the others; nothing a server needs.
lengthu16How many bytes of data follow; at most 1024.
databytes, sized by lengthData for a module of the client’s own, which the message only carries.
Vectors (1)

one-on-1-0-0-140

In 1.0.0.141–3.1.0.0

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

BuildsCommand
1.0.0.141–1.0.0.143236
1.0.0.144–1.0.0.149223
1.0.0.150–3.1.0.0220
FieldTypeWhat it is
kindu8What the data is for.
lengthu16How many bytes of data follow; at most 1024.
databytes, sized by lengthData for a module of the client’s own, which the message only carries.
Vectors (3)

one-on-1-0-0-143, one-on-1-0-0-149, one-on-1-0-0-154

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 1.0.0.130–1.0.0.142

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

BuildsCommand
1.0.0.130–1.0.0.13173
1.0.0.132–1.0.0.13774
1.0.0.138–1.0.0.14275

No body.

Vectors (3)

one-on-1-0-0-131, one-on-1-0-0-136, one-on-1-0-0-142

StatsRequest

What a client sends about itself. The header names the sender’s champion.

Definition.

In 1.0.0.130–1.0.0.137

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

BuildsCommand
1.0.0.130–1.0.0.13189
1.0.0.132–1.0.0.13790

No body.

Vectors (2)

one-on-1-0-0-131, one-on-1-0-0-136

In 1.0.0.138–1.0.0.143

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

It carries nothing of its own. A client sends it from its score panel.

No body.

Vectors (1)

one-on-1-0-0-143

In 1.0.0.144–3.1.0.0

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

BuildsCommand
1.0.0.144–1.0.0.14986
1.0.0.150–3.1.0.083

No body.

Vectors (2)

one-on-1-0-0-149, one-on-1-0-0-154