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

Vision

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

Bringing a unit into view

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

EnterSight also states the unit’s items.

EnterSight can also carry whole messages of the game family, such as the CreateTurret or CreateNeutral that makes the unit, each taking effect as though it had arrived on its own.

EnterSight states everything a client needs to draw the unit at once: its looks, its shields, where it stands or which path it walks, and, in what follows, its health and resource. A body MAY end early where its layout marks the remaining parts as present only while bytes remain.

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

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

EnterLocalSight states the unit’s health.

EnterLocalSight states the unit’s resource beside its health.

Losing sight

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

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

LeaveLocalSight naming a client’s own champion changes nothing it shows.

Regions

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

In 4.1–4.19

A client makes only circular regions.

In 4.1–4.19

A client’s regions see over walls or not as the region says.

Drawing the fog

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

In 4.1–4.19

A client draws its fog of war, or the map with no darkening, as FogSet and FogToggled say. Neither changes what the client can see.

Who is told what

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

In 4.1–4.19

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

In 4.20

Some messages exist in more than one form, each for its own audience, laid out alike:

For every clientFor the clients that can see the unitFor the unit’s own client
UnitDiedUnitDiedOnMap
InventorySnapshotInventorySnapshotOnMap
FloatingTextFloatingTextOnMap
SpellSlotChangedSpellSlotChangedForOwner

A server sends the narrower audience as a message of its own, and sends the wider form only where every client is to know.

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

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

ItemAdded and InventorySlot announce a purchase only for the client’s own champion; an ally’s purchase is called out where the message asks for it.

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

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

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

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

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

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

Messages

Each message of this system in this book, with each layout it has across the book’s patches and every note its definition carries. A layout is the message’s body, after the header its channel’s family puts in front (see Messages).

EnterSight

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

Definition.

In 4.1–4.17

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

BuildsCommand
4.1–4.10185
4.11–4.17186

It states everything a client needs to draw the unit at once, and carries whole messages of the same family for anything a layout of its own cannot say.

FieldTypePresent whenWhat it is
carried2-byte bits
carried.sizebit 0 to 12How many bytes the messages below occupy in total.
carried.unusedbit 13 to 15Unused; a server writes zero.
messagessized by carried.size × CarriedMessageWhole messages of the same family, each behind its own length, that a client acts on as though they had arrived on their own.
itemCountu8How many items the unit holds.
itemscount in itemCount × HeldItemThe items themselves.
viewrecordremaining setEverything else a client needs to draw the unit. A server sends this message without it too, ending after the items.
view.hasShieldsu8Whether the three figures below follow. A zero leaves them out. Values: 0 no, 1 yes.
view.magicShieldf32hasShields setHow much of the unit’s shielding turns aside one sort of damage.
view.physicalShieldf32hasShields setHow much turns aside the other.
view.shieldf32hasShields setHow much turns aside either.
view.appearanceCountu32How many layers of look follow.
view.appearancecount in appearanceCount × AppearanceWhat the unit looks like, laid on in order.
view.lookingAtu32What the unit is turned towards, or zero where it is turned towards a place instead.
view.lookKindu8What sort of thing it is turned towards.
view.lookXf32Which way the unit is turned, along one ground axis. The three together are a direction rather than a place.
view.lookYf32Which way it is turned, in height.
view.lookZf32Which way it is turned, along the other ground axis.
view.effectStackCountu32How many effect slots have more than one stacked in them.
view.effectStackscount in effectStackCount × EffectStackThose slots and their counts.
view.isChampionu8Whether the unit is a champion. Values: 0 no, 1 yes.
view.movementStaterecordremaining setWhere the unit is and what it is doing on the ground. A server also sends this message ending before it.
view.movementState.movementKindu8What the unit is doing on the ground, and so which shape follows. A champion stated as standing, with the place and facing below, is drawn there with its name and health bar over it. One stated as moving is drawn at the first point of its path and walks the rest. Values: 0 nothing, 1 movingAtASpeed, 2 moving, 3 standing.
view.movementState.syncIdu32The name this statement of movement answers to.
view.movementState.movementMovementmovementKind = 2Where the unit is going. Movement says how a path is read.
view.movementState.movementAtSpeedMovementAtSpeedmovementKind = 1Where the unit is going, and how a server makes it travel. WaypointGroupAtSpeed carries the same shape.
view.movementState.atXf32movementKind = 3Where the unit stands, along one ground axis, in world units.
view.movementState.atZf32movementKind = 3Where it stands, along the other, in world units.
view.movementState.facingXf32movementKind = 3Which way it faces, along one ground axis.
view.movementState.facingZf32movementKind = 3Which way it faces, along the other.
Vectors (8)

