Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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

StatTick asks 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 ClientFinished every time GameEnded arrives 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 BotKick that 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 ReconnectedInMatch on every connection it makes, the first included, with a byte that is 0 where the match is in play and 1 otherwise.

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

In 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 ReconnectedInMatch as 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.

Definition.

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.

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

one-on-1-0-0-131

In 1.0.0.132–3.1.0.0

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

BuildsCommand
1.0.0.132–1.0.0.134202
1.0.0.135204
1.0.0.136–1.0.0.137202
1.0.0.138204
1.0.0.139–1.0.0.140203
1.0.0.141–1.0.0.143205
1.0.0.144–1.0.0.149193
1.0.0.150–3.1.0.0190
FieldTypeWhat it is
elapsedf32How long the match has run, in seconds.
Vectors (8)

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

ClockReply

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

Definition.

In every range of this book

Command 8 on clock, sent by the client, reliable.

FieldTypeWhat it is
valueu32The client id the sender holds, as it sends in clientId in Camera and CameraLock.
serverSaidf32What the server last said the clock stood at, in seconds.
clientSaidf32What the client’s own clock reads, in seconds, just after it set itself from that statement: elapsed plus its smoothed estimate of the delay.
checkbytes, 32Thirty-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.

Definition.

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.

FieldTypeWhat it is
speedf32How 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)

one-on-1-0-0-143

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.

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

Definition.

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.

FieldTypeWhat it is
clientIdu32The 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.
how1-byte bits
how.afterCountdownbit 0Set where the match starts again after a countdown rather than at once.
how.unusedbit 1 to 7Unused; a server writes zero.

Pause

What a client sends to hold a match. The header names no object: it carries zero.

Definition.

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.

FieldTypeWhat it is
clientIdu32A client writes 4294967295, the client id of no client.
timeLefti32A client leaves it unwritten; its bytes carry no meaning.
how1-byte bits
how.tournamentbit 0A client sends it clear.
how.unusedbit 1 to 7A client leaves these bits unwritten; they carry no meaning.
Vectors (1)

one-on-1-0-0-131

In 1.0.0.132–1.0.0.138

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

BuildsCommand
1.0.0.132–1.0.0.134170
1.0.0.135172
1.0.0.136–1.0.0.137170
1.0.0.138172

A client sends the same values in every Pause, as each field states.

FieldTypeWhat it is
clientIdu32A client writes 4294967295, the client id of no client.
timeLefti32A client leaves it unwritten; its bytes carry no meaning.
how1-byte bits
how.tournamentbit 0A client sends it clear.
how.unusedbit 1 to 7Unused; 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.

FieldTypeWhat it is
clientIdu32A client writes 4294967295, the client id of no client.
timeLefti32A client leaves it unwritten; its bytes carry no meaning.
how1-byte bits
how.tournamentbit 0A client sends it clear.
how.unusedbit 1 to 7A client writes only tournament: these bits carry whatever it held there, and a server ignores them.
Vectors (1)

one-on-1-0-0-143

In 1.0.0.144–3.1.0.0

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

BuildsCommand
1.0.0.144–1.0.0.149161
1.0.0.150–3.1.0.0158

A client sends the same values in every Pause, as each field states.

FieldTypeWhat it is
clientIdu32A client writes 4294967295, the client id of no client.
timeLefti32A client leaves it unwritten; its bytes carry no meaning.
how1-byte bits
how.tournamentbit 0A client sends it clear.
how.unusedbit 1 to 7Unused; a client writes zero.
Vectors (2)

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

Resume

What a client sends to start a paused match again. The header names no object: it carries zero.

Definition.

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.

FieldTypeWhat it is
clientIdu32A client writes 4294967295, the client id of no client.
how1-byte bits
how.delayedbit 0A client sends it clear.
how.unusedbit 1 to 7A 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.

FieldTypeWhat it is
clientIdu32A client writes 4294967295, the client id of no client.
how1-byte bits
how.delayedbit 0A client sends it clear.
how.unusedbit 1 to 7A 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.

Definition.

In every range of this book

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

BuildsCommand
1.0.0.130–1.0.0.131169
1.0.0.132–1.0.0.134170
1.0.0.135172
1.0.0.136–1.0.0.137170
1.0.0.138172
1.0.0.139–1.0.0.143171
1.0.0.144–1.0.0.149161
1.0.0.150–3.1.0.0158
FieldTypeWhat it is
clientIdu32The client id of the client that asked for the hold; it applies only to a tournament’s hold.
timeLefti32The hold time left, in seconds, for any hold. A hold begins only where it is above zero and the match is not already held.
how1-byte bits
how.tournamentbit 0Set 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.unusedbit 1 to 7Unused; a server writes zero.
Vectors (8)

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

GameEnded

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

Definition.

In 1.0.0.130–1.0.0.138

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

BuildsCommand
1.0.0.130–1.0.0.131206
1.0.0.132–1.0.0.134207
1.0.0.135209
1.0.0.136–1.0.0.137207
1.0.0.138209

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.

FieldTypeWhat it is
result1-byte bits
result.side100Wonbit 0Set where side 100 won, clear where side 200 did.
result.unusedbit 1 to 7Unused; 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.

FieldTypeWhat it is
result1-byte bits
result.side100Wonbit 0Set where side 100 won, clear where side 200 did.
result.unusedbit 1 to 7Unused; a server writes zero.
Vectors (1)

one-on-1-0-0-140

In 1.0.0.141–3.1.0.0

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

BuildsCommand
1.0.0.141–1.0.0.143210
1.0.0.144–1.0.0.149198
1.0.0.150–3.1.0.0195

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.

