DocsSetup & automation

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

FieldTypeWhat it does
componentidThe single component to place. Provide exactly one of component or group
groupid (.optional())Place every card in this card group (a deck) instead of a single component
zoneidTarget zone. For a tableau, a grid zone spreads a bulk placement one-per-cell
countnumber (.optional())How many copies to place. Absent → all (for a group) or one
faceUpboolean (.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
cellstring (.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)
rotationnumber (.optional())How the piece is turned when it lands, in degrees clockwise. Absent → upright. See Rotation
seatnumber (.optional())Target one specific seat’s copy of a perSeat zone (0-based). Mutually exclusive with perSeat
perSeatboolean (.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:

  1. An explicit faceUp on the placement wins.
  2. 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.
  3. Otherwise the target zone’s faceOnEnter decides: up / owner / othersOnly → face up, down → face down. (owner means "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.)
  4. 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. Any view: owner / othersOnly zone opens face up, as does a supply, discard, or play zone, matching a physical table; a bag arrangement is excluded from both, since a bag is concealed whatever it is.
  5. 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 / placement faceUp / 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.

Sign in to ask Pip about building games.
Sign in