Setup placements
A setup placement is one line of the opening arrangement: “put these components into this zone.” The list of placements is the snapshot of the table the moment the game starts — every deck stacked, every player’s starting pieces in front of them, the board seeded. After setup runs, taybl steps back and players move everything by hand.
Each placement names what to place and where it goes. What is either
a single component or a whole group of cards (a
deck — every card in the group). Where is a zone; for a
tableau of interchangeable positions, target a grid zone and a
bulk placement auto-spreads one component per cell.
How to edit in the Studio
Open your game → Layout tab. The Setup inspector groups placements into one card per kind (Land hexes ×19, Number tokens ×18) with a per-piece list inside each card. Positions read as human labels derived from the board (N · outer, Centre) — never raw cell ids. Hover a card, an inventory chip, or a row and the matching cells glow on the board; click any cell on the board to edit what starts there in a popover. Use + Add placement for a new line, and drag a placed component on the table to relocate it.
Putting a piece exactly where you want it
An open-play zone has no named cells — a piece just sits at a spot. So you place one by dragging it there: switch to Setup, grab the piece on the canvas, and drop it where it should start. That spot becomes the placement’s position, and the game opens with the piece there.
Dragging one copy out of a stack splits it off. A placement that puts down three meeples is one line, and all three start in the same spot; drag one away and you get two lines — the two you left behind, and the one you moved, now with a position of its own. Do it again and you have three pieces in three places, each moving on its own from then on.
When the exact numbers matter more than the gesture, the placement editor has Across and Down — millimetres from the centre of the zone, so 0, 0 is the middle. Drag roughly, then nudge. Clear — let it auto-place takes the position off again and lets taybl park the piece for you. The same pair lives in the Sheet view’s Position column if you are editing many at once.
Setup edits are not undoable, so a drag you did not mean is undone by dragging the piece back, not by ⌘Z.
Removing placements
Click a row to open its editor and Delete placement to remove that one. To clear more at once, each card carries a Delete all n button: press it with nothing ticked and it removes every placement in the card. For a partial clear-out, tick the checkbox beside the rows you want gone (or Select all) and the button becomes Delete selected. Either way the button expands into a confirmation naming exactly what will go, because setup edits are not undoable — the only way back is discarding all your unsaved layout changes. Emptying a card that is set to Random also removes the scatter step that shuffled it, so you are not left with a board-setup choice that does nothing.
Fixed vs Random (board setup)
Each group card carries a Fixed | Random toggle. Fixed keeps your
hand-placed layout every game. Random scatters that group’s pieces across
their cells fresh each game — taybl auto-creates a Board setup option
(Recommended / Random) on the pre-game screen and writes a gated
scatter automation step for you. A Random group
reveals its scatter rules checklist (e.g. never put 6 & 8 next to each
other) and renders on the board with a dashed “?” over your layout, which
stays visible as one example roll. The top-level Recommended/Random pair
flips every group at once; mixing them reads as a Custom mix.
The same decision is the Random column on Sheet mode’s Placements tab, one row at a time — so you can shuffle twelve of nineteen hexes and pin the other seven. Select the rows you want and fill the column down to do a whole board at once. Rows in the same card share one scatter, so their pieces are dealt across the same set of cells; use Group tag to split a pool taybl has grouped together.
One limit worth knowing: a scatter names components, not placements. Two rows placing the same component are a single decision, and both will show the same tick.
Shuffle / deal / set-property steps are not placements — those live in Settings → Setup automation (see setup automation).
Fields
| Field | Type | What it does |
|---|---|---|
component | id | The single component to place. Provide exactly one of component or group |
group | id (.optional()) | Place every card in this card group (a deck) instead of a single component |
zone | id | Target zone. For a tableau, a grid zone spreads a bulk placement one-per-cell |
count | number (.optional()) | How many copies to place. Absent → all (for a group) or one |
faceUp | boolean (.optional()) | Place face up (true) or face down (false). Wins over the zone’s faceOnEnter; absent → the zone’s faceOnEnter decides, and with neither set the zone’s role does (a supply / discard / play pile opens face up, a draw deck face down). See Facing |
cell | string (.optional()) | A specific grid cell / node / edge id when the target is a grid zone, or a freepoint_x_y drop point on an open-play zone — whole millimetres from the centre of the zone’s box, authored by dragging the piece on the canvas or typing the Across / Down pair. Meaningless with group (every card would land on the one point) |
rotation | number (.optional()) | How the piece is turned when it lands, in degrees clockwise. Absent → upright. See Rotation |
seat | number (.optional()) | Target one specific seat’s copy of a perSeat zone (0-based). Mutually exclusive with perSeat |
perSeat | boolean (.optional()) | Apply once into every seated player’s copy of a perSeat zone (e.g. “each player starts with one worker”). Requires the target zone’s scope: perSeat |
whenPlayers | { min?, max? } (.optional()) | Only apply this placement when the seated player count is within [min, max]. Absent → always. Lets setup scale with table size |
whenOption | { option, equals } (.optional()) | Gate this placement on chosen setup option values. equals takes one value or a list of them (any of which matches), and whenOption itself can be a list of gates that must all hold. A gated placement is deferred until the players press Start Game and only applies when the gate matches — its components stay unplaced until then |
Rotation
A placement can say which way up a piece starts. rotation is degrees
clockwise — 90 lays a card on its side, 180 turns a tile end for end — and
applies on any zone: a grid cell, a graph node, an open-play drop point.
Absent means upright, which is what every placement without one does.
If the component declares a snap set — a Rotate by step, or an explicit list of orientations — the authored angle is rounded onto it as the piece is placed. That rounding happens once, at setup, so what the table shows and what the definition stores are the same number. A component with no snap set keeps the angle exactly as written, to the degree.
Rotation is the piece’s own, measured inside its zone. Tilting a zone’s box in Arrange mode does not change it, and neither does a seat’s viewing angle — a piece placed at 90° reads the same way round for every player.
One thing ignores it: a deck drawn as a single surface image shows that image unturned. Everything else — cards, pieces, tokens, dice, pads — honours it.
Facing
The faceUp rule is the same for every zone arrangement — stack, fan,
grid, scatter, slot. It is applied to each placed copy individually; the
arrangement only changes the geometry (a pile vs. a spread vs. cells), never
the facing. The engine resolves each object’s face in this order:
- An explicit
faceUpon the placement wins. - Then the space’s landing rule, if the zone has one — a rule can say the second copy arrives face-down where the first did not.
- Otherwise the target zone’s
faceOnEnterdecides:up/owner/othersOnly→ face up,down→ face down. (ownermeans "turned towards its owner", not "hidden" — a hidden zone conceals by ownership, so its cards sit face-up and it is the zone that keeps them private.) - With neither set (or
faceOnEnter: keep), the target zone’s visibility and then its role decide — because at setup there is no "current facing" to keep. Anyview: owner/othersOnlyzone opens face up, as does asupply,discard, orplayzone, matching a physical table; abagarrangement is excluded from both, since a bag is concealed whatever it is. - Failing all of that, the object keeps its creation default — face down
for a card or a piece/token that has back art, face up for a backless
piece/token (which would otherwise start hidden for no reason). Starting
face-down is therefore driven by zone
faceOnEnter/ placementfaceUp/ zone role, not by a per-component flag.
faceUp applies to every card, piece, and token — they are all flippable,
so any of them can be dealt face-down. Back art is optional: a component with
no back shows a generic back when face-down. (Dice and other non-flippable
kinds ignore faceUp.) Note that facing
is the object’s physical orientation — what an opponent actually sees is
separately governed by the zone’s view (zone
visibility), which redacts hidden faces before they
reach other players.
Setup options & variants
A placement can belong to a variant — a beginner-vs-random board, a short-
vs-long game. Pair it with a setup option via
whenOption: the placement is held back at game start and only applied at
Start Game, against the value the players picked. Model both sides of a
choice as whenOption-gated (e.g. a beginner placement with fixed cells and
a random placement onto the grid zone) so the opening arrangement places
neither by default and the component pool stays intact for whichever variant
wins. Every game with a choice to make gets that
pre-game screen, whatever its player count, so a
gated placement always has its moment to be applied. For a randomized board
variant, prefer the Fixed/Random toggle above — it writes the
whenOption-gated scatter step for you.
One placement, several variations
A gate is not limited to one value. In the Setup inspector, Runs for shows a row of chips per declared option, and you tick every value the placement should run for. Within a row the chips read as any of these; across rows they read as all of these. So a token used by four of five game modes is one placement with four chips lit — not four near-identical placements you then have to keep in step by hand — and a piece that only appears in the harsh modes and with the expert module on is one placement with a chip lit in each of the two rows.
Leaving every chip unticked means the placement runs in every game. That is not the same as ticking all of them: an ungated placement is put out at init, while any gated placement — however broad its gate — waits for Start Game. So ticking every value of an option simply clears that row back to “no constraint”, which keeps an always-placement on the table from the moment the game opens.
Delete a choice that a multi-value gate names and the placement is not deleted — it loses that one value and goes on running for the rest. Only when the last value it named disappears does the placement go with it.
The Placements tab in Sheet mode holds a gate in two cells — one variant, one value — so it can only edit the simple case. A placement gated on several values shows those cells locked, and is edited in the Setup inspector (or by asking Pip).
seat and perSeat are mutually exclusive — a placement targets either one
specific seat or all of them. Both require the target zone to have
scope: perSeat; a shared-scope zone is filled once, plain. See
zone scope for the shared-vs-per-seat distinction.
Editing them in bulk
The Setup-mode inspector groups placements into cards, which is the right shape for placing things by eye. For a game with dozens of them, the Placements tab in Sheet mode is the flat list — one row per placement, every field a column, and the target zone lit up on the table as you move down it.
When a count walks a landing rule
If the destination has landing rules, a placement with a
count walks them: copy 1 takes row 1, copy 2 takes row 2, and so on — past
the end of the list the last row repeats. So count: 3 into one space is the
same as a player dropping three pieces there by hand, which is the point.
An explicit faceUp or rotation on the placement still wins over the row;
leave those blank to let the landing rule decide.
A placement with no fixed space spreads across the board one copy per cell. On an empty board every copy is that cell’s first arrival and takes row 1; onto a board that already holds one of that kind per cell, each copy is that cell’s second arrival and takes row 2. A second placement into a full row therefore tucks one card under each of the cards already there.
Related
- Landing rules — how the second thing in a space differs from the first
- Sheet mode — the Placements tab, one row per placement
- Setup automation — shuffle, deal, and starting properties
- Components overview — the things you place
- Grids — placing into a specific cell, node, or edge, or spreading a tableau
- Zone scope — when
seat/perSeatapply