Workflows
Workflow: Making a Variant of Your Game
Add a second set-up to a game (a smaller board, a bigger table, play by hand, a ranked version), then switch variants, preview each and publish.
On this page9 sections
A variant is the same game, set up differently, and the room's owner picks one in the lobby. This page builds one end to end: a Go game that has a 19×19 board gets a 9×9 variant. Three shorter cases follow — a bigger table with the same entities, the same game played by hand and a ranked version.
Variants are for game packs, in the Game Editor or the Full Editor. For what they are and when to use a setup option instead, see Game variants.
The one idea to hold#
You edit one variant at a time, and the top bar says where each edit goes.
- With Changes apply to: Only variant, an edit becomes that variant's own difference.
- With Changes apply to: All variants, an edit goes to the base and reaches every variant that has not changed that same thing itself.
Nothing has to be planned in advance. There are no "shared" or "separate" switches to set before you start: a variant owns part of the scene because you changed that part while editing it.
Steps: Go, 19×19 and 9×9#
You start with a working game: a 19×19 board, a 19×19 snap grid over it, and two bowls of stones.
- Open the Variants dialog. Click Variants on the logo bar, or ▸ . It reads "This game has one way to play."
- Create the variant. Type
9×9in the name field and click Create a variant. Two things happen at once, and the status line says so: Created 9×9. Your scene so far is now the base variant, "Standard". The scene you had is now a variant called Standard; 9×9 starts as a copy of it; and the editor has switched to 9×9. - Name what players will see. Still in the dialog, choose Standard in the Variant
dropdown and change its Name to
19×19. Give both variants a one-line Description if the names do not say enough. Close the dialog. - Read the top bar before you touch anything. It should say Variant: 9×9 and Changes apply to: Only 9×9. That second control is what makes the next steps safe.
- Delete the big board. Select the 19×19 board in the Hierarchy and delete it. It is removed
from this variant only. If you want to see that for yourself, switch Variant to
19×19 (base)— the board is there — and switch back. - Delete the big snap grid. In the
Snap Pointsfolder, delete the 19×19 grid's row. From this edit on, 9×9 has its own Snap points. - Add the small board. Place it the way you placed the first one — see
Making a board from an image. Its row in the
Hierarchy is marked
only here. - Add the small snap grid. With the Snap tool's Grid sub-tool, lay a 9 × 9 grid over the new board.
- Leave the bowls and stones alone. You did not change them, so both variants share them. If you later fix a stone's material while editing 19×19, 9×9 gets the fix.
- Check what you made. Open Variants again and choose 9×9. Under What 9×9
changes it should read Entities:
1 added · 1 removedand Snap points:Its own, with everything elseSame as 19×19. If a row saysIts ownthat you did not intend, Use 19×19's hands it back. - Preview each variant. Click Preview — it opens the variant on screen, so this is the
9×9 game. Then switch Variant to
19×19 (base)and click Preview again to confirm the original is exactly as it was. - Decide the lobby's default. In the dialog, Lobby order moves a variant up or down. The first one is what a lobby starts on.
- Save Draft, then Publish as usual. If the game is already published, bump its version first — a published version cannot be republished with different contents.
Definition of done#
- The top bar's Variant dropdown lists both variants, and switching between them swaps the board and the grid and nothing else.
- In 9×9, the small board's Hierarchy row is marked
only here, and the big board is absent. - The Variants dialog's summary for 9×9 lists only the differences you meant to make.
- Preview from each variant opens that variant, at the right size, with stones that snap to its own grid.
- After publishing, a lobby for the game shows every variant as a card under How do you want to play?, at the top of the lobby, badged with what it offers (rules enforced, AI opponents, Ranked). The room's owner picks one; everyone sees which is chosen.
A bigger table, same entities#
Six seats and ten seats, same cards. Create a variant called Ten players, and while editing it
with Only Ten players selected:
- Change what has to grow. Assign the larger table to the
Tablerow (Assigning a room or table) — the variant now has its own Table & room. Raise the seat count and arrange the seats (Player Zones and seat templates) — it now has its own Seats & zones. - In the Variants dialog, turn on Own player range for the variant and set Max to
10. This is what lets a room's owner raise the seat cap that far for this variant, and the lobby prints the range beside the variant's name.
The deck, the dice and everything else on the table stay shared. Do both halves: a player range without the seats offers ten people a table laid out for six, and seats without the range leave the lobby's seat cap at the game's own maximum.
The same game, by hand#
A scripted game, and the same entities with nothing automated. Create a variant called By hand,
and while editing it with Only By hand selected, take its scripts off:
- Scene scripts. Detach each script from the scene. The variant now has its own Scene scripts (an empty list), and the scripted variant keeps its own.
- Entity scripts. Remove the script from each entity that has one. Those entities are marked
changedin this variant only.
Then check the two scripts a variant cannot detach:
- The entry script runs in every variant. If your game has one and it should do nothing by hand,
have it read
api.getVariant()and return whenidis"by-hand"(example). - Prefab scripts are shared by every variant, so a piece spawned from a scripted prefab still runs its script.
If your scripts set the table (deal the opening hands, spawn the pieces), the by-hand table starts
without them, so place those entities yourself while editing By hand. They are marked only here
and the scripted variant never sees them.
A bot whose handler no remaining script registers cannot sit down in this variant; the lobby says so. Preview from the by-hand variant runs exactly the scripts it attaches, so it shows what players get.
Projects made before 2026-10 may have a Run scripts switch turned off on a variant. Opening such a project converts it once: that variant's scene and entity scripts are detached in its own scene, as above, and the status line reminds you about the entry script. Save to keep the change.
A ranked version#
The same rules, enforced by the script, with a result that counts. Your scene script must already
enforce the rules and report the result with match.end; see
Matches and Variants.
- Open Variants, choose the variant, and switch Fully scripted on. A Ranked play section appears with every setting at its default.
- Read its checklist. Match end must be ticked: a script attached to this variant calls
match.end. If your game has a rules kernel, Rules kernel should be ticked too. - Change only the settings your game needs: Offer draw button for a game where draws by agreement make sense, Allow takebacks off for a game with irreversible hidden draws, a higher Placement games for a game with a lot of luck.
- Publish. The lobby shows Fully scripted and Ranked available beside the variant, and the room's owner can switch Ranked on.
Leave Rank on Seats: ranking teams cannot be published yet. What players can expect from a ranked match is on Ranked games, Rankings and Player Trust.
Fixing things afterwards#
| You want to | Do this |
|---|---|
| Undo one variant's change to one entity | Select the entity while editing that variant, then Revert in the Inspector's Variant row |
| Give one variant's version of an entity to all of them | Apply to all in the same row |
| Take an entity out of one variant | Remove here in the same row, or delete it with Only variant selected |
| Bring back an entity a variant removed | Variants dialog ▸ Removed from variant ▸ Restore |
| Make a variant follow the base's seats, snap points, table or scene scripts again | Variants dialog ▸ Use base's on that group's row |
| Change something in every variant at once | Edit it in the base variant, or set Changes apply to: All variants |
| Change which variant is stored whole | Variants dialog ▸ Make this the base — nothing a player sees changes |
If it fails#
- An edit showed up in every variant. Changes apply to was on All variants, or you
were editing the base. Undo (
Ctrl+Z), switch the control to Only variant, and redo the edit. - A fix made in the base did not reach a variant. That variant has its own version of the
thing you fixed — the entity is marked
changed, or the dialog shows the group asIts own. Revert the entity, or Use base's on the group, to make it follow the base again. For a group this is all-or-nothing: a variant with its own snap points has its own list of snap points, so a point added to the base afterwards is not in it. - Deleting an entity removed it everywhere. It was deleted with All variants selected, which deletes it from the base and therefore from every variant, including any that had its own version. Undo, then use Remove here.
- The Variants button is missing. The project is not a game pack, or it is open in the Room, Table or Asset Editor. Variants belong to games.
- The lobby shows no Variant dropdown. A game needs at least two variants for there to be a choice. Deleting down to one removes the list — and check the room is running the version you published.
- A script needs to know which variant is being played. Table scripts call
world.getVariant(), the entry scriptapi.getVariant()— see What a script can see. - Publishing was refused with a
ranked-variant-…code. Usually no script attached to the ranked variant callsmatch.end, or Rank is set to Teams. See the ranked-variant rules. - Publishing was refused with a
variant-…code. The manifest andsetup.jsonname different variant ids, which only happens after editing one of them by hand. See Variant rules.
See also#
- The variant controls and the Variants dialog — every control, in full.
- Variant marks —
only hereandchangedin the Hierarchy. - The Variant row — Revert, Apply to all, Remove here.
- Game variants — what is written to the manifest and to
setup.json. - Previewing a draft — what the preview tab loads.
- The publish flow — getting the variants to players.