FieldTypeWhat it is
result1-byte bits
result.side100Wonbit 0Set where side 100 won, clear where side 200 did.
result.unusedbit 1 to 7Unused; a server writes zero.
Vectors (3)

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

ClientFinished

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

Definition.

In 1.0.0.130–1.0.0.138

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

BuildsCommand
1.0.0.130–1.0.0.131145
1.0.0.132–1.0.0.137146
1.0.0.138148

It is sent once, at the end.

No body.

Vectors (3)

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

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)

one-on-1-0-0-143

In 1.0.0.144–3.1.0.0

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

BuildsCommand
1.0.0.144–1.0.0.149141
1.0.0.150–3.1.0.0138

It is sent once, at the end.

No body.

Vectors (2)

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

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.

Definition.

In 1.0.0.130–1.0.0.138

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

BuildsCommand
1.0.0.130–1.0.0.131205
1.0.0.132–1.0.0.134206
1.0.0.135208
1.0.0.136–1.0.0.137206
1.0.0.138208
FieldTypeWhat it is
orderWonu8Nonzero 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.

FieldTypeWhat it is
orderWonu8Nonzero where side 100 won, zero where side 200 won.
Vectors (1)

one-on-1-0-0-140

In 1.0.0.141–3.1.0.0

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

BuildsCommand
1.0.0.141–1.0.0.143209
1.0.0.144–1.0.0.149197
1.0.0.150–3.1.0.0194

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.

FieldTypeWhat it is
orderWonu8Nonzero where side 100 won, zero where side 200 won.
Vectors (3)

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

Exit

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

Definition.

In 1.0.0.130–1.0.0.138

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

BuildsCommand
1.0.0.130–1.0.0.131148
1.0.0.132–1.0.0.137149
1.0.0.138151

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)

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

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)

one-on-1-0-0-143

In 1.0.0.144–3.1.0.0

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

BuildsCommand
1.0.0.144–1.0.0.149143
1.0.0.150–3.1.0.0140

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)

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

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.

Definition.

In every range of this book

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

BuildsCommand
1.0.0.130–1.0.0.131244
1.0.0.132–1.0.0.134245
1.0.0.135242
1.0.0.136–1.0.0.137240
1.0.0.138242
1.0.0.139–1.0.0.140241
1.0.0.141–1.0.0.142243
1.0.0.143242
1.0.0.144–1.0.0.149229
1.0.0.150–3.1.0.0226

No body.

Vectors (10)

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

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.

Definition.

In 1.0.0.135–3.1.0.0

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

BuildsCommand
1.0.0.135234
1.0.0.136–1.0.0.137232
1.0.0.138234
1.0.0.139–1.0.0.140233
1.0.0.141–1.0.0.143235
1.0.0.144–1.0.0.149222
1.0.0.150–3.1.0.0219
FieldTypeWhat it is
actionu8What to do. A client acts on 4 only. Values: 4 leave.
Vectors (7)

leave-on-1-0-0-135, leave-on-1-0-0-136, leave-on-1-0-0-138, leave-on-1-0-0-140, leave-on-1-0-0-143, leave-on-1-0-0-149, leave-on-1-0-0-154

PlayerDisconnected

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

Definition.

In 1.0.0.130–1.0.0.133

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

BuildsCommand
1.0.0.130–1.0.0.131160
1.0.0.132–1.0.0.133161

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.

FieldTypeWhat it is
championu32The player’s champion.
Vectors (2)

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

In 1.0.0.134–3.1.0.0

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

BuildsCommand
1.0.0.134161
1.0.0.135163
1.0.0.136–1.0.0.137161
1.0.0.138163
1.0.0.139–1.0.0.143162
1.0.0.144–1.0.0.149152
1.0.0.150–3.1.0.0149

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.

FieldTypeWhat it is
championu32The player’s champion.
flags1-byte bitsWho is told.
flags.toEnemiesbit 0Set 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.unusedbit 1 to 7Unused; a server writes zero.
Vectors (7)

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

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.

Definition.

In 1.0.0.143–3.1.0.0

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

BuildsCommand
1.0.0.143252
1.0.0.144–1.0.0.149239
1.0.0.150–3.1.0.0236
FieldTypeWhat it is
stage1-byte bitsWhich half of the pair.
stage.stagebit 0 to 10 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.unusedbit 2 to 7Unused; a server writes zero.
Vectors (3)

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

ReconnectedInMatch

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

Definition.

In 1.0.0.130–1.0.0.142

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

BuildsCommand
1.0.0.130–1.0.0.131164
1.0.0.132–1.0.0.134165
1.0.0.135167
1.0.0.136–1.0.0.137165
1.0.0.138167
1.0.0.139–1.0.0.142166

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.

FieldTypeWhat it is
loadingu8Zero once the client has taken StartGame, 1 before it.
Vectors (6)

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

In 1.0.0.143–3.1.0.0

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

BuildsCommand
1.0.0.143166
1.0.0.144–1.0.0.149156
1.0.0.150–3.1.0.0153

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)

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

Reconnected

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

Definition.

In every range of this book

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

BuildsCommand
1.0.0.130–1.0.0.14316
1.0.0.144–3.1.0.015
FieldTypeWhat it is
clientu32The client, by the seat it occupies.
Vectors (1)

one-on-1-0-0-143

ClockConvergence

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

Definition.

In every range of this book

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

BuildsCommand
1.0.0.130–1.0.0.131121
1.0.0.132–1.0.0.137122
1.0.0.138–1.0.0.143124
1.0.0.144–1.0.0.149118
1.0.0.150–3.1.0.0115
FieldTypeWhat it is
clientTimef32The client’s clock, in seconds, as the client reported it.
roundTripf32The 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