a-champion-standing-on-4-10, a-champion-walking-on-4-10, ending-before-movement-on-4-10, ending-early-on-4-10, a-champion-standing-on-4-17, a-champion-walking-on-4-17, ending-before-movement-on-4-17, ending-early-on-4-17

In 4.18–4.20

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

It states everything a client needs to draw the unit at once, and carries whole messages of the same family for anything a layout of its own cannot say.

FieldTypePresent whenWhat it is
carriedu16The byte length of the messages carried below, all sixteen bits of it.
messagessized by carried × CarriedMessageWhole messages of the same family, each behind its own length, that a client acts on as though they had arrived on their own.
itemCountu8How many items the unit holds.
itemscount in itemCount × HeldItemThe items themselves.
viewrecordremaining setEverything else a client needs to draw the unit. A server sends this message without it too, ending after the items.
view.hasShieldsu8Whether the three figures below follow. A zero leaves them out, and everything after them begins twelve bytes earlier. Values: 0 no, 1 yes.
view.magicShieldf32hasShields setHow much of the unit’s shielding turns aside one sort of damage.
view.physicalShieldf32hasShields setHow much turns aside the other.
view.shieldf32hasShields setHow much turns aside either.
view.appearanceCountu32How many layers of look follow.
view.appearancecount in appearanceCount × AppearanceWhat the unit looks like, laid on in order.
view.lookingAtu32What the unit is turned towards, or zero where it is turned towards a place instead.
view.lookKindu8What sort of thing it is turned towards.
view.lookXf32Which way the unit is turned, along one ground axis. The three together are a direction rather than a place.
view.lookYf32Which way it is turned, in height.
view.lookZf32Which way it is turned, along the other ground axis.
view.effectStackCountu32How many effect slots have more than one stacked in them.
view.effectStackscount in effectStackCount × EffectStackThose slots and their counts.
view.isChampionu8Whether the unit is a champion. Values: 0 no, 1 yes.
view.movementStaterecordremaining setWhere the unit is and what it is doing on the ground. A server also sends this message ending before it.
view.movementState.movementKindu8What the unit is doing on the ground, and so which shape follows. A server sends the values for standing and moving. Values: 0 nothing, 1 movingAtASpeed, 2 moving, 3 standing.
view.movementState.syncIdu32The name this statement of movement answers to.
view.movementState.movementMovementmovementKind = 2Where the unit is going. Movement says how a path is read.
view.movementState.movementAtSpeedMovementAtSpeedmovementKind = 1Where the unit is going, and how a server makes it travel. WaypointGroupAtSpeed carries the same shape.
view.movementState.atXf32movementKind = 3Where the unit stands, along one ground axis, in world units.
view.movementState.atZf32movementKind = 3Where it stands, along the other, in world units.
view.movementState.facingXf32movementKind = 3Which way it faces, along one ground axis.
view.movementState.facingZf32movementKind = 3Which way it faces, along the other.
Vectors (5)

carrying-a-message-on-4-20, ending-before-movement-on-4-20, ending-early-on-4-20, on-a-path-on-4-20, standing-on-4-20

EnterLocalSight

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

Definition.

In 4.1–4.17

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

BuildsCommand
4.1–4.10173
4.11–4.17174
FieldTypePresent whenWhat it is
carried2-byte bits
carried.sizebit 0 to 12How many bytes the messages below occupy in total.
carried.unusedbit 13 to 15Unused; a server writes zero.
messagessized by carried.size × CarriedMessageWhole messages of the same family, each behind its own length, that a client acts on as though they had arrived on their own.
vitalsrecordremaining setThe unit’s health. A server sends this message without it too, ending after the carried messages.
vitals.maxHealthf32What the unit’s health tops out at.
vitals.healthf32What its health stands at.
Vectors (4)

ending-early-on-4-10, one-on-4-10, ending-early-on-4-17, one-on-4-17

