The match
How a match runs once play has begun, apart from the field: its clock, holds, its end, and players leaving and coming back.
The clock
A server states how long the match has run with ClockSync, and a client
answers on the clock channel with ClockReply. Time says how the
match clock is kept, and which clock each time on the wire is measured
against.
GameSpeed sets how fast the match runs. StatTick hands every unit a span of
seconds.
A client shows the speed GameSpeed sets over its champion. A client changes
nothing it shows for StatTick.
In 1.0.0.130–1.0.0.140
StatTickasks every unit’s stats to advance by that span.
Sent during a hold, GameSpeed takes effect as the match resumes.
Holding and resuming
A client asks to hold the match with Pause, and to resume it with Resume. A
server MUST attribute each to the connection it arrived on (see Objects and
identifiers).
A client names no one in Pause or Resume.
A server holds the match with Paused.
Paused carries how long the hold can last, in seconds.
A client begins a hold only where the time Paused carries is above zero and
the match is not already held.
In 1.0.0.140–3.1.0.0
A client shows a tournament’s hold, crediting the seat that asked, where the message says it is one.
A server ends the hold with Resumed.
Resumed ends the hold either at once or after a countdown the client shows,
during which the match stays held.
In 1.0.0.140–3.1.0.0
A client announces in chat who resumed the match.
In 1.0.0.140
Input stays locked during the countdown.
The end
A server ends the match with GameEnded, saying which side won, and takes the
interface down with HudDisabled. A client shows the win or loss for its
player’s side and sends ClientFinished.
In 1.0.0.130–1.0.0.140
A client sends
ClientFinishedevery timeGameEndedarrives in play, while playing a replay too.
A client that receives GameEnded while still loading leaves at once.
VictoryDance sets units moving as winners or losers do. It ends nothing.
In 1.0.0.140–3.1.0.0
A client moves no neutral unit for
VictoryDance.
Leaving and coming back
A client leaving as one abandoning the match sends Exit: as its player quits
or closes the window, as a reconnection fails, or on a server’s Shutdown,
which has it leave at once. A client also leaves at once on BotKick with the
action that means leave.
A client also leaves as one abandoning as its player declines to reconnect or cancels a reconnection under way, and as its player dismisses the notice that it was dropped for being away.
In 1.0.0.140–3.1.0.0
The action of
BotKickthat means leave is 4.
A server tells the others that a player’s client dropped with
PlayerDisconnected.
A client shows a notice in chat for PlayerDisconnected.
SoftReconnect rebuilds a client’s world without a new connection, as
Objects and identifiers describes.
A client started again for a match in progress knows nothing of it, and joins
as at the start: a server takes it through Joining a match
from registering to StartGame, with a spawn run that states the field as it
stands, and a ClockSync.
A client the server drops with the reason that means its player was away shows that, and does not connect again.
In 1.0.0.130–1.0.0.140
A client sends
ReconnectedInMatchon every connection it makes, the first included, with a byte that is 0 where the match is in play and 1 otherwise.
Reconnectedannounces that a player came back. A client shows it in chat for any other player, ally or enemy.
In 1.0.0.140–3.1.0.0
A client dropped during play connects again at once by itself, for any reason but the one that means its player was away, and shows its player that it is reconnecting while it does. Where its settings turn this off, it asks its player for the reason 0 whether to connect again, and for any other shows that the reconnection failed.
A client sends
ReconnectedInMatchas the connection is made, without waiting for the registration answer.
Staying connected
A client’s view report, Camera, goes out as its view moves at least 200
units, at most every tenth of a second, and never while its view is locked.
Where its last Camera goes unacknowledged, a client sends it again without
its view moving, once more than twice the round trip has passed.
In 1.0.0.140–3.1.0.0
Once loading is done, a client gives up on a connection where a reliable message it sent goes unacknowledged for 15 seconds.
In 1.0.0.140–3.1.0.0
Before loading is done, a client waits 60 seconds for an acknowledgement rather than 15.
Messages
Each message of this system in this book, with each layout it has across the book’s patches and every note its definition carries. A layout is the message’s body, after the header its channel’s family puts in front (see Messages).
ClockSync
What a server sends to set a client’s idea of how long the match has run. The header names no object: a server writes zero.
In 1.0.0.130–1.0.0.131
Command 201 on events, sent by the server, reliable.
A client sets its clock to elapsed plus the round trip it keeps from ClockConvergence, and answers at once with ClockReply. It drops the message where it has no game clock yet.
| Field | Type | What it is |
|---|---|---|
| elapsed | f32 | How long the match has run, in seconds. |
Vectors (1)
In 1.0.0.132–3.1.0.0
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.132–1.0.0.134 | 202 |
| 1.0.0.135 | 204 |
| 1.0.0.136–1.0.0.137 | 202 |
| 1.0.0.138 | 204 |
| 1.0.0.139–1.0.0.140 | 203 |
| 1.0.0.141–1.0.0.143 | 205 |
| 1.0.0.144–1.0.0.149 | 193 |
| 1.0.0.150–3.1.0.0 | 190 |
| Field | Type | What it is |
|---|---|---|
| elapsed | f32 | How long the match has run, in seconds. |
ClockReply
What a client sends back when a server states the match clock, carrying both readings so the server can tell how far apart they are. The header names no object: it carries zero.
In every range of this book
Command 8 on clock, sent by the client, reliable.
| Field | Type | What it is |
|---|---|---|
| value | u32 | The client id the sender holds, as it sends in clientId in Camera and CameraLock. |
| serverSaid | f32 | What the server last said the clock stood at, in seconds. |
| clientSaid | f32 | What the client’s own clock reads, in seconds, just after it set itself from that statement: elapsed plus its smoothed estimate of the delay. |
| check | bytes, 32 | Thirty-two bytes every client of this build sends alike; a server ignores them. |
GameSpeed
What a server sends to set how fast the game’s clock runs. A client shows the new speed over its champion. The header carries zero.
In 1.0.0.130–1.0.0.143
Command 19 on events, sent by the server, reliable.
Sent while paused, it takes effect on resuming.
| Field | Type | What it is |
|---|---|---|
| speed | f32 | How fast, 1 being normal. Zero stops the clock as a pause does, and a client then holds any later GameSpeed until the game resumes. |
Vectors (1)
In 1.0.0.144–3.1.0.0
Command 18 on events, sent by the server, reliable.
Sent while paused, it takes effect on resuming.
| Field | Type | What it is |
|---|---|---|
| speed | f32 | How fast, 1 being normal. A client keeps it between 0 and 10. |
Resumed
What a server sends to take the match off hold. The header names a champion: that of the player who resumed the match.
In every range of this book
Command 10 on events, sent by the server, reliable.
The header has no effect. Resuming after the countdown, it keeps input locked and the pause panel open until a countdown of its own ends; resuming at once, it unlocks input and closes the panel.
| Field | Type | What it is |
|---|---|---|
| clientId | u32 | The client id of the player who resumed the match, announced in chat in their side’s colour where their champion is known; 4294967295 announces no one. |
| how | 1-byte bits | |
| how.afterCountdown | bit 0 | Set where the match starts again after a countdown rather than at once. |
| how.unused | bit 1 to 7 | Unused; a server writes zero. |
Pause
What a client sends to hold a match. The header names no object: it carries zero.
In 1.0.0.130–1.0.0.131
Command 169 on requests, sent by the client, reliable.
A client sends the same values in every Pause, as each field states.
| Field | Type | What it is |
|---|---|---|
| clientId | u32 | A client writes 4294967295, the client id of no client. |
| timeLeft | i32 | A client leaves it unwritten; its bytes carry no meaning. |
| how | 1-byte bits | |
| how.tournament | bit 0 | A client sends it clear. |
| how.unused | bit 1 to 7 | A client leaves these bits unwritten; they carry no meaning. |
Vectors (1)
In 1.0.0.132–1.0.0.138
Carried on requests, sent by the client, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.132–1.0.0.134 | 170 |
| 1.0.0.135 | 172 |
| 1.0.0.136–1.0.0.137 | 170 |
| 1.0.0.138 | 172 |
A client sends the same values in every Pause, as each field states.
| Field | Type | What it is |
|---|---|---|
| clientId | u32 | A client writes 4294967295, the client id of no client. |
| timeLeft | i32 | A client leaves it unwritten; its bytes carry no meaning. |
| how | 1-byte bits | |
| how.tournament | bit 0 | A client sends it clear. |
| how.unused | bit 1 to 7 | Unused; a client writes zero. |
Vectors (4)
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.143
Command 171 on requests, sent by the client, reliable.
A client sends the same values in every Pause, as each field states.
| Field | Type | What it is |
|---|---|---|
| clientId | u32 | A client writes 4294967295, the client id of no client. |
| timeLeft | i32 | A client leaves it unwritten; its bytes carry no meaning. |
| how | 1-byte bits | |
| how.tournament | bit 0 | A client sends it clear. |
| how.unused | bit 1 to 7 | A client writes only tournament: these bits carry whatever it held there, and a server ignores them. |
Vectors (1)
In 1.0.0.144–3.1.0.0
Carried on requests, sent by the client, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.144–1.0.0.149 | 161 |
| 1.0.0.150–3.1.0.0 | 158 |
A client sends the same values in every Pause, as each field states.
| Field | Type | What it is |
|---|---|---|
| clientId | u32 | A client writes 4294967295, the client id of no client. |
| timeLeft | i32 | A client leaves it unwritten; its bytes carry no meaning. |
| how | 1-byte bits | |
| how.tournament | bit 0 | A client sends it clear. |
| how.unused | bit 1 to 7 | Unused; a client writes zero. |
Vectors (2)
Resume
What a client sends to start a paused match again. The header names no object: it carries zero.
In 1.0.0.130–1.0.0.131
Command 10 on requests, sent by the client, reliable.
A client clears delayed and leaves the other bits of how unwritten.
| Field | Type | What it is |
|---|---|---|
| clientId | u32 | A client writes 4294967295, the client id of no client. |
| how | 1-byte bits | |
| how.delayed | bit 0 | A client sends it clear. |
| how.unused | bit 1 to 7 | A client leaves these bits unwritten; they carry no meaning. |
In 1.0.0.132–3.1.0.0
Command 10 on requests, sent by the client, reliable.
A client writes only delayed in how; the rest of the byte carries whatever it held there.
| Field | Type | What it is |
|---|---|---|
| clientId | u32 | A client writes 4294967295, the client id of no client. |
| how | 1-byte bits | |
| how.delayed | bit 0 | A client sends it clear. |
| how.unused | bit 1 to 7 | A client leaves these bits unwritten; they carry no meaning, and a server ignores them. |
Paused
What a server sends to put the match on hold. The header names no object: it carries zero.
In every range of this book
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.130–1.0.0.131 | 169 |
| 1.0.0.132–1.0.0.134 | 170 |
| 1.0.0.135 | 172 |
| 1.0.0.136–1.0.0.137 | 170 |
| 1.0.0.138 | 172 |
| 1.0.0.139–1.0.0.143 | 171 |
| 1.0.0.144–1.0.0.149 | 161 |
| 1.0.0.150–3.1.0.0 | 158 |
| Field | Type | What it is |
|---|---|---|
| clientId | u32 | The client id of the client that asked for the hold; it applies only to a tournament’s hold. |
| timeLeft | i32 | The hold time left, in seconds, for any hold. A hold begins only where it is above zero and the match is not already held. |
| how | 1-byte bits | |
| how.tournament | bit 0 | Set for a tournament’s hold: as the hold begins, a client shows its tournament display, crediting seat. A hold still needs timeLeft above zero. |
| how.unused | bit 1 to 7 | Unused; a server writes zero. |
GameEnded
What a server sends to end the match and say which side won. The header names no object: it carries zero.
In 1.0.0.130–1.0.0.138
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.130–1.0.0.131 | 206 |
| 1.0.0.132–1.0.0.134 | 207 |
| 1.0.0.135 | 209 |
| 1.0.0.136–1.0.0.137 | 207 |
| 1.0.0.138 | 209 |
Arriving while the match still loads, it counts as a win or loss for the player’s side and the client leaves at once. Otherwise the client ends the match on its screen and sends ClientFinished, except while playing a replay.
| Field | Type | What it is |
|---|---|---|
| result | 1-byte bits | |
| result.side100Won | bit 0 | Set where side 100 won, clear where side 200 did. |
| result.unused | bit 1 to 7 | Unused; a server writes zero. |
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 208 on events, sent by the server, reliable.
Arriving while the match still loads, it counts as a win or loss for the player’s side and the client leaves at once; where the client has no champion of its own yet, it shows a notice and leaves with no win or loss. Otherwise the client ends the match on its screen and sends ClientFinished, while watching a match too.
| Field | Type | What it is |
|---|---|---|
| result | 1-byte bits | |
| result.side100Won | bit 0 | Set where side 100 won, clear where side 200 did. |
| result.unused | bit 1 to 7 | Unused; a server writes zero. |
Vectors (1)
In 1.0.0.141–3.1.0.0
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.141–1.0.0.143 | 210 |
| 1.0.0.144–1.0.0.149 | 198 |
| 1.0.0.150–3.1.0.0 | 195 |
Arriving while the match still loads, it counts as a win or loss for the player’s side and the client leaves at once. Otherwise the client ends the match on its screen and sends ClientFinished, except while playing a replay.
| Field | Type | What it is |
|---|---|---|
| result | 1-byte bits | |
| result.side100Won | bit 0 | Set where side 100 won, clear where side 200 did. |
| result.unused | bit 1 to 7 | Unused; a server writes zero. |
Vectors (3)
ClientFinished
What a client sends when it has finished with the match.
In 1.0.0.130–1.0.0.138
Carried on requests, sent by the client, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.130–1.0.0.131 | 145 |
| 1.0.0.132–1.0.0.137 | 146 |
| 1.0.0.138 | 148 |
It is sent once, at the end.
No body.
Vectors (3)
In 1.0.0.139–1.0.0.143
Command 147 on requests, sent by the client, reliable.
A client sends it each time GameEnded arrives after the match has started. The header carries the client’s own champion’s net id.
No body.
Vectors (1)
In 1.0.0.144–3.1.0.0
Carried on requests, sent by the client, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.144–1.0.0.149 | 141 |
| 1.0.0.150–3.1.0.0 | 138 |
It is sent once, at the end.
No body.
Vectors (2)
VictoryDance
What a server sends to set units moving as winners or losers do. It ends nothing and changes nothing else on screen. The header carries zero.
In 1.0.0.130–1.0.0.138
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.130–1.0.0.131 | 205 |
| 1.0.0.132–1.0.0.134 | 206 |
| 1.0.0.135 | 208 |
| 1.0.0.136–1.0.0.137 | 206 |
| 1.0.0.138 | 208 |
| Field | Type | What it is |
|---|---|---|
| orderWon | u8 | Nonzero where side 100 won, zero where side 200 won. |
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 207 on events, sent by the server, reliable.
A client moves every unit that belongs to a side, on both sides: those of the winning side as winners, those of the other as losers. A winning champion dances, a losing one stands idle, and other units play a win or loss animation where they have one.
| Field | Type | What it is |
|---|---|---|
| orderWon | u8 | Nonzero where side 100 won, zero where side 200 won. |
Vectors (1)
In 1.0.0.141–3.1.0.0
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.141–1.0.0.143 | 209 |
| 1.0.0.144–1.0.0.149 | 197 |
| 1.0.0.150–3.1.0.0 | 194 |
It sets every unit on a side moving as winners or losers do: a winning champion dances, a losing one stands idle, and other units play a win or loss animation where they have one.
| Field | Type | What it is |
|---|---|---|
| orderWon | u8 | Nonzero where side 100 won, zero where side 200 won. |
Vectors (3)
Exit
What a client sends as it leaves. It carries nothing of its own.
In 1.0.0.130–1.0.0.138
Carried on requests, sent by the client, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.130–1.0.0.131 | 148 |
| 1.0.0.132–1.0.0.137 | 149 |
| 1.0.0.138 | 151 |
A client sends it as it leaves as one abandoning the match: as its player confirms quitting or closes the window, as a reconnection fails, or on Shutdown or BotKick.
No body.
Vectors (3)
In 1.0.0.139–1.0.0.143
Command 150 on requests, sent by the client, reliable.
A client sends it as it leaves as one abandoning the match: as its player confirms quitting or closes the window, as a reconnection fails, or on Shutdown or a BotKick whose first byte is 4. The header carries the client’s own champion’s net id.
No body.
Vectors (1)
In 1.0.0.144–3.1.0.0
Carried on requests, sent by the client, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.144–1.0.0.149 | 143 |
| 1.0.0.150–3.1.0.0 | 140 |
A client sends it as it leaves as one abandoning the match: as its player confirms quitting or closes the window, as a reconnection fails, or on Shutdown or BotKick. The header names no object: it carries zero.
No body.
Vectors (2)
Shutdown
What a server sends to have a client leave the match at once, as one abandoning it, sending Exit as it goes. It carries nothing of its own. The header carries zero.
In every range of this book
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.130–1.0.0.131 | 244 |
| 1.0.0.132–1.0.0.134 | 245 |
| 1.0.0.135 | 242 |
| 1.0.0.136–1.0.0.137 | 240 |
| 1.0.0.138 | 242 |
| 1.0.0.139–1.0.0.140 | 241 |
| 1.0.0.141–1.0.0.142 | 243 |
| 1.0.0.143 | 242 |
| 1.0.0.144–1.0.0.149 | 229 |
| 1.0.0.150–3.1.0.0 | 226 |
No body.
BotKick
What a server sends to have a client it takes for a program rather than a player leave the match. The header carries zero.
In 1.0.0.135–3.1.0.0
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.135 | 234 |
| 1.0.0.136–1.0.0.137 | 232 |
| 1.0.0.138 | 234 |
| 1.0.0.139–1.0.0.140 | 233 |
| 1.0.0.141–1.0.0.143 | 235 |
| 1.0.0.144–1.0.0.149 | 222 |
| 1.0.0.150–3.1.0.0 | 219 |
| Field | Type | What it is |
|---|---|---|
| action | u8 | What to do. A client acts on 4 only. Values: 4 leave. |
PlayerDisconnected
What a server sends as a player’s client drops out. The header carries zero.
In 1.0.0.130–1.0.0.133
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.130–1.0.0.131 | 160 |
| 1.0.0.132–1.0.0.133 | 161 |
A client shows a chat notice naming the player in their side’s colour, and nothing where player names no champion it knows, names its own champion, or the match is not under way.
| Field | Type | What it is |
|---|---|---|
| champion | u32 | The player’s champion. |
Vectors (2)
In 1.0.0.134–3.1.0.0
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.134 | 161 |
| 1.0.0.135 | 163 |
| 1.0.0.136–1.0.0.137 | 161 |
| 1.0.0.138 | 163 |
| 1.0.0.139–1.0.0.143 | 162 |
| 1.0.0.144–1.0.0.149 | 152 |
| 1.0.0.150–3.1.0.0 | 149 |
A client shows a chat notice naming the player in their side’s colour, and nothing where player names no champion it knows, names its own champion, or the match is not under way.
| Field | Type | What it is |
|---|---|---|
| champion | u32 | The player’s champion. |
| flags | 1-byte bits | Who is told. |
| flags.toEnemies | bit 0 | Set to show the notice only to the other side; clear to show it only to the player’s own side. A client with no champion of its own shows it only where this is clear. |
| flags.unused | bit 1 to 7 | Unused; a server writes zero. |
SoftReconnect
What a server sends, in pairs, to rebuild a client’s world without a new connection: the first marks what the client holds, the second deletes whatever is still marked. The header carries zero.
In 1.0.0.143–3.1.0.0
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.143 | 252 |
| 1.0.0.144–1.0.0.149 | 239 |
| 1.0.0.150–3.1.0.0 | 236 |
| Field | Type | What it is |
|---|---|---|
| stage | 1-byte bits | Which half of the pair. |
| stage.stage | bit 0 to 1 | 0 to mark every unit, and every object kept until a checkpoint other than an inhibitor, also clearing floating text, any screen tint and the state of neutral camps; any other value to delete whatever is still marked. |
| stage.unused | bit 2 to 7 | Unused; a server writes zero. |
Vectors (3)
ReconnectedInMatch
What a client sends right after the server answers its registration. The header carries zero.
In 1.0.0.130–1.0.0.142
Carried on requests, sent by the client, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.130–1.0.0.131 | 164 |
| 1.0.0.132–1.0.0.134 | 165 |
| 1.0.0.135 | 167 |
| 1.0.0.136–1.0.0.137 | 165 |
| 1.0.0.138 | 167 |
| 1.0.0.139–1.0.0.142 | 166 |
A client sends it once it has connected again to a match it was playing. A client dropped while playing reconnects by itself; one dropped while loading leaves instead.
| Field | Type | What it is |
|---|---|---|
| loading | u8 | Zero once the client has taken StartGame, 1 before it. |
In 1.0.0.143–3.1.0.0
Carried on requests, sent by the client, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.143 | 166 |
| 1.0.0.144–1.0.0.149 | 156 |
| 1.0.0.150–3.1.0.0 | 153 |
A client sends it once it has connected again to a match it was playing. A client dropped while playing reconnects by itself; one dropped while loading leaves instead. It carries nothing of its own.
No body.
Vectors (3)
Reconnected
What a server sends to say a client has reconnected. The header carries zero.
In every range of this book
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.130–1.0.0.143 | 16 |
| 1.0.0.144–3.1.0.0 | 15 |
| Field | Type | What it is |
|---|---|---|
| client | u32 | The client, by the seat it occupies. |
Vectors (1)
ClockConvergence
What a server sends about how its clock and a client’s are being brought together. The header carries zero.
In every range of this book
Carried on clock, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 1.0.0.130–1.0.0.131 | 121 |
| 1.0.0.132–1.0.0.137 | 122 |
| 1.0.0.138–1.0.0.143 | 124 |
| 1.0.0.144–1.0.0.149 | 118 |
| 1.0.0.150–3.1.0.0 | 115 |
| Field | Type | What it is |
|---|---|---|
| clientTime | f32 | The client’s clock, in seconds, as the client reported it. |
| roundTrip | f32 | The round trip time the server measures, in seconds. |
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