Skip to content
Merged
2 changes: 1 addition & 1 deletion docs/animation.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Give any object a **clip**: a named animation made of keyframes. Open a door, ru

## Opening the timeline

Select an object, then open the **+ Animation** tab — it sits with Flow and the UV editor in the bottom dock, and undocks into a floating window with the ⧉ button.
Select an object, then open the **+ Animation** tab — it sits with Flow and the UV editor in the bottom dock, and the dock's **Undock** button (right end of the tab strip) takes it out as a floating window.

The window has three parts:

Expand Down
37 changes: 30 additions & 7 deletions docs/avatars.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,21 +14,44 @@ Nine characters ship with the app: **Knight**, **Mage**, **Rogue**, **Hooded rog

![The nine characters](img/avatars/characters.png)

If you never pick one, you get **Surprise me**: a character chosen from your id, so everyone sees the same one for you.
If you never pick one, you get **Auto**: a character chosen from your id, so everyone sees the same one for you.
The same characters are also an Explorer pack, **Packs ▸ Adventurers**, that you can place in a scene as animated
models (see [Packs](packs.md#adventurers-124)).

## Customize Character

Profile menu (your picture, top right) ▸ **Customize Character** — also **Settings ▸ Interface ▸ Avatars ▸ Customize
character…**. A side panel opens and the camera moves to **your own character**, standing where you are, so you see
yourself the way other people do.
character…**. A drawer opens (a bottom sheet on a phone) and puts **your own character** in a plain **studio**: a
neutral backdrop in your theme's colours, a floor disc and a soft key light.

![The Customize character panel with the camera on your own character](img/avatars/customize-panel.png)
![Customize character on a computer: your character in the studio on the left, the drawer with Show in scene, Surprise me and the presets on the right](img/avatars/studio-desktop.png)

### The studio

The scene is hidden from *your* view only while you customise — nothing in it changes, and other people in the session
keep seeing the scene (and you) as before.

- **Orbit** — drag in the free part of the view to turn the camera around your character like a turntable; the wheel or
a pinch zooms.
- **Show in scene** — the switch at the top of the panel previews your character in the current scene instead, handy to
check how a colour reads against the world. The choice is remembered for next time.
- Your whole character **stays in view** whatever the screen does: resize the drawer or the window, rotate a phone, or
fold or unfold a foldable — the camera re-frames on every layout change.

### Choosing a look

- **Presets** — **Auto** (picked from your id), the nine rigged characters (step through them with ‹ ›) and the
**Classic head**. Picking one shows *its* defaults: its own head, no hat, its own outfit colours.
- **Custom** — change any part (head, hat, outfit or head colour) and a **Custom** entry appears and is selected.
Picking a preset again resets to that preset; picking **Custom** brings your edits back.
- **Surprise me** — a new random character on every press: body, head, hat and colours, never the same one twice in a
row. A surprise you like is your Custom look; press **Apply** to keep it.

The name label and your ping colour and sound are your own preferences: presets and Surprise me leave them alone.

| Section | What you choose |
|---|---|
| **Character** | one of the nine — step through them with ‹ › — or **Surprise me** or **Classic head** |
| **Character** | a preset — **Auto**, one of the nine, or **Classic head** — or **Surprise me**; your own edits are **Custom** |
| **Head** | the character's own head, a stylised **Sphere**, **Box**, **Capsule** or **Cone** in your colour, or **My photo** (your profile picture on a card; needs a profile photo) |
| **Hat** | None, Cap, Top hat or Crown — it sits on whatever head you chose |
| **Colours** | **Outfit** recolours the character's clothes (skin and face keep theirs; **Original** puts them back); **Head** colours a stylised head or the classic avatar |
Expand All @@ -40,8 +63,8 @@ narrower — the keyboard works too (focus the edge, then the arrow keys; <kbd>S
camera keeps your character in the part of the screen the drawer leaves free. The size is remembered on this device.

Every change shows on your character at once; nothing reaches other people until you press **Apply**, which saves it and
shows it to everyone. **Cancel**, <kbd>Esc</kbd> or ✕ throw the changes away. Either way the camera returns exactly to
where your view was before you opened it.
shows it to everyone. **Cancel**, <kbd>Esc</kbd>, ✕ or swiping the sheet away throw the changes away. Either way the
camera and the scene come back exactly as they were before you opened it.

## Showing everyone as classic heads

Expand Down
7 changes: 4 additions & 3 deletions docs/code-workspace.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,10 @@ It opens by itself when you ask for code:
- the dock's **+** menu ▸ **Code**, or the optional `{}` toolbar button (add it with *Customize the toolbar*);
- **Graph JSON** in the workspace's header opens the graph the Node editor is showing.

It docks as a tab at the bottom, beside the Node editor and the Explorer, or floats as a window (**⧉** to float,
**⇩ Dock** to put it back). Everything on this page works in both. In a narrow window or on a phone the
[sidebars](#sidebars) open **over** the editor, one at a time (toggle buttons in the header).
It docks as a tab at the bottom, beside the Node editor and the Explorer, or floats as a window (the dock's **Undock** button to float,
the window's **Dock** to put it back). Everything on this page works in both. In a narrow window or on a phone the
[sidebars](#sidebars) open **over** the editor, one at a time (toggle buttons in the header); on a phone they start
hidden, and one you open stays open next time.

When the workspace has the keyboard, it keeps it: <kbd>W</kbd><kbd>A</kbd><kbd>S</kbd><kbd>D</kbd> never fly the camera
from here (see [Keys follow the panel you are in](controls.md#keys-follow-the-panel-you-are-in)). In the undocked
Expand Down
45 changes: 38 additions & 7 deletions docs/connection.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,41 @@ It has two halves:
- **📋 Your ID** — the button on the left shows your own peer ID. Click it to **copy your invite link** (your app URL with your ID attached, e.g. `https://theprototype.app/#AB12CD`) to the clipboard. Until the connection to the signaling server is ready it reads *Generating…*.
- **Connect field** — paste a peer's ID into *Enter peer ID to connect* and press **Connect** to request a connection.

Since 1.30, once you are connected the bar **collapses to a compact chip** — a status dot, the session, the avatars
of who is here and your mic; click it to open the full bar again (its collapse button folds it back). While the signaling link
is down the status badge says how long it has been trying (*Reconnecting · 2 min*); the attempt count is in the drawer's
**Info** tab. On a phone the bar is always the chip — tap it for your ID, the join field, Info and Toasts.
Since 1.30, once you are connected the bar **collapses to a compact chip** — the status dot, the avatars of who is here
and your mic; click it to open the full bar again (its collapse button folds it back). On a phone the bar is always the
chip — tap it for your ID, the join field, Info and Toasts. The signaling link's attempt count is in the drawer's
**Info** tab.

### The status dot

Since 1.32 the connection status is a **coloured dot**. On a computer the full bar keeps your invite ID and the peer-ID
field, with the dot at its left end. On a phone the chip at the top of the screen says the state beside the dot —
**Connected**, **Connecting…** or **Offline** — whenever the top bar has room. When the bar is crowded (people are
connected and you are in a call, so the peers button and the microphone take the space) it shrinks back to the dot and
a ▾ (and the microphone while you are in a call).

| Dot | Means |
|---|---|
| grey | not connected |
| yellow, pulsing | connecting, waiting for someone to approve, or reconnecting to the peer server |
| green | connected |
| red | the peer server cannot be reached (the app keeps retrying) |

Point at the dot — or press and hold it on a touch screen — for the full sentence, such as *Connected to 2 peers*;
while the signaling link is down it also says how long it has been trying. On a phone a tap on the chip opens the full
connection details.

![The phone's top bar when it is crowded: the logo, the connection chip with a green dot, ▾ and the microphone, then the bell and the peers](img/connection/status-dot-phone.png){ width="420" }

### Who is here: the peers panel

The peers button in the top bar (beside the bell, with the number of people) opens the **Connected** panel. Its header
matches the notification centre's, and each person is **one row**: their avatar, their name (shortened with … — point
at it for the full name), a second line with where they are and their role, and their actions on the right — **Watch**,
**Go to** or the role list. On a computer the panel is 320–420 px wide and grows with long names, so nothing wraps or
breaks. On a phone it opens as a sheet like the notifications: a grab bar on top, and a swipe down closes it.

![The Connected panel on a computer: five people, one row each — avatar, name, the scene they are in and their p-number underneath, and Editor or Viewer with Go to or Watch on the right](img/connection/peers-panel-desktop.png){ width="515" }

### Inviting someone

Expand Down Expand Up @@ -123,7 +154,7 @@ A momentary network blip no longer throws you out, either. A peer that drops for

## When the signaling link drops

The link to the signaling server is not the link to your peers — losing it does not end a session you are already in, it only stops new people finding you. When it drops the app reconnects on its own, backing off a little further between tries and **never giving up**, and the Connect pill carries a chip while it is retrying so a dead link does not read as a dead app. Coming back online, or returning to the tab, retries immediately instead of waiting out the backoff. A peer connection that closed is rebuilt rather than abandoned.
The link to the signaling server is not the link to your peers — losing it does not end a session you are already in, it only stops new people finding you. When it drops the app reconnects on its own, backing off a little further between tries and **never giving up**, and the [status dot](#the-status-dot) pulses yellow while it is retrying so a dead link does not read as a dead app. Coming back online, or returning to the tab, retries immediately instead of waiting out the backoff — and since 1.32 it does so **silently**: switching apps on a phone and coming back no longer toasts. If the server stays unreachable for about a minute, the dot turns red and **one** entry appears in the notification centre; the retries carry on. A peer connection that closed is rebuilt rather than abandoned.

## Diagnostics you can copy

Expand Down Expand Up @@ -172,5 +203,5 @@ It carries an **Open Settings** button that jumps straight to **Settings ▸ Con
| *AB12 declined your connection request* | The host pressed **Reject**. Ask them before dialling again. |
| *AB12's session is full (16 people)* | Everyone connects to everyone, so a session has a ceiling. Someone has to leave before another person can join — **Try again** on the toast re-asks. |
| *Could not reach … — back on your previous peer server.* | **Apply** could not open the server you picked, so nothing changed — check the host, port and path. |
| *Lost the peer server - reconnecting...* / *The peer server closed the link - reconnecting...* | The link to the signaling server dropped; the app retries on its own and never gives up. *Reconnected to the peer server.* confirms it is back. Your open session keeps going meanwhile. |
| *Cannot reach the signaling server - the connection request was not sent.* | You pressed **Connect** while the signaling link is down. Wait for the reconnect chip to clear, or switch servers in Settings ▸ Connection. |
| A **red** status dot, and one *Can't reach the peer server — still retrying.* entry in the notification centre | The link to the signaling server has been down for about a minute; the app keeps retrying on its own and never gives up, and the dot turns green or grey again once it is back. Shorter drops — a tab switch, a moment offline — reconnect silently. Your open session keeps going meanwhile. |
| *Cannot reach the signaling server - the connection request was not sent.* | You pressed **Connect** while the signaling link is down. Wait for the status dot to stop pulsing, or switch servers in Settings ▸ Connection. |
Loading