The 3D layer never feeds back

The browser receives zones and activities and decides everything about bodies: where they walk, which way they face, what gesture they make. Nothing in the rendering layer may write back to the simulation except a click to select.

The contract

The server says: this person is at the railing, doing gossip, aimed at that person. The browser walks the figure there at walking pace, turns it to face its target, and drifts it while it stands. If the renderer needs to know something, that something goes in the world state and not into a variable in a component.

One gesture per action kind

POSES maps every engine ActionKind to a gesture. An offer is an open hand, a rumour is a hand at the mouth, a toast raises a glass, a refusal leaves you with your arms down. Add an ActionKind, add a pose: the map is exhaustive on purpose, so a new rule cannot be invisible.

Focus: the last loud public thing

Set once per snapshot instead of per frame. Everyone near it turns their head, a shock ring runs across the floor, and the camera eases onto it and pushes in, then hands control straight back the moment you touch anything.

A camera that keeps taking the shot back is the most irritating thing a live simulation can do. Yield on first input, always.

Furniture

LocationSpec.standOff is how far back people stand in a zone with something in the middle of it. Without it, the room stands on the card table, which is the kind of bug that makes a scene read as tokens instead of people and costs nothing to fix once you know the zone has a shape.

Read next

More on the build