In 4.18–4.20

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

FieldTypePresent whenWhat it is
carriedu16The byte length of the messages carried below, all sixteen bits of it.
messagessized by carried × CarriedMessageWhole messages of the same family, each behind its own length, that a client acts on as though they had arrived on their own.
vitalsrecordremaining setThe unit’s health. A server sends this message without it too, ending after the carried messages.
vitals.maxHealthf32What the unit’s health tops out at.
vitals.healthf32What its health stands at.
Vectors (3)

another-on-4-20, ending-early-on-4-20, one-on-4-20

EnterTeamSight

What a server sends when a unit comes into the view of a whole side. The header names the object this is about.

Definition.

In every range of this book

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

BuildsCommand
4.1–4.10223
4.11–4.20224
FieldTypeWhat it is
sideu8Which side the unit came into or out of the view of.
Vectors (6)

a-third-on-4-10, another-on-4-10, one-on-4-10, one-on-4-17, another-on-4-20, one-on-4-20

LeaveSight

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

Definition.

In every range of this book

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

BuildsCommand
4.1–4.1080
4.11–4.2081

No body.

Vectors (4)

another-on-4-10, one-on-4-10, one-on-4-17, one-on-4-20

LeaveTeamSight

What a server sends when a unit passes out of the view of a whole side. The header names the object this is about.

Definition.

In every range of this book

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

BuildsCommand
4.1–4.10224
4.11–4.20225
FieldTypeWhat it is
sideu8Which side the unit came into or out of the view of.
Vectors (6)

a-third-on-4-10, another-on-4-10, one-on-4-10, one-on-4-17, another-on-4-20, one-on-4-20

ParticleEnterTeamSight

What a server sends as a particle comes into what one side can see. The header carries zero.

Definition.

In every range of this book

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

BuildsCommand
4.1–4.10225
4.11–4.20226
FieldTypeWhat it is
particleu32The particle.
teamu8Which side, by an index.
Vectors (4)

another-on-4-10, one-on-4-10, one-on-4-17, one-on-4-20

ParticleLeaveTeamSight

What a server sends as a particle passes out of what one side can see. The header carries zero.

Definition.

In every range of this book

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

BuildsCommand
4.1–4.10226
4.11–4.20227
FieldTypeWhat it is
particleu32The particle.
teamu8Which side, by an index.
Vectors (4)

another-on-4-10, one-on-4-10, one-on-4-17, one-on-4-20

LeaveLocalSight

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

Definition.

In every range of this book

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

BuildsCommand
4.1–4.1052
4.11–4.2053

No body.

Vectors (4)

another-on-4-10, one-on-4-10, one-on-4-17, one-on-4-20

RegionAdded

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

Definition.

In 4.1–4.17

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

A region grants sight, blocks the way, or grows cover.

FieldTypeWhat it is
sideu32The side the region belongs to.
kindi32What sort of region it is. A client makes one only for 0, a circle. Values: 0 circle.
clientIdu32The client id of the client the region answers to.
unitu32The unit the region follows, or zero where it stands still.
markeru32The name the region answers to, which RegionRemoved names to take it away.
sightFromu32The unit whose sight the region grants, or zero.
atXf32Where the region sits, along one ground axis, in world units.
atZf32Where it sits, along the other, in world units.
lifetimef32How long it lasts, in seconds. A lifetime of 0 never runs out.
lineOfSightRadiusf32How far out the region’s line of sight is reckoned, in world units.
grassRadiusf32How far out it grows cover, in world units.
sizeMultiplierf32What its stated radius is scaled by.
sizeAdditivef32What is added to its stated radius after scaling, in world units.
does4-byte bits
does.lineOfSightbit 0Set where walls and terrain cut the region’s sight.
does.grantSightbit 1Set to turn on the region’s sight; sightFrom and revealHidden apply only where it is set. Where it is set, a client clears its map’s cover over the region.
does.revealHiddenbit 2Set to show hidden units within it, where grantSight is set.
does.unusedbit 3 to 31Unused; a server writes zero.
baseRadiusf32The region’s radius, in world units.
Vectors (1)

one-on-4-17

In 4.18–4.19

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

A region grants sight, blocks the way, or grows cover.

