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.
In 3.01–3.10
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
.repanywhere plays a replay rather than connecting.
In 3.10
Whitespace separates a client’s arguments, and double quotes group words into one. A client given fewer than four arguments ends, unless its one argument names a replay.
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 3.10–3.15
The first answer for a client id stands, and a later one for the same client id changes nothing. An answer for its own player id arriving during play has a client send
ReconnectedInMatch.
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.
In 3.01–3.10
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.
In 3.10–3.15
A client loads only where
VersionSyncsetsagreement.buildMatches. With it clear, the client shows its player its own version text beside the one the message carries, and ends.
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 3.10–3.15
A client writes all ones where its player id goes in
LoadingProgress.
In 3.10
The loading screen picks the card a
SeatLoadProgressupdates by the client id it carries, not by its player id.
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.
The spawn run
Once a character is settled, a client sends CharacterSelected, once.
In 3.10–3.15
Until it sends
CharacterSelected, a client drops every message butVersionSync,QueryStatusAnswer,MatchIdentity,SeatLoadProgressandGameEnded, apart from what arrives on the registration and roster channels, and keeps nothing it drops for later. A server MUST NOT send any of the spawn run beforeCharacterSelectedarrives.
A server answers with SpawnStart, states everything on the field as play
opens, and closes the run with SpawnEnd. A run carries:
- for each seat,
CreateChampionfollowed byLoadout; - for each turret, a
CreateTurretand aReplicationbatch of its values; - for each inhibitor and nexus, an
EnterSight, and aReplicationbatch on a map whose buildings replicate (see Replication); - a
RegionAddedfor each region, and aMapPropfor each prop; - at a server’s choice, an
EnterLocalSightfor any of those units.
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.
In 3.01–3.10
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).
In 3.01–3.10
A client sends
ClientReadyas soon asSpawnEndarrives, andStartGamealone moves it into play.
In 3.10
A client whose connection drops before play begins ends rather than connecting again once it knows its own client id, and connects again before then.
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.
In every range of this book
Command 0 on registration, sent by the client, reliable.
| Field | Type | What it is |
|---|---|---|
| leading | bytes, 3 | Arbitrary; it carries no meaning. |
| clientId | u32 | A client writes zero here. |
| playerId | i64 | Who the sender claims to be. The proof is what settles the claim. |
| version | u32 | The 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. |
| proof | i64 | The player id enciphered with the 16-byte key; a plain copy where the client has no key. |
| trailing | bytes, 4 | Arbitrary; 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.
In every range of this book
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.
| Field | Type | What it is |
|---|---|---|
| leading | bytes, 3 | Unused; a server writes zero. |
| clientId | u32 | The 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). |
| playerId | i64 | Who occupies that seat. |
| version | u32 | The 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. |
| proof | bytes, 8 | The 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. |
| trailing | bytes, 4 | Unused; 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.
QueryStatusAnswer
What a server returns when asked whether it is ready. The header names no object: a server writes zero.
In every range of this book
Command 136 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| ready | u8 | Whether 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 (2)
ClientVersion
What a client sends to state which build it is. The header names no object: it carries zero.
In every range of this book
Command 189 on requests, sent by the client, reliable.
| Field | Type | What it is |
|---|---|---|
| clientId | u32 | The client id of the client reporting. |
| text | text, 256 bytes | The build, as text. The text ends at a zero byte. |
Vectors (2)
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.
In 3.01–3.03
Command 83 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.
| Field | Type | What it is |
|---|---|---|
| agreement | 1-byte bits | |
| agreement.buildMatches | bit 0 | Set where the client’s build is one the server serves. |
| agreement.reportsToFile | bit 1 | Set to have a client also write its reports to a file of its own. |
| agreement.matched | bit 2 | Set where the match was put together rather than made by hand. |
| agreement.unused | bit 3 to 7 | Unused; a server writes zero. |
| map | i32 | Which map to load. Space keys the path origins by the same maps. |
| seats | 12 × Seat | Every place at the match, held or empty. |
| build | text, 256 bytes | Which build the server serves. Written out in full and padded with zero bytes to the width above. |
| mode | text, 128 bytes | Which way the match is played, written and padded as above. |
| teamName | text, 25 bytes | What one side is called where it plays as a standing team, written and padded as above. |
| teamTag | text, 7 bytes | The short form of that name, written and padded as above. |
| otherTeamName | text, 25 bytes | What the other side is called, under the same terms. |
| otherTeamTag | text, 7 bytes | The short form of that one. |
| metricsHost | text, 1024 bytes | Where a client reports figures about the match, written and padded as above. |
| metricsPath | text, 1024 bytes | What it asks for there, written and padded as above. |
| metricsPort | u16 | Which port it reaches that at. |
| tip | i8 | Which note the client shows before play. |
| tipColour | i8 | Which colouring it shows it in. |
| tipDuration | i8 | Which 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. |
| tipFlags | 1-byte bits | How the note is shown. A client sends these four bytes back in ClientReady, as it has corrected them. |
| tipFlags.enabled | bit 0 | Set 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.replay | bit 1 | Of no effect; a client clears it, with enabled, while playing a replay. |
| tipFlags.loadingScreen | bit 2 | Set to show the note on the loading screen. |
| tipFlags.inGame | bit 3 | Set to show the note during play, in a box on the screen. |
| tipFlags.cycle | bit 4 | Set to have the box during play show every note in turn. |
| tipFlags.unused | bit 5 to 7 | Unused; a server writes zero. |
Vectors (1)
In 3.04–3.5
Command 83 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.
| Field | Type | What it is |
|---|---|---|
| agreement | 1-byte bits | |
| agreement.buildMatches | bit 0 | Set where the client’s build is one the server serves. |
| agreement.reportsToFile | bit 1 | Set to have a client also write its reports to a file of its own. |
| agreement.matched | bit 2 | Set where the match was put together rather than made by hand. |
| agreement.reportingReady | bit 3 | Set where the reporting settings below are to be used. |
| agreement.unused | bit 4 to 7 | Unused; a server writes zero. |
| map | i32 | Which map to load. Space keys the path origins by the same maps. |
| seats | 12 × Seat | Every place at the match, held or empty. |
| build | text, 256 bytes | Which build the server serves. Written out in full and padded with zero bytes to the width above. |
| mode | text, 128 bytes | Which way the match is played, written and padded as above. |
| teamName | text, 25 bytes | What one side is called where it plays as a standing team, written and padded as above. |
| teamTag | text, 7 bytes | The short form of that name, written and padded as above. |
| otherTeamName | text, 25 bytes | What the other side is called, under the same terms. |
| otherTeamTag | text, 7 bytes | The short form of that one. |
| metricsHost | text, 256 bytes | Where a client reports figures about the match, written and padded as above. |
| metricsPath | text, 256 bytes | What it asks for there, written and padded as above. |
| metricsPort | u16 | Which port it reaches that at. |
| reportingHost | text, 256 bytes | Where a client reports how the match went, written and padded as above. |
| reportingPath | text, 256 bytes | What it asks for there, written and padded as above. |
| reportingPort | u16 | Which port it reaches that at. |
| altReportingHost | text, 256 bytes | A second, test place to report to, written and padded as above. |
| altReportingPath | text, 256 bytes | What it asks for there, written and padded as above. |
| altReportingPort | u16 | Which port it reaches that at. |
| tip | i8 | Which note the client shows before play. |
| tipColour | i8 | Which colouring it shows it in. |
| tipDuration | i8 | Which 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. |
| tipFlags | 1-byte bits | How the note is shown. A client sends these four bytes back in ClientReady, as it has corrected them. |
| tipFlags.enabled | bit 0 | Set 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.replay | bit 1 | Of no effect; a client clears it, with enabled, while playing a replay. |
| tipFlags.loadingScreen | bit 2 | Set to show the note on the loading screen. |
| tipFlags.inGame | bit 3 | Set to show the note during play, in a box on the screen. |
| tipFlags.cycle | bit 4 | Set to have the box during play show every note in turn. |
| tipFlags.unused | bit 5 to 7 | Unused; a server writes zero. |
Vectors (1)
In 3.6
Command 83 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.
| Field | Type | What it is |
|---|---|---|
| agreement | 1-byte bits | |
| agreement.buildMatches | bit 0 | Set where the client’s build is one the server serves. |
| agreement.reportsToFile | bit 1 | Set to have a client also write its reports to a file of its own. |
| agreement.matched | bit 2 | Set where the match was put together rather than made by hand. |
| agreement.reportingReady | bit 3 | Set where the reporting settings below are to be used. |
| agreement.unused | bit 4 to 7 | Unused; a server writes zero. |
| map | i32 | Which map to load. Space keys the path origins by the same maps. |
| seats | 12 × Seat | Every place at the match, held or empty. |
| build | text, 256 bytes | Which build the server serves. Written out in full and padded with zero bytes to the width above. |
| mode | text, 128 bytes | Which way the match is played, written and padded as above. |
| teamName | text, 97 bytes | What one side is called where it plays as a standing team, written and padded as above. |
| teamTag | text, 25 bytes | The short form of that name, written and padded as above. |
| otherTeamName | text, 97 bytes | What the other side is called, under the same terms. |
| otherTeamTag | text, 25 bytes | The short form of that one. |
| metricsHost | text, 256 bytes | Where a client reports figures about the match, written and padded as above. |
| metricsPath | text, 256 bytes | What it asks for there, written and padded as above. |
| metricsPort | u16 | Which port it reaches that at. |
| reportingHost | text, 256 bytes | Where a client reports how the match went, written and padded as above. |
| reportingPath | text, 256 bytes | What it asks for there, written and padded as above. |
| reportingPort | u16 | Which port it reaches that at. |
| altReportingHost | text, 256 bytes | A second, test place to report to, written and padded as above. |
| altReportingPath | text, 256 bytes | What it asks for there, written and padded as above. |
| altReportingPort | u16 | Which port it reaches that at. |
| tip | i8 | Which note the client shows before play. |
| tipColour | i8 | Which colouring it shows it in. |
| tipDuration | i8 | Which 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. |
| tipFlags | 1-byte bits | How the note is shown. A client sends these four bytes back in ClientReady, as it has corrected them. |
| tipFlags.enabled | bit 0 | Set 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.replay | bit 1 | Of no effect; a client clears it, with enabled, while playing a replay. |
| tipFlags.loadingScreen | bit 2 | Set to show the note on the loading screen. |
| tipFlags.inGame | bit 3 | Set to show the note during play, in a box on the screen. |
| tipFlags.cycle | bit 4 | Set to have the box during play show every note in turn. |
| tipFlags.unused | bit 5 to 7 | Unused; a server writes zero. |
| features | 4-byte bits | Which parts of the match are turned on, one bit each. |
| features.altUnitDisplay | bit 0 | Shows units’ health and experience bars and their character display from another set of the client’s data. |
| features.balanceVoteCommands | bit 1 | The chat commands /equalize and /noequalize. |
| features.keyboardDisplay | bit 2 | Shows the match on a keyboard that has a display of its own. |
| features.menuBack | bit 3 | Turns on the client’s newer options and menus. |
| features.unused | bit 4 to 31 | Unused; a server writes zero. |
Vectors (1)
In 3.7
Command 83 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.
| Field | Type | What it is |
|---|---|---|
| agreement | 1-byte bits | |
| agreement.buildMatches | bit 0 | Set where the client’s build is one the server serves. |
| agreement.reportsToFile | bit 1 | Set to have a client also write its reports to a file of its own. |
| agreement.matched | bit 2 | Set where the match was put together rather than made by hand. |
| agreement.reportingReady | bit 3 | Set where the reporting settings below are to be used. |
| agreement.unused | bit 4 to 7 | Unused; a server writes zero. |
| map | i32 | Which map to load. Space keys the path origins by the same maps. |
| seats | 12 × Seat | Every place at the match, held or empty. |
| build | text, 256 bytes | Which build the server serves. Written out in full and padded with zero bytes to the width above. |
| mode | text, 128 bytes | Which way the match is played, written and padded as above. |
| teamName | text, 97 bytes | What one side is called where it plays as a standing team, written and padded as above. |
| teamTag | text, 25 bytes | The short form of that name, written and padded as above. |
| otherTeamName | text, 97 bytes | What the other side is called, under the same terms. |
| otherTeamTag | text, 25 bytes | The short form of that one. |
| metricsHost | text, 256 bytes | Where a client reports figures about the match, written and padded as above. |
| metricsPath | text, 256 bytes | What it asks for there, written and padded as above. |
| metricsPort | u16 | Which port it reaches that at. |
| reportingHost | text, 256 bytes | Where a client reports how the match went, written and padded as above. |
| reportingPath | text, 256 bytes | What it asks for there, written and padded as above. |
| reportingPort | u16 | Which port it reaches that at. |
| altReportingHost | text, 256 bytes | A second, test place to report to, written and padded as above. |
| altReportingPath | text, 256 bytes | What it asks for there, written and padded as above. |
| altReportingPort | u16 | Which port it reaches that at. |
| tip | i8 | Which note the client shows before play. |
| tipColour | i8 | Which colouring it shows it in. |
| tipDuration | i8 | Which 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. |
| tipFlags | 1-byte bits | How the note is shown. A client sends these four bytes back in ClientReady, as it has corrected them. |
| tipFlags.enabled | bit 0 | Set 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.replay | bit 1 | Of no effect; a client clears it, with enabled, while playing a replay. |
| tipFlags.loadingScreen | bit 2 | Set to show the note on the loading screen. |
| tipFlags.inGame | bit 3 | Set to show the note during play, in a box on the screen. |
| tipFlags.cycle | bit 4 | Set to have the box during play show every note in turn. |
| tipFlags.unused | bit 5 to 7 | Unused; a server writes zero. |
| features | 4-byte bits | Which parts of the match are turned on, one bit each. |
| features.altUnitDisplay | bit 0 | Shows units’ health and experience bars and their character display from another set of the client’s data. |
| features.balanceVoteCommands | bit 1 | The chat commands /equalize and /noequalize. |
| features.keyboardDisplay | bit 2 | Shows the match on a keyboard that has a display of its own. |
| features.menuBack | bit 3 | Turns on the client’s newer options and menus. |
| features.wallJumps | bit 4 | Has no effect; a server writes zero. |
| features.audioBackend | bit 5 | Which sound system the client uses; which setting picks which is not recorded. |
| features.unused | bit 6 to 31 | Unused; a server writes zero. |
Vectors (1)
In 3.8
Command 83 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.
| Field | Type | What it is |
|---|---|---|
| agreement | 1-byte bits | |
| agreement.buildMatches | bit 0 | Set where the client’s build is one the server serves. |
| agreement.reportsToFile | bit 1 | Set to have a client also write its reports to a file of its own. |
| agreement.matched | bit 2 | Set where the match was put together rather than made by hand. |
| agreement.reportingReady | bit 3 | Set where the reporting settings below are to be used. |
| agreement.cosmetic | bit 4 | Set to turn on an optional cosmetic effect. |
| agreement.unused | bit 5 to 7 | Unused; a server writes zero. |
| map | i32 | Which map to load. Space keys the path origins by the same maps. |
| seats | 12 × Seat | Every place at the match, held or empty. |
| build | text, 256 bytes | Which build the server serves. Written out in full and padded with zero bytes to the width above. |
| mode | text, 128 bytes | Which way the match is played, written and padded as above. |
| teamName | text, 97 bytes | What one side is called where it plays as a standing team, written and padded as above. |
| teamTag | text, 25 bytes | The short form of that name, written and padded as above. |
| otherTeamName | text, 97 bytes | What the other side is called, under the same terms. |
| otherTeamTag | text, 25 bytes | The short form of that one. |
| metricsHost | text, 256 bytes | Where a client reports figures about the match, written and padded as above. |
| metricsPath | text, 256 bytes | What it asks for there, written and padded as above. |
| metricsPort | u16 | Which port it reaches that at. |
| reportingHost | text, 256 bytes | Where a client reports how the match went, written and padded as above. |
| reportingPath | text, 256 bytes | What it asks for there, written and padded as above. |
| reportingPort | u16 | Which port it reaches that at. |
| altReportingHost | text, 256 bytes | A second, test place to report to, written and padded as above. |
| altReportingPath | text, 256 bytes | What it asks for there, written and padded as above. |
| altReportingPort | u16 | Which port it reaches that at. |
| tip | i8 | Which note the client shows before play. |
| tipColour | i8 | Which colouring it shows it in. |
| tipDuration | i8 | Which 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. |
| tipFlags | 1-byte bits | How the note is shown. A client sends these four bytes back in ClientReady, as it has corrected them. |
| tipFlags.enabled | bit 0 | Set 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.replay | bit 1 | Of no effect; a client clears it, with enabled, while playing a replay. |
| tipFlags.loadingScreen | bit 2 | Set to show the note on the loading screen. |
| tipFlags.inGame | bit 3 | Set to show the note during play, in a box on the screen. |
| tipFlags.cycle | bit 4 | Set to have the box during play show every note in turn. |
| tipFlags.unused | bit 5 to 7 | Unused; a server writes zero. |
| features | 4-byte bits | Which parts of the match are turned on, one bit each. |
| features.altUnitDisplay | bit 0 | Shows units’ health and experience bars and their character display from another set of the client’s data. |
| features.balanceVoteCommands | bit 1 | The chat commands /equalize and /noequalize. |
| features.keyboardDisplay | bit 2 | Shows the match on a keyboard that has a display of its own. |
| features.menuBack | bit 3 | Turns on the client’s newer options and menus. |
| features.wallJumps | bit 4 | Has no effect; a server writes zero. |
| features.audioBackend | bit 5 | Which sound system the client uses; which setting picks which is not recorded. |
| features.animatedCursors | bit 6 | Cursors of several frames move on a frame every 0.15 seconds of play; clear, they show their first frame. |
| features.unused | bit 7 to 31 | Unused; a server writes zero. |
Vectors (1)
In 3.9
Command 83 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.
| Field | Type | What it is |
|---|---|---|
| agreement | 1-byte bits | |
| agreement.buildMatches | bit 0 | Set where the client’s build is one the server serves. |
| agreement.reportsToFile | bit 1 | Set to have a client also write its reports to a file of its own. |
| agreement.matched | bit 2 | Set where the match was put together rather than made by hand. |
| agreement.reportingReady | bit 3 | Set where the reporting settings below are to be used. |
| agreement.cosmetic | bit 4 | Set to turn on an optional cosmetic effect. |
| agreement.unused | bit 5 to 7 | Unused; a server writes zero. |
| map | i32 | Which map to load. Space keys the path origins by the same maps. |
| seats | 12 × Seat | Every place at the match, held or empty. |
| build | text, 256 bytes | Which build the server serves. Written out in full and padded with zero bytes to the width above. |
| mode | text, 128 bytes | Which way the match is played, written and padded as above. |
| teamName | text, 97 bytes | What one side is called where it plays as a standing team, written and padded as above. |
| teamTag | text, 25 bytes | The short form of that name, written and padded as above. |
| otherTeamName | text, 97 bytes | What the other side is called, under the same terms. |
| otherTeamTag | text, 25 bytes | The short form of that one. |
| metricsHost | text, 256 bytes | Where a client reports figures about the match, written and padded as above. |
| metricsPath | text, 256 bytes | What it asks for there, written and padded as above. |
| metricsPort | u16 | Which port it reaches that at. |
| reportingHost | text, 256 bytes | Where a client reports how the match went, written and padded as above. |
| reportingPath | text, 256 bytes | What it asks for there, written and padded as above. |
| reportingPort | u16 | Which port it reaches that at. |
| altReportingHost | text, 256 bytes | A second, test place to report to, written and padded as above. |
| altReportingPath | text, 256 bytes | What it asks for there, written and padded as above. |
| altReportingPort | u16 | Which port it reaches that at. |
| tip | i8 | Which note the client shows before play. |
| tipColour | i8 | Which colouring it shows it in. |
| tipDuration | i8 | Which 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. |
| tipFlags | 1-byte bits | How the note is shown. A client sends these four bytes back in ClientReady, as it has corrected them. |
| tipFlags.enabled | bit 0 | Set 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.replay | bit 1 | Of no effect; a client clears it, with enabled, while playing a replay. |
| tipFlags.loadingScreen | bit 2 | Set to show the note on the loading screen. |
| tipFlags.inGame | bit 3 | Set to show the note during play, in a box on the screen. |
| tipFlags.cycle | bit 4 | Set to have the box during play show every note in turn. |
| tipFlags.unused | bit 5 to 7 | Unused; a server writes zero. |
| features | 4-byte bits | Which parts of the match are turned on, one bit each. |
| features.altUnitDisplay | bit 0 | Shows units’ health and experience bars and their character display from another set of the client’s data. |
| features.balanceVoteCommands | bit 1 | The chat commands /equalize and /noequalize. |
| features.menuBack | bit 2 | With menuBack2, a second key that closes the pause and options menu. Alone, the minimap’s showing of neutral camps follows the player’s settings rather than the minimap’s own. |
| features.missileWarning | bit 3 | A missile coming at the client’s side, or at no one, can show before it leaves the fog where it is near for its speed and heading that way. It also has a client lower a hero’s bounty when the hero kills a minion. |
| features.audioBackend | bit 4 | Which sound system the client uses; which setting picks which is not recorded. |
| features.animatedCursors | bit 5 | Cursors of several frames move on a frame every 0.15 seconds of play; clear, they show their first frame. |
| features.altControls | bit 6 | Some mouse commands are taken by the time since the click before; what that changes on screen is not recorded. |
| features.shopUndo | bit 7 | The shop’s undo; clear, it is never enabled. |
| features.skillshotOutline | bit 8 | While aiming a line spell, the units it would hit are outlined. |
| features.unused | bit 9 to 31 | Unused; a server writes zero. |
Vectors (1)
In 3.10
Command 83 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.
| Field | Type | What it is |
|---|---|---|
| agreement | 1-byte bits | |
| agreement.buildMatches | bit 0 | Set where the client’s build is one the server serves. |
| agreement.reportsToFile | bit 1 | Set to have a client also write its reports to a file of its own. |
| agreement.matched | bit 2 | Set where the match was put together rather than made by hand. |
| agreement.reportingReady | bit 3 | Set where the reporting settings below are to be used. |
| agreement.unused | bit 4 to 7 | Unused; a server writes zero. A client takes the scripted voice-over setting from its own settings. |
| map | i32 | Which map to load. Space keys the path origins by the same maps. |
| seats | 12 × Seat | Every place at the match, held or empty. |
| build | text, 256 bytes | Which build the server serves. Written out in full and padded with zero bytes to the width above. |
| mode | text, 128 bytes | Which way the match is played, written and padded as above. |
| teamName | text, 97 bytes | What one side is called where it plays as a standing team, written and padded as above. |
| teamTag | text, 25 bytes | The short form of that name, written and padded as above. |
| otherTeamName | text, 97 bytes | What the other side is called, under the same terms. |
| otherTeamTag | text, 25 bytes | The short form of that one. |
| metricsHost | text, 256 bytes | Where a client reports figures about the match, written and padded as above. |
| metricsPath | text, 256 bytes | What it asks for there, written and padded as above. |
| metricsPort | u16 | Which port it reaches that at. |
| reportingHost | text, 256 bytes | Where a client reports how the match went, written and padded as above. |
| reportingPath | text, 256 bytes | What it asks for there, written and padded as above. |
| reportingPort | u16 | Which port it reaches that at. |
| altReportingHost | text, 256 bytes | A second, test place to report to, written and padded as above. |
| altReportingPath | text, 256 bytes | What it asks for there, written and padded as above. |
| altReportingPort | u16 | Which port it reaches that at. |
| tip | i8 | Which note the client shows before play. |
| tipColour | i8 | Which colouring it shows it in. |
| tipDuration | i8 | Which 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. |
| tipFlags | 1-byte bits | How the note is shown. A client sends these four bytes back in ClientReady, as it has corrected them. |
| tipFlags.enabled | bit 0 | Set 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.replay | bit 1 | Of no effect; a client clears it, with enabled, while playing a replay. |
| tipFlags.loadingScreen | bit 2 | Set to show the note on the loading screen. |
| tipFlags.inGame | bit 3 | Set to show the note during play, in a box on the screen. |
| tipFlags.cycle | bit 4 | Set to have the box during play show every note in turn. |
| tipFlags.unused | bit 5 to 7 | Unused; a server writes zero. |
| features | 4-byte bits | Which parts of the match are turned on, one bit each. |
| features.altUnitDisplay | bit 0 | Shows units’ health and experience bars and their character display from another set of the client’s data. |
| features.balanceVoteCommands | bit 1 | The chat commands /equalize and /noequalize. |
| features.menuBack | bit 2 | With menuBack2, a second key that closes the pause and options menu. Alone, the minimap’s showing of neutral camps follows the player’s settings rather than the minimap’s own. |
| features.missileWarning | bit 3 | A missile coming at the client’s side, or at no one, can show before it leaves the fog where it is near for its speed and heading that way. It also has a client lower a hero’s bounty when the hero kills a minion. |
| features.audioBackend | bit 4 | Which sound system the client uses; which setting picks which is not recorded. |
| features.animatedCursors | bit 5 | Cursors of several frames move on a frame every 0.15 seconds of play; clear, they show their first frame. |
| features.altControls | bit 6 | Some mouse commands are taken by the time since the click before; what that changes on screen is not recorded. |
| features.shopUndo | bit 7 | The shop’s undo; clear, it is never enabled. |
| features.skillshotOutline | bit 8 | While aiming a line spell, the units it would hit are outlined. |
| features.unused | bit 9 to 31 | Unused; a server writes zero. |
Vectors (1)
In 3.11
Command 83 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.
| Field | Type | What it is |
|---|---|---|
| agreement | 1-byte bits | |
| agreement.buildMatches | bit 0 | Set where the client’s build is one the server serves. |
| agreement.reportsToFile | bit 1 | Set to have a client also write its reports to a file of its own. |
| agreement.matched | bit 2 | Set where the match was put together rather than made by hand. |
| agreement.reportingReady | bit 3 | Set where the reporting settings below are to be used. |
| agreement.unused | bit 4 to 7 | Unused; a server writes zero. A client takes the scripted voice-over setting from its own settings. |
| map | i32 | Which map to load. Space keys the path origins by the same maps. |
| seats | 12 × Seat | Every place at the match, held or empty. |
| build | text, 256 bytes | Which build the server serves. Written out in full and padded with zero bytes to the width above. |
| mode | text, 128 bytes | Which way the match is played, written and padded as above. |
| teamName | text, 97 bytes | What one side is called where it plays as a standing team, written and padded as above. |
| teamTag | text, 25 bytes | The short form of that name, written and padded as above. |
| otherTeamName | text, 97 bytes | What the other side is called, under the same terms. |
| otherTeamTag | text, 25 bytes | The short form of that one. |
| metricsHost | text, 256 bytes | Where a client reports figures about the match, written and padded as above. |
| metricsPath | text, 256 bytes | What it asks for there, written and padded as above. |
| metricsPort | u16 | Which port it reaches that at. |
| reportingHost | text, 256 bytes | Where a client reports how the match went, written and padded as above. |
| reportingPath | text, 256 bytes | What it asks for there, written and padded as above. |
| reportingPort | u16 | Which port it reaches that at. |
| altReportingHost | text, 256 bytes | A second, test place to report to, written and padded as above. |
| altReportingPath | text, 256 bytes | What it asks for there, written and padded as above. |
| altReportingPort | u16 | Which port it reaches that at. |
| tip | i8 | Which note the client shows before play. |
| tipColour | i8 | Which colouring it shows it in. |
| tipDuration | i8 | Which 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. |
| tipFlags | 1-byte bits | How the note is shown. A client sends these four bytes back in ClientReady, as it has corrected them. |
| tipFlags.enabled | bit 0 | Set 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.replay | bit 1 | Of no effect; a client clears it, with enabled, while playing a replay. |
| tipFlags.loadingScreen | bit 2 | Set to show the note on the loading screen. |
| tipFlags.inGame | bit 3 | Set to show the note during play, in a box on the screen. |
| tipFlags.cycle | bit 4 | Set to have the box during play show every note in turn. |
| tipFlags.unused | bit 5 to 7 | Unused; a server writes zero. |
| features | 4-byte bits | Which parts of the match are turned on, one bit each. |
| features.altUnitDisplay | bit 0 | Shows units’ health and experience bars and their character display from another set of the client’s data. |
| features.balanceVoteCommands | bit 1 | The chat commands /equalize and /noequalize. |
| features.menuBack | bit 2 | With menuBack2, a second key that closes the pause and options menu. Alone, the minimap’s showing of neutral camps follows the player’s settings rather than the minimap’s own. |
| features.menuBack2 | bit 3 | Of use only with menuBack. |
| features.missileWarning | bit 4 | A missile coming at the client’s side, or at no one, can show before it leaves the fog where it is near for its speed and heading that way. It also has a client lower a hero’s bounty when the hero kills a minion. |
| features.audioBackend | bit 5 | Which sound system the client uses; which setting picks which is not recorded. |
| features.animatedCursors | bit 6 | Cursors of several frames move on a frame every 0.15 seconds of play; clear, they show their first frame. |
| features.altControls | bit 7 | Some mouse commands are taken by the time since the click before; what that changes on screen is not recorded. |
| features.shopUndo | bit 8 | The shop’s undo; clear, it is never enabled. |
| features.skillshotOutline | bit 9 | While aiming a line spell, the units it would hit are outlined. |
| features.bit10 | bit 10 | Has no effect. |
| features.championIndicator | bit 11 | The mark over the player’s champion, where their own setting also asks for it. |
| features.unused | bit 12 to 31 | Unused; a server writes zero. |
Vectors (1)
In 3.12
Command 83 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.
| Field | Type | What it is |
|---|---|---|
| agreement | 1-byte bits | |
| agreement.buildMatches | bit 0 | Set where the client’s build is one the server serves. |
| agreement.reportsToFile | bit 1 | Set to have a client also write its reports to a file of its own. |
| agreement.matched | bit 2 | Set where the match was put together rather than made by hand. |
| agreement.reportingReady | bit 3 | Set where the reporting settings below are to be used. |
| agreement.unused | bit 4 to 7 | Unused; a server writes zero. A client takes the scripted voice-over setting from its own settings. |
| map | i32 | Which map to load. Space keys the path origins by the same maps. |
| seats | 12 × Seat | Every place at the match, held or empty. |
| build | text, 256 bytes | Which build the server serves. Written out in full and padded with zero bytes to the width above. |
| mode | text, 128 bytes | Which way the match is played, written and padded as above. |
| teamName | text, 97 bytes | What one side is called where it plays as a standing team, written and padded as above. |
| teamTag | text, 25 bytes | The short form of that name, written and padded as above. |
| otherTeamName | text, 97 bytes | What the other side is called, under the same terms. |
| otherTeamTag | text, 25 bytes | The short form of that one. |
| metricsHost | text, 256 bytes | Where a client reports figures about the match, written and padded as above. |
| metricsPath | text, 256 bytes | What it asks for there, written and padded as above. |
| metricsPort | u16 | Which port it reaches that at. |
| reportingHost | text, 256 bytes | Where a client reports how the match went, written and padded as above. |
| reportingPath | text, 256 bytes | What it asks for there, written and padded as above. |
| reportingPort | u16 | Which port it reaches that at. |
| altReportingHost | text, 256 bytes | A second, test place to report to, written and padded as above. |
| altReportingPath | text, 256 bytes | What it asks for there, written and padded as above. |
| altReportingPort | u16 | Which port it reaches that at. |
| tip | i8 | Which note the client shows before play. |
| tipColour | i8 | Which colouring it shows it in. |
| tipDuration | i8 | Which 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. |
| tipFlags | 1-byte bits | How the note is shown. A client sends these four bytes back in ClientReady, as it has corrected them. |
| tipFlags.enabled | bit 0 | Set 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.replay | bit 1 | Of no effect; a client clears it, with enabled, while playing a replay. |
| tipFlags.loadingScreen | bit 2 | Set to show the note on the loading screen. |
| tipFlags.inGame | bit 3 | Set to show the note during play, in a box on the screen. |
| tipFlags.cycle | bit 4 | Set to have the box during play show every note in turn. |
| tipFlags.unused | bit 5 to 7 | Unused; a server writes zero. |
| features | 4-byte bits | Which parts of the match are turned on, one bit each. |
| features.altUnitDisplay | bit 0 | Shows units’ health and experience bars and their character display from another set of the client’s data. |
| features.balanceVoteCommands | bit 1 | The chat commands /equalize and /noequalize. |
| features.menuBack | bit 2 | With menuBack2, a second key that closes the pause and options menu. Alone, the minimap’s showing of neutral camps follows the player’s settings rather than the minimap’s own. |
| features.menuBack2 | bit 3 | Of use only with menuBack. |
| features.missileWarning | bit 4 | A missile coming at the client’s side, or at no one, can show before it leaves the fog where it is near for its speed and heading that way. It also has a client lower a hero’s bounty when the hero kills a minion. |
| features.audioBackend | bit 5 | Which sound system the client uses; which setting picks which is not recorded. |
| features.animatedCursors | bit 6 | Cursors of several frames move on a frame every 0.15 seconds of play; clear, they show their first frame. |
| features.altControls | bit 7 | Some mouse commands are taken by the time since the click before; what that changes on screen is not recorded. |
| features.shopUndo | bit 8 | The shop’s undo; clear, it is never enabled. |
| features.skillshotOutline | bit 9 | While aiming a line spell, the units it would hit are outlined. |
| features.championIndicator | bit 10 | The mark over the player’s champion, where their own setting also asks for it. |
| features.altBounty | bit 11 | Another reckoning of kill and assist gold: kill gold and the assist pool grow with time, a run of assists adds gold, and assists and minion gold shorten a run of deaths. |
| features.waveOrder | bit 12 | Changes the order of the kinds of minion within a wave. |
| features.unused | bit 13 to 31 | Unused; a server writes zero. |
Vectors (1)
In 3.13
Command 83 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.
| Field | Type | What it is |
|---|---|---|
| agreement | 1-byte bits | |
| agreement.buildMatches | bit 0 | Set where the client’s build is one the server serves. |
| agreement.reportsToFile | bit 1 | Set to have a client also write its reports to a file of its own. |
| agreement.matched | bit 2 | Set where the match was put together rather than made by hand. |
| agreement.reportingReady | bit 3 | Set where the reporting settings below are to be used. |
| agreement.unused | bit 4 to 7 | Unused; a server writes zero. A client takes the scripted voice-over setting from its own settings. |
| map | i32 | Which map to load. Space keys the path origins by the same maps. |
| seats | 12 × Seat | Every place at the match, held or empty. |
| build | text, 256 bytes | Which build the server serves. Written out in full and padded with zero bytes to the width above. |
| mode | text, 128 bytes | Which way the match is played, written and padded as above. |
| teamName | text, 97 bytes | What one side is called where it plays as a standing team, written and padded as above. |
| teamTag | text, 25 bytes | The short form of that name, written and padded as above. |
| otherTeamName | text, 97 bytes | What the other side is called, under the same terms. |
| otherTeamTag | text, 25 bytes | The short form of that one. |
| metricsHost | text, 256 bytes | Where a client reports figures about the match, written and padded as above. |
| metricsPath | text, 256 bytes | What it asks for there, written and padded as above. |
| metricsPort | u16 | Which port it reaches that at. |
| reportingHost | text, 256 bytes | Where a client reports how the match went, written and padded as above. |
| reportingPath | text, 256 bytes | What it asks for there, written and padded as above. |
| reportingPort | u16 | Which port it reaches that at. |
| altReportingHost | text, 256 bytes | A second, test place to report to, written and padded as above. |
| altReportingPath | text, 256 bytes | What it asks for there, written and padded as above. |
| altReportingPort | u16 | Which port it reaches that at. |
| tip | i8 | Which note the client shows before play. |
| tipColour | i8 | Which colouring it shows it in. |
| tipDuration | i8 | Which 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. |
| tipFlags | 1-byte bits | How the note is shown. A client sends these four bytes back in ClientReady, as it has corrected them. |
| tipFlags.enabled | bit 0 | Set 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.replay | bit 1 | Of no effect; a client clears it, with enabled, while playing a replay. |
| tipFlags.loadingScreen | bit 2 | Set to show the note on the loading screen. |
| tipFlags.inGame | bit 3 | Set to show the note during play, in a box on the screen. |
| tipFlags.cycle | bit 4 | Set to have the box during play show every note in turn. |
| tipFlags.unused | bit 5 to 7 | Unused; a server writes zero. |
| features | 4-byte bits | Which parts of the match are turned on, one bit each. |
| features.altUnitDisplay | bit 0 | Shows units’ health and experience bars and their character display from another set of the client’s data. |
| features.balanceVoteCommands | bit 1 | The chat commands /equalize and /noequalize. |
| features.menuBack | bit 2 | With menuBack2, a second key that closes the pause and options menu. Alone, the minimap’s showing of neutral camps follows the player’s settings rather than the minimap’s own. |
| features.menuBack2 | bit 3 | Of use only with menuBack. |
| features.quickChat | bit 4 | Quick chat: its keys and its panel. A client given it fails while loading. A server sends it clear. |
| features.missileWarning | bit 5 | A missile coming at the client’s side, or at no one, can show before it leaves the fog where it is near for its speed and heading that way. It also has a client lower a hero’s bounty when the hero kills a minion. |
| features.audioBackend | bit 6 | Which sound system the client uses; which setting picks which is not recorded. |
| features.animatedCursors | bit 7 | Cursors of several frames move on a frame every 0.15 seconds of play; clear, they show their first frame. |
| features.altControls | bit 8 | Some mouse commands are taken by the time since the click before; what that changes on screen is not recorded. |
| features.shopUndo | bit 9 | The shop’s undo; clear, it is never enabled. |
| features.skillshotOutline | bit 10 | While aiming a line spell, the units it would hit are outlined. |
| features.championIndicator | bit 11 | The mark over the player’s champion, where their own setting also asks for it. |
| features.altBounty | bit 12 | Another reckoning of kill and assist gold: kill gold and the assist pool grow with time, a run of assists adds gold, and assists and minion gold shorten a run of deaths. |
| features.waveOrder | bit 13 | Changes the order of the kinds of minion within a wave. |
| features.turretRange | bit 14 | Enemy turrets’ ranges, where the player’s setting also asks for them; clear, they are never drawn. |
| features.unused | bit 15 to 31 | Unused; a server writes zero. |
| disabledItems | 64 × u32 | Items nobody can buy in this match, one place each. A place holds zero where nothing is barred. |
Vectors (1)
In 3.14
Command 83 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.
| Field | Type | What it is |
|---|---|---|
| agreement | 1-byte bits | |
| agreement.buildMatches | bit 0 | Set where the client’s build is one the server serves. |
| agreement.reportsToFile | bit 1 | Set to have a client also write its reports to a file of its own. |
| agreement.matched | bit 2 | Set where the match was put together rather than made by hand. |
| agreement.reportingReady | bit 3 | Set where the reporting settings below are to be used. |
| agreement.unused | bit 4 to 7 | Unused; a server writes zero. A client takes the scripted voice-over setting from its own settings. |
| map | i32 | Which map to load. Space keys the path origins by the same maps. |
| seats | 12 × Seat | Every place at the match, held or empty. |
| build | text, 256 bytes | Which build the server serves. Written out in full and padded with zero bytes to the width above. |
| mode | text, 128 bytes | Which way the match is played, written and padded as above. |
| variants | 2 × string | The variations the match is played under, one place each. A place stands empty where none applies. |
| variantCount | u8 | How many of the places above are filled. |
| teamName | text, 97 bytes | What one side is called where it plays as a standing team, written and padded as above. |
| teamTag | text, 25 bytes | The short form of that name, written and padded as above. |
| otherTeamName | text, 97 bytes | What the other side is called, under the same terms. |
| otherTeamTag | text, 25 bytes | The short form of that one. |
| metricsHost | text, 256 bytes | Where a client reports figures about the match, written and padded as above. |
| metricsPath | text, 256 bytes | What it asks for there, written and padded as above. |
| metricsPort | u16 | Which port it reaches that at. |
| reportingHost | text, 256 bytes | Where a client reports how the match went, written and padded as above. |
| reportingPath | text, 256 bytes | What it asks for there, written and padded as above. |
| reportingPort | u16 | Which port it reaches that at. |
| altReportingHost | text, 256 bytes | A second, test place to report to, written and padded as above. |
| altReportingPath | text, 256 bytes | What it asks for there, written and padded as above. |
| altReportingPort | u16 | Which port it reaches that at. |
| tip | i8 | Which note the client shows before play. |
| tipColour | i8 | Which colouring it shows it in. |
| tipDuration | i8 | Which 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. |
| tipFlags | 1-byte bits | How the note is shown. A client sends these four bytes back in ClientReady, as it has corrected them. |
| tipFlags.enabled | bit 0 | Set 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.replay | bit 1 | Of no effect; a client clears it, with enabled, while playing a replay. |
| tipFlags.loadingScreen | bit 2 | Set to show the note on the loading screen. |
| tipFlags.inGame | bit 3 | Set to show the note during play, in a box on the screen. |
| tipFlags.cycle | bit 4 | Set to have the box during play show every note in turn. |
| tipFlags.unused | bit 5 to 7 | Unused; a server writes zero. |
| features | 4-byte bits | Which parts of the match are turned on, one bit each. |
| features.altUnitDisplay | bit 0 | Shows units’ health and experience bars and their character display from another set of the client’s data. |
| features.balanceVoteCommands | bit 1 | The chat commands /equalize and /noequalize. |
| features.menuBack | bit 2 | With menuBack2, a second key that closes the pause and options menu. Alone, the minimap’s showing of neutral camps follows the player’s settings rather than the minimap’s own. |
| features.menuBack2 | bit 3 | Of use only with menuBack. |
| features.quickChat | bit 4 | Quick chat: its keys and its panel. A client given it fails while loading. A server sends it clear. |
| features.missileWarning | bit 5 | A missile coming at the client’s side, or at no one, can show before it leaves the fog where it is near for its speed and heading that way. It also has a client lower a hero’s bounty when the hero kills a minion. |
| features.audioBackend | bit 6 | Which sound system the client uses; which setting picks which is not recorded. |
| features.animatedCursors | bit 7 | Cursors of several frames move on a frame every 0.15 seconds of play; clear, they show their first frame. |
| features.altControls | bit 8 | Some mouse commands are taken by the time since the click before; what that changes on screen is not recorded. |
| features.shopUndo | bit 9 | The shop’s undo; clear, it is never enabled. |
| features.skillshotOutline | bit 10 | While aiming a line spell, the units it would hit are outlined. |
| features.championIndicator | bit 11 | The mark over the player’s champion, where their own setting also asks for it. |
| features.altBounty | bit 12 | Another reckoning of kill and assist gold: kill gold and the assist pool grow with time, a run of assists adds gold, and assists and minion gold shorten a run of deaths. |
| features.waveOrder | bit 13 | Changes the order of the kinds of minion within a wave. |
| features.turretRange | bit 14 | Enemy turrets’ ranges, where the player’s setting also asks for them; clear, they are never drawn. |
| features.bit14 | bit 15 | Unused; a server writes zero. |
| features.skinParticles | bit 16 | Skin-specific particle effects for units in a skin other than the first. |
| features.bit16 | bit 17 | Unused; a server writes zero. |
| features.hardwareMetrics | bit 18 | A report of hardware and frame rate at the end of the match. |
| features.unused | bit 19 to 31 | Unused; a server writes zero. |
| disabledItems | 64 × u32 | Items nobody can buy in this match, one place each. A place holds zero where nothing is barred. |
Vectors (1)
In 3.15
Command 83 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.
| Field | Type | What it is |
|---|---|---|
| agreement | 1-byte bits | |
| agreement.buildMatches | bit 0 | Set where the client’s build is one the server serves. |
| agreement.reportsToFile | bit 1 | Set to have a client also write its reports to a file of its own. |
| agreement.matched | bit 2 | Set where the match was put together rather than made by hand. |
| agreement.reportingReady | bit 3 | Set where the reporting settings below are to be used. |
| agreement.unused | bit 4 to 7 | Unused; a server writes zero. A client takes the scripted voice-over setting from its own settings. |
| map | i32 | Which map to load. Space keys the path origins by the same maps. |
| seats | 12 × Seat | Every place at the match, held or empty. |
| build | text, 256 bytes | Which build the server serves. Written out in full and padded with zero bytes to the width above. |
| mode | text, 128 bytes | Which way the match is played, written and padded as above. |
| variants | 2 × string | The variations the match is played under, one place each. A place stands empty where none applies. |
| variantCount | u8 | How many of the places above are filled. |
| teamName | text, 97 bytes | What one side is called where it plays as a standing team, written and padded as above. |
| teamTag | text, 25 bytes | The short form of that name, written and padded as above. |
| otherTeamName | text, 97 bytes | What the other side is called, under the same terms. |
| otherTeamTag | text, 25 bytes | The short form of that one. |
| metricsHost | text, 256 bytes | Where a client reports figures about the match, written and padded as above. |
| metricsPath | text, 256 bytes | What it asks for there, written and padded as above. |
| metricsPort | u16 | Which port it reaches that at. |
| reportingHost | text, 256 bytes | Where a client reports how the match went, written and padded as above. |
| reportingPath | text, 256 bytes | What it asks for there, written and padded as above. |
| reportingPort | u16 | Which port it reaches that at. |
| altReportingHost | text, 256 bytes | A second, test place to report to, written and padded as above. |
| altReportingPath | text, 256 bytes | What it asks for there, written and padded as above. |
| altReportingPort | u16 | Which port it reaches that at. |
| tip | i8 | Which note the client shows before play. |
| tipColour | i8 | Which colouring it shows it in. |
| tipDuration | i8 | Which 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. |
| tipFlags | 1-byte bits | How the note is shown. A client sends these four bytes back in ClientReady, as it has corrected them. |
| tipFlags.enabled | bit 0 | Set 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.replay | bit 1 | Of no effect; a client clears it, with enabled, while playing a replay. |
| tipFlags.loadingScreen | bit 2 | Set to show the note on the loading screen. |
| tipFlags.inGame | bit 3 | Set to show the note during play, in a box on the screen. |
| tipFlags.cycle | bit 4 | Set to have the box during play show every note in turn. |
| tipFlags.unused | bit 5 to 7 | Unused; a server writes zero. |
| features | 4-byte bits | Which parts of the match are turned on, one bit each. |
| features.balanceVoteCommands | bit 0 | The chat commands /equalize and /noequalize. |
| features.menuBack | bit 1 | With menuBack2, a second key that closes the pause and options menu. Alone, the minimap’s showing of neutral camps follows the player’s settings rather than the minimap’s own. |
| features.menuBack2 | bit 2 | Of use only with menuBack. |
| features.quickChat | bit 3 | Quick chat: its keys and its panel. A client given it fails while loading. A server sends it clear. |
| features.missileWarning | bit 4 | A missile coming at the client’s side, or at no one, can show before it leaves the fog where it is near for its speed and heading that way. It also has a client lower a hero’s bounty when the hero kills a minion. |
| features.audioBackend | bit 5 | Which sound system the client uses; which setting picks which is not recorded. |
| features.animatedCursors | bit 6 | Cursors of several frames move on a frame every 0.15 seconds of play; clear, they show their first frame. |
| features.altControls | bit 7 | Some mouse commands are taken by the time since the click before; what that changes on screen is not recorded. |
| features.shopUndo | bit 8 | The shop’s undo; clear, it is never enabled. |
| features.skillshotOutline | bit 9 | While aiming a line spell, the units it would hit are outlined. |
| features.championIndicator | bit 10 | The mark over the player’s champion, where their own setting also asks for it. |
| features.altBounty | bit 11 | Another reckoning of kill and assist gold: kill gold and the assist pool grow with time, a run of assists adds gold, and assists and minion gold shorten a run of deaths. |
| features.waveOrder | bit 12 | Changes the order of the kinds of minion within a wave. |
| features.turretRange | bit 13 | Enemy turrets’ ranges, where the player’s setting also asks for them; clear, they are never drawn. |
| features.bit14 | bit 14 | Unused; a server writes zero. |
| features.skinParticles | bit 15 | Skin-specific particle effects for units in a skin other than the first. |
| features.bit16 | bit 16 | Unused; a server writes zero. |
| features.hardwareMetrics | bit 17 | A report of hardware and frame rate at the end of the match. |
| features.unused | bit 18 to 31 | Unused; a server writes zero. |
| disabledItems | 64 × u32 | Items nobody can buy in this match, one place each. A place holds zero where nothing is barred. |
JoinSide
What a client sends to ask for a seat on one of the two sides while the match is being put together.
In every range of this book
Command 100 on roster, sent by the client, reliable.
| Field | Type | What it is |
|---|---|---|
| clientId | u32 | The client id of the client asking. |
| side | u32 | The 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.
In every range of this book
Command 103 on roster, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| sideRoom | u32 | How many seats the first side has room for. |
| otherSideRoom | u32 | How many the other has room for. |
| side | 24 × i64 | The 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. |
| otherSide | 24 × i64 | The players on the other, under the same reading and its own count. |
| sideTaken | u32 | How many of the leading places on the first side carry a player. |
| otherSideTaken | u32 | How many on the other. |
SeatName
What a server sends to say what a seat is called, while the match is being put together.
In every range of this book
Command 102 on roster, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| player | i64 | The player this is about. It has a player identifier’s width. |
| skin | i32 | Which look the seat’s champion wears. |
| nameLength | u32 | How many bytes the name below occupies, counting the byte that ends it. |
| name | text, sized by nameLength minus 1 | What the seat is called. It is not padded. |
| terminator | bytes, 1 | A 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.
In every range of this book
Command 101 on roster, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| player | i64 | The player this is about. It has a player identifier’s width. |
| skin | i32 | Which look the champion wears. |
| assetLength | u32 | How many bytes the name below occupies, counting the byte that ends it. |
| asset | text, sized by assetLength minus 1 | The name the client loads the champion’s art and sound under. It is not padded. |
| terminator | bytes, 1 | A 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.
In every range of this book
Command 22 on requests, sent by the client, unreliable.
| Field | Type | What it is |
|---|---|---|
| clientId | u32 | The client id of the client reporting. |
| playerId | i64 | Who is reporting. A client sends every bit set, which names nobody. |
| percent | f32 | How far loading has got, from zero to one hundred. |
| eta | f32 | How long the client expects still to take, in seconds. |
| status | 4-byte bits | |
| status.count | bit 0 to 15 | It rises with each report, not always by one. |
| status.ping | bit 16 to 30 | Round trip time the client measures, in milliseconds. |
| status.loaded | bit 31 | Set 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.
In every range of this book
Command 149 on transient, sent by the server, unreliable.
| Field | Type | What it is |
|---|---|---|
| clientId | u32 | The client id this is about. |
| player | i64 | Who occupies it. |
| progress | f32 | How far through loading it is, from zero to one hundred. |
| secondsLeft | f32 | How much longer it is expected to take, in seconds. |
| status | 4-byte bits | |
| status.count | bit 0 to 15 | It rises with each report, not always by one. |
| status.ping | bit 16 to 30 | Round trip time the client measures, in milliseconds. |
| status.loaded | bit 31 | Set in every report whose progress stands at one hundred, and in no other. |
Vectors (1)
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.
In every range of this book
Command 97 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| botsOnOneSide | u8 | How 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). |
| botsOnTheOther | u8 | The other. It shares the reading above. |
SpawnEnd
What a server sends to close the run of units it opened with. The header names no object: a server writes zero.
StartGame
What a server sends to begin play. The header names no object: it carries zero.
In 3.01–3.04
Command 91 on events, sent by the server, reliable.
A client past spawning ignores it.
| Field | Type | What it is |
|---|---|---|
| rules | 1-byte bits | |
| rules.pausing | bit 0 | Set where holding the match is allowed. |
| rules.unused | bit 1 to 7 | Unused; a server writes zero. |
Vectors (1)
In 3.5
Command 91 on events, sent by the server, reliable.
A client past spawning ignores it.
| Field | Type | What it is |
|---|---|---|
| rules | 1-byte bits | |
| rules.pausing | bit 0 | Set where holding the match is allowed. |
| rules.unused | bit 1 to 7 | Unused; a server writes zero. |
| features | 4-byte bits | Which optional features the match turns on. A client takes them from the first StartGame only. |
| features.altUnitDisplay | bit 0 | Shows units’ health and experience bars and their character display from another set of the client’s data. |
| features.balanceVoteCommands | bit 1 | The chat commands /equalize and /noequalize. |
| features.unused | bit 2 to 31 | Unused; a server writes zero. |
Vectors (1)
In 3.6–3.15
Command 91 on events, sent by the server, reliable.
A client past spawning ignores it.
| Field | Type | What it is |
|---|---|---|
| rules | 1-byte bits | |
| rules.pausing | bit 0 | Set where holding the match is allowed. |
| rules.unused | bit 1 to 7 | Unused; a server writes zero. |
Vectors (1)
ClientReady
What a client sends once it has loaded and is ready to play. The header names no object: it carries zero.
In every range of this book
Command 81 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.
| Field | Type | What it is |
|---|---|---|
| maskedStatus | u32 | It varies from client to client; a server ignores it. |
| mask | u32 | A random value the client picks to mask the one above. |
| tipChosen | u8 | Which tip the client is set to show. |
| tipColour | u8 | How it is coloured. |
| tipDuration | u8 | How long it stays, as an entry among the display times in the client’s own settings rather than a length of time. |
| settings | 1-byte bits | |
| settings.tips | bit 0 | Set while tips are wanted at all. |
| settings.reporting | bit 1 | Set while the client reports on itself. |
| settings.loadingTips | bit 2 | Set while tips are wanted while loading. |
| settings.playingTips | bit 3 | Set while tips are wanted during play. |
| settings.debug | bit 4 | Set while the client runs in a debugging state. |
| settings.unused | bit 5 to 7 | A client returns them as the server sent them. |
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.
In every range of this book
Command 190 on requests, sent by the client, reliable.
No body.
Vectors (1)
MatchIdentity
What a server sends to tell a client which match this is and what its player is called. The header carries zero.
In every range of this book
Command 146 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| game | i64 | The match’s identifier. |
| platform | text, 32 bytes | Which platform the match belongs to, written and padded as above. |
| name | text, 128 bytes | The player’s name, padded with zero bytes. |
Vectors (1)
MatchStarted
What a server sends to set when the match began. The header names no object: it carries zero.
In every range of this book
Command 194 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| startedAt | f32 | When the match began, as a moment on the match clock, in seconds. |
Vectors (2)
GameOptions
What a client sends when a setting that a server needs to know about changes. The header names the sender’s champion.
In every range of this book
Command 70 on requests, sent by the client, reliable.
| Field | Type | What it is |
|---|---|---|
| options | 1-byte bits | |
| options.autoAttack | bit 0 | Set while the client attacks without being told to. |
| options.unused | bit 1 to 7 | Always clear: a client writes the whole byte as 0 or 1. |
ModuleData
What a server sends to carry data to a module of the client’s own. A client takes it even before it is ready to play. With kind 4, or any kind other than 1 and 2, a client acts on what the data carries as on a message that had arrived. What kinds 1 and 2 do is not shown. A server need send none.
In every range of this book
Command 221 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| kind | u8 | What the data is for. |
| length | u16 | How many bytes of data follow; at most 1024. |
| data | bytes, sized by length | Data for a module of the client’s own, which the message only carries. |
Vectors (1)
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.
In every range of this book
Command 223 on requests, sent by the client, reliable.
| Field | Type | What it is |
|---|---|---|
| kind | u8 | What the data is for. |
| length | u16 | How many bytes of data follow; at most 1024. |
| data | bytes, sized by length | Data for a module of the client’s own, which the message only carries. |
Vectors (1)
StatsRequest
What a client sends about itself. The header names the sender’s champion.