# Readouts and messages

 Call Purpose --- --- say(text) / say(player, text) Brief line for everyone / one player panel(title, rows) / panel(player, title, rows) HUD with {{"SCORE", 3},

| Call | Purpose |
| --- | --- |
| `say(text)` / `say(player, text)` | Brief line for everyone / one player |
| `panel(title, rows)` / `panel(player, title, rows)` | HUD with `{{"SCORE", 3}, {"TIME", "0:12"}}` rows |
| `panel("")` | Clear the shared HUD |
| `banner(text[, seconds])` / `banner(player, text[, seconds])` | Brief centered announcement |
| `scoreboard(rows)` / `scoreboard(title, rows)` | Shared score table |
| `scoreboard(player, rows)` / `scoreboard(player, title, rows)` | Personal score table |
| `scoreboard({})` | Clear the shared table |
| `hud(text)` / `hud(player, text)` | Legacy title-only HUD |
| `log(text)` | Server log and private playtest log |

Shared and personal widgets use the most recent update for that player.
These compact readouts still have their original limits: 12 rows, titles of
32 characters, and message/row/log text of 200 bytes. Use a window for paragraphs.