FieldTypeWhat it is
sideu32The side the region belongs to.
kindi32What sort of region it is. A client makes one only for 0, a circle. Values: 0 circle.
clientIdu32The client id of the client the region answers to.
otherUnitu32A second unit a client looks up and keeps with the region, or zero.
unitu32The unit the region follows, or zero where it stands still.
markeru32The name the region answers to, which RegionRemoved names to take it away.
sightFromu32The unit whose sight the region grants, or zero.
atXf32Where the region sits, along one ground axis, in world units.
atZf32Where it sits, along the other, in world units.
lifetimef32How long it lasts, in seconds. A lifetime of 0 never runs out.
lineOfSightRadiusf32How far out the region’s line of sight is reckoned, in world units.
grassRadiusf32How far out it grows cover, in world units.
sizeMultiplierf32What its stated radius is scaled by.
sizeAdditivef32What is added to its stated radius after scaling, in world units.
does4-byte bits
does.lineOfSightbit 0Set where walls and terrain cut the region’s sight.
does.grantSightbit 1Set to turn on the region’s sight; sightFrom and revealHidden apply only where it is set. Where it is set, a client clears its map’s cover over the region.
does.revealHiddenbit 2Set to show hidden units within it, where grantSight is set.
does.unusedbit 3 to 31Unused; a server writes zero.
baseRadiusf32The region’s radius, in world units.
Vectors (1)

circle-on-4-18

In 4.20

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

A region grants sight, blocks the way, or grows cover.

FieldTypeWhat it is
sideu32The side the region belongs to.
kindi32Unused; a client makes a circle whatever it holds. A server writes 0.
objectu32An object the region keeps hold of, or zero; it changes nothing a client shows.
unitu32The unit the region follows, or zero where it stands still.
markeru32The name the region answers to, which RegionRemoved names to take it away.
sightFromu32The unit whose sight the region grants, or zero.
atXf32Where the region sits, along one ground axis, in world units.
atZf32Where it sits, along the other, in world units.
lifetimef32How long it lasts, in seconds. A lifetime of 0 never runs out.
lineOfSightRadiusf32How far out the region’s line of sight is reckoned, in world units.
grassRadiusf32How far out it grows cover, in world units.
sizeMultiplierf32What its stated radius is scaled by.
sizeAdditivef32What is added to its stated radius after scaling, in world units.
does1-byte bitsWhat the region does, in one byte.
does.lineOfSightbit 0Set where walls and terrain cut the region’s sight.
does.grantSightbit 1Set to turn on the region’s sight; sightFrom and revealHidden apply only where it is set. Where it is set, a client clears its map’s cover over the region.
does.revealHiddenbit 2Set to show hidden units within it, where grantSight is set.
does.unusedbit 3 to 7Unused; a server writes zero.
baseRadiusf32The radius the three size figures above are applied to, in world units.
Vectors (2)

another-on-4-20, one-on-4-20

RegionMoved

What a server sends to move a region of sight, keeping all else about it. The header carries zero.

Definition.

In 4.11–4.20

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

FieldTypeWhat it is
regionu32The region, as RegionAdded named it.
xf32Where its centre now stands, in world units.
zf32Where its centre now stands, in world units.
Vectors (2)

one-on-4-17, one-on-4-20

RegionRemoved

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

Definition.

In every range of this book

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

BuildsCommand
4.1–4.1050
4.11–4.2051
FieldTypeWhat it is
regionu32The region to take away, by the name RegionAdded gave it.
Vectors (6)

a-third-on-4-10, another-on-4-10, one-on-4-10, one-on-4-17, another-on-4-20, one-on-4-20

FogSet

What a server sends to turn the drawing of the fog of war on or off. It changes only what is drawn. The header carries zero.

Definition.

In every range of this book

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

BuildsCommand
4.1–4.10170
4.11–4.20171
FieldTypeWhat it is
state1-byte bitsWhether the fog is drawn.
state.drawnbit 0Set to draw the fog, clear to draw the map with no darkening.
state.unusedbit 1 to 7Unused; a server writes zero.
Vectors (3)

one-on-4-10, one-on-4-17, one-on-4-20

FogToggled

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

Definition.

In every range of this book

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

BuildsCommand
4.1–4.10125
4.11–4.20126

No body.

Vectors (3)

one-on-4-10, one-on-4-17, one-on-4-20