# `QuakeServer.Signon`
[🔗](https://github.com/jaman/quake_server/blob/v0.1.0/lib/quake_server/signon.ex#L1)

The messages FTE sends a client after the level's model and sound lists and before the
client begins (`SV_SendClientPrespawnInfo`, `SVQW_Spawn_f`): the static entities
(`makestatic`), oldest first, then the static sounds (`ambientsound`), then each player
slot's info keys.

    [message | _] = QuakeServer.Signon.messages(server)

Each is a binary holding one server message:

  * a static entity: `svc_spawnstatic` (20), the index of its model in the server's
    model list in 16 bits, its frame, colormap (0) and skin as bytes, then for each axis
    its origin's coordinate and its angle
  * a static sound: `svc_spawnstaticsound` (29), its origin's three coordinates, the
    index of its sound in the server's sound list as a byte, the volume × 255 and the
    attenuation × 64 as bytes; a sound past index 255 is `svcfte_spawnstaticsound2`
    (94) with a flags byte of 1 and the index in 16 bits after the coordinates. A sound
    not in the sound list is left out, as FTE's `ambientsound` leaves it.
  * a player slot's info: `svc_updateuserinfo` (40), the slot (the entity less one), the
    user id (the entity) in 32 bits, and the info string, `\key\value` for each key in
    order, with `name` as `QuakeServer.Server.player_name/2` gives it

Coordinates and angles are written as the server's `coords` sets
(`QuakeServer.Builtins.Write`): 32-bit floats and 65536ths of a turn in 16 bits, or
eighths of a unit in 16 bits and 256ths of a turn in a byte.

# `messages`

```elixir
@spec messages(QuakeServer.Server.t()) :: [binary()]
```

The server's static entities, static sounds and player info, as messages in that order.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
