Reference
Editor Fields for AI Agents
Editor field ids for AI agents: the Edit Mode menu bar, top bar, Hierarchy, asset explorer, snap tools, scene scripts, manifest editor and game settings.
On this page32 sections
- Panels in this group
- editor.menu
- editor.topbar
- editor.rail
- editor.hierarchy
- editor.draft
- editor.viewport-toolbar
- editor.explorer
- editor.status-bar
- snap-point.point
- snap-point.grid
- snap-point.folder
- scene.scripts
- material
- manifest.details
- manifest.gameplay
- manifest.files
- manifest.plugins
- manifest.bots
- manifest.credits
- manifest.file
- agent.indicator
- editor.scene-snap-points
- scene.ui-layouts
- scene.highlights
- editor.menu.file
- editor.menu.edit
- editor.menu.view
- editor.menu.mod
- editor.menu.help
- editor.move-assists
- game.dice
These are the fields and buttons of the Edit Mode shell itself. That means the menus, the top bar, the Hierarchy and the asset explorer. It also covers snap tools, scene scripts, the manifest editor, materials and game settings. Use the ids with fields_set and actions_invoke.
Panels in this group#
31 panels, with the id prefixes editor, scene, manifest, snap-point, material, game, agent. The field catalogue lists every group.
| Panel | Label | Tab | Fields | Actions |
|---|---|---|---|---|
editor.menu |
Menu bar | editor |
0 | 2 |
editor.topbar |
Top bar | editor |
5 | 7 |
editor.rail |
Left rail and snap flyout | editor |
0 | 7 |
editor.hierarchy |
Hierarchy | editor |
1 | 4 |
editor.draft |
Draft and restore points | editor |
2 | 2 |
editor.viewport-toolbar |
Viewport toolbar | editor |
0 | 17 |
editor.explorer |
Asset explorer | editor |
10 | 41 |
editor.status-bar |
Status bar and problems | editor |
0 | 6 |
snap-point.point |
Snap point | editor |
5 | 2 |
snap-point.grid |
Snap grid | editor |
9 | 1 |
snap-point.folder |
Snap Points folder | editor |
0 | 2 |
scene.scripts |
Scene scripts | editor |
1 | 3 |
material |
Material inspector | editor |
58 | 4 |
manifest.details |
Manifest ▸ Details | editor |
14 | 20 |
manifest.gameplay |
Manifest ▸ Gameplay | editor |
40 | 15 |
manifest.files |
Manifest ▸ Files | editor |
6 | 10 |
manifest.plugins |
Manifest ▸ Plugins | editor |
2 | 7 |
manifest.bots |
Manifest ▸ Bots | editor |
20 | 12 |
manifest.credits |
Manifest ▸ Credits | editor |
0 | 0 |
manifest.file |
Manifest ▸ File | editor |
0 | 0 |
agent.indicator |
AI agent indicator | editor |
0 | 0 |
editor.scene-snap-points |
Snap point tools | editor |
9 | 8 |
scene.ui-layouts |
Scene UI layouts | editor |
2 | 5 |
scene.highlights |
Highlight styles | editor |
6 | 3 |
editor.menu.file |
File menu | editor |
0 | 0 |
editor.menu.edit |
Edit menu | editor |
0 | 0 |
editor.menu.view |
View menu | editor |
0 | 0 |
editor.menu.mod |
Mod menu | editor |
0 | 0 |
editor.menu.help |
Help menu | editor |
0 | 0 |
editor.move-assists |
Move assists | editor |
1 | 3 |
game.dice |
DICE (Game) | editor |
8 | 4 |
editor.menu#
Menu bar · surface editor · singleton (no target)
How it opens: Always mounted in Edit Mode; menus open on invoke.
Actions (2)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
editor.menu.open-in-mode |
Open in the matching editor | W | — | This mod is authored in a different editor mode; open it there (the page navigates to that editor for the same project). |
editor.menu.pack-updates |
Pack updates | R | — | Open the list of referenced packs with a newer published version. Opening it changes nothing. |
Per-instance action families
| Id pattern | Registered from |
|---|---|
menu.<menu>.<item>[.<sub-item>] |
One action per Edit Mode menu-bar item; the item segments are its label, slugged. |
editor.topbar#
Top bar · surface editor · singleton (no target)
How it opens: Always mounted in Edit Mode.
Fields (5)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
editor.topbar.preview-room |
in room | select |
— | — | W | — | Asset packs: the room pack the preview stands your pieces in (a pack id from the registry, or "" for the built-in room). Remembered for this project, never published. |
editor.topbar.preview-table |
on table | select |
— | — | W | — | Asset packs: the table pack the preview stands your pieces on (a pack id, or "" for the built-in table). Remembered for this project, never published. |
editor.topbar.preview-companion |
with / in room | select |
— | — | W | — | Room/table packs: what the preview shows alongside this pack (a table or game for a room, a room for a table). Remembered for this project, never published. |
editor.topbar.variant |
Variant | select |
— | — | W | — | Game packs with variants: which variant the editor is showing (a variant id; the live options). Switching swaps the whole scene view; nothing is lost and nothing is saved by switching. |
editor.topbar.variant-scope |
Changes apply to | select |
— | — | W | all, variant |
Where edits made while a non-base variant is shown are recorded: "all" writes them to the base scene so every variant gets them; "variant" records them as this variant's own differences. Fixed at "all" while the base variant is shown. |
Actions (7)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
editor.topbar.open-project |
Open project | R | — | Open the project picker (File ▸ Open Project…). |
editor.topbar.request-control |
Request editor control | W | — | Ask the tab that holds this project's editor lease to hand it over. The owning tab's user answers; a granted tab reloads. |
editor.topbar.save-state |
Save state and problems | R | — | Open what is unsaved or the Problems list (the save pill). |
editor.topbar.save-draft |
Save Draft | W | — | Save the draft (flushes every dirty item tab first). Same as Ctrl+S. |
editor.topbar.preview |
Preview | W | — | Save the draft, then open it in a peerless preview tab. Prefer the playtest_start tool, which pairs the preview tab. |
editor.topbar.publish |
Publish | R | — | Open the Publish dialog. Publishing itself is the human's click in that dialog. |
editor.topbar.variants |
Variants | R | — | Game packs: open the Variants dialog (create, describe and compare the ways this game can be set up). |
editor.rail#
Left rail and snap flyout · surface editor · singleton (no target)
How it opens: Always mounted; the snap flyout opens from its rail button.
Actions (7)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
editor.rail.select-tool |
Select | W | — | Viewport tool: select (Q). Editor view state; nothing is saved. |
editor.rail.move-tool |
Move | W | — | Viewport tool: move gizmo (W). Editor view state; nothing is saved. |
editor.rail.rotate-tool |
Rotate | W | — | Viewport tool: rotate gizmo (E). Editor view state; nothing is saved. |
editor.rail.scale-tool |
Scale | W | — | Viewport tool: scale gizmo (R). Editor view state; nothing is saved. |
editor.rail.snap-points |
Snap points | R | — | Open (or close) the snap point tools flyout. |
editor.rail.frame-selection |
Frame selection | W | — | Move the editor camera to frame the selected entity (F). View state only. |
editor.rail.exit |
Exit edit mode | D | — | Leave Edit Mode. With unsaved changes the editor asks first; confirming discards them. |
editor.hierarchy#
Hierarchy · surface editor · singleton (no target)
How it opens: Always mounted in Edit Mode (left panel).
Fields (1)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
editor.hierarchy.filter |
Filter by name, id or #tag | text |
— | — | W | — | Filter the Hierarchy by node name, id or tag (prefix # to match tags only). View state only. |
Actions (4)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
editor.hierarchy.clear-filter |
Clear filter | W | — | Clear the Hierarchy name/id/#tag filter. View state only. |
editor.hierarchy.clear-tag-filters |
Clear tag filters | W | — | Clear the active #tag pills. View state only. |
editor.hierarchy.lock |
Lock / Unlock | W | entity |
Toggle an entity's lock (a locked entity is static and cannot be grabbed). |
editor.hierarchy.visibility |
Show / Hide | W | entity |
Enable or disable an entity, or every entity under a folder row (target id: the row id). |
editor.draft#
Draft and restore points · surface editor · singleton (no target)
How it opens: The draft panel under the Hierarchy.
Fields (2)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
editor.draft.label |
Draft label | text |
— | — | W | — | The draft label shown in the Versions panel. |
editor.draft.restore-note |
Restore-point note (optional) | text |
— | — | W | — | The note the next + Save Restore Point uses as its label. |
Actions (2)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
editor.draft.save-restore-point |
+ Save Restore Point | W | — | Save a named restore point of the draft (the note field is its label). Prefer project_checkpoint. |
editor.draft.restore |
Restore | H | project |
Requires the user's confirmation in the DiceyTable tab. Replace the draft with a saved restore point. The target id is the restore point's version (e.g. v3), as listed by project_versions. |
editor.viewport-toolbar#
Viewport toolbar · surface editor · singleton (no target)
How it opens: Always mounted over the viewport.
Actions (17)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
editor.viewport-toolbar.space-world |
World | W | — | Gizmos move/rotate in world space. View state only. |
editor.viewport-toolbar.space-local |
Local | W | — | Gizmos move/rotate in the entity's local space. View state only. |
editor.viewport-toolbar.freeze-physics |
Frozen | W | — | Freeze the viewport's physics so entities hold their authored positions. |
editor.viewport-toolbar.live-physics |
Live | W | — | Run the viewport's physics to see how entities behave. Nothing is saved until you save the draft. |
editor.viewport-toolbar.play-scripts |
Play Scripts / Stop | W | — | Run (or stop) this scene's compiled scripts against the viewport. Script errors reach diagnostics_get. |
editor.viewport-toolbar.restart-scripts |
Restart | W | — | Restart the running scripts with the latest compiled output (clears session saved-data). |
item.tabs.show-scene |
Scene | R | — | Switch the editor back to the Scene tab (the table viewport) from an item tab. Item tabs stay open; open one again with panel_open on its item.* panel. |
editor.viewport.camera-orbit |
Orbit | W | — | Orbit camera — circle and zoom around a focus point. View state only; nothing is saved. |
editor.viewport.camera-fly |
Fly | W | — | Flying camera — free movement, no floor or gravity. View state only. |
editor.viewport.camera-walk |
First person | W | — | First-person camera at eye height (Esc returns to orbit). View state only. |
editor.viewport.ceiling |
Ceiling | W | — | Toggle drawing the room's ceiling. Local view only; the button's pressed state is the current value. |
editor.viewport.wall-cutaway |
Wall cutaway | W | — | Toggle hiding the wall the camera has moved outside of. Local view only. |
editor.viewport.collider-overlay |
Colliders | W | — | Toggle rigid-body wireframes. Unlike the other view toggles this writes the room's persisted debug setting (Debug Visibility ▸ Rigid Bodies). Undoable. |
editor.viewport.play-area-guide |
Play area | W | — | Toggle the play-surface / seat-ring / room-bounds guide. A guide only; never published. |
editor.viewport.layer-scene |
Scene layer | W | — | Toggle drawing the Scene render layer. A local view; nothing is removed. |
editor.viewport.layer-table |
Table layer | W | — | Toggle drawing the Table render layer. A local view; nothing is removed. |
editor.viewport.layer-game |
Game layer | W | — | Toggle drawing the Game render layer. A local view; nothing is removed. |
editor.explorer#
Asset explorer · surface editor · singleton (no target)
How it opens: The Project / Library panes at the bottom of Edit Mode.
Fields (10)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
explorer.project.search |
Search assets… | text |
— | — | W | — | Filter the Project pane's current folder by name (substring, case-insensitive). Empty clears it. |
explorer.library.search |
Search assets… | text |
— | — | W | — | Filter the Library pane's current folder by name (substring, case-insensitive). Empty clears it. |
explorer.project.filter |
Type filter | select |
— | — | W | all, models, materials, textures, scripts |
Show only one kind of item in the Project pane. Some subjects hide kinds they do not author (the live options say which). |
explorer.library.filter |
Type filter | select |
— | — | W | all, models, materials, textures, scripts |
Show only one kind of item in the Library pane. |
explorer.project.view |
View | select |
— | — | W | — | The Project pane's view preset (Large/Medium/Small icons, List, Details, Tiles). The live options list the preset ids. Editor view state; nothing is saved to the project. |
explorer.library.view |
View | select |
— | — | W | — | The Library pane's view preset. The live options list the preset ids. Editor view state. |
explorer.project.sort |
Sort by | select |
— | — | W | — | The Project pane's sort as <key>:<asc|desc> (e.g. name:asc, modified:desc). The live options list every pair. Editor view state. |
explorer.library.sort |
Sort by | select |
— | — | W | — | The Library pane's sort as <key>:<asc|desc>. Editor view state. |
explorer.library.source |
Library source | select |
— | — | W | — | Which library the Library pane browses: presets (the built-in presets) or one plugin source per plugin the manifest lists that ships resources. The live options list them. Switching opens the source at its root. |
explorer.rename.name |
New name | text |
— | — | W | — | The in-place rename field, present only while a rename is in progress (explorer.item.rename / F2). A write COMMITS the rename through the explorer's file-op pipeline (references are rewritten). The field takes keyboard focus when a rename starts and fields_set never writes a focused field, so from an agent prefer the asset_move tool; this binding keeps the field readable. |
Actions (41)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
editor.explorer.new |
New | R | — | Open the explorer's New menu (folder, material, script, deck, board…). |
explorer.item.select |
Select | R | asset |
Select the item (as a single click does) so the Inspector shows it. Editor view state. |
explorer.item.open |
Open | R | asset |
Open the item's editor tab (as a double-click does): Model, Texture, Material, Deck, Script, Prefab… |
explorer.folder.open |
Open folder | R | asset |
Navigate the pane into this folder (target id <source>:<folder>). |
explorer.tree.toggle |
Expand / collapse | R | asset |
Expand or collapse this folder in the pane's folder tree. Editor view state. |
explorer.item.place |
Place on table | W | asset |
Place the item on the table as a new entity (the tile's hover Place button). Undoable. |
explorer.item.delete |
Delete | H | asset |
Requires the user's confirmation in the DiceyTable tab. Delete the item (and, for a deck, its companion files) from the project through the explorer's file-op pipeline; the sync tombstone removes it upstream on the next publish. Same rule as the asset_delete tool. |
explorer.item.split |
Split into parts | R | asset |
Open the Split into parts dialog for this model. Nothing is written until that dialog confirms. |
explorer.item.create-prefab |
Create prefab | W | asset |
Write a .prefab.json beside this model (or wrapping this preset) and open it in the Prefab tab. |
explorer.item.rename |
Rename | R | asset |
Start an in-place rename; then set explorer.rename.name to commit it. |
explorer.menu.open |
Open | R | asset |
Item menu ▸ Open: open the item's editor tab. |
explorer.menu.place |
Place on table | W | asset |
Item menu ▸ Place on table. Undoable. |
explorer.menu.duplicate |
Duplicate | W | asset |
Item menu ▸ Duplicate: a copy in the same folder (a library item is duplicated INTO the project as a linked copy). |
explorer.menu.copy-path |
Copy path | R | asset |
Item menu ▸ Copy path: put the item's path on the clipboard. |
explorer.menu.copy-id |
Copy id | R | asset |
Item menu ▸ Copy id: put the item's id on the clipboard. |
explorer.menu.rename |
Rename… | R | asset |
Item menu ▸ Rename…: start an in-place rename (then set explorer.rename.name). |
explorer.menu.reveal-usage |
Reveal usage | R | asset |
Item menu: select the entities in the scene that reference this item. |
explorer.menu.optimize-texture |
Optimize texture | W | asset |
Item menu: re-encode the texture to the web budget (the original is preserved as a hidden file). |
explorer.menu.create-board |
Create board from image… | R | asset |
Item menu (a project image): open the New Board dialog with this image as the source. The board uses the existing file as its texture and inherits its credit; nothing is written until board.create. |
explorer.menu.split-model |
Split into parts… | R | asset |
Item menu: open the Split into parts dialog. |
explorer.menu.create-prefab |
Create prefab… | W | asset |
Item menu: write a .prefab.json for this model and open it. |
explorer.menu.show-source |
Show source | R | asset |
Item menu (linked copy): open the Library pane at the item's source. |
explorer.menu.reset-to-source |
Reset to source | D | asset |
Item menu (linked copy): overwrite the local copy with its library source, discarding local edits to it. |
explorer.menu.detach |
Detach | W | asset |
Item menu (linked copy): stop following the library source; the copy becomes the project's own. |
explorer.menu.delete |
Delete | H | asset |
Requires the user's confirmation in the DiceyTable tab. Delete the item (and, for a deck, its companion files) from the project through the explorer's file-op pipeline; the sync tombstone removes it upstream on the next publish. Same rule as the asset_delete tool. |
explorer.menu.add-to-project |
Add to project | W | asset |
Library item menu: add a linked copy of the item (or the selection) to the project. |
explorer.menu.show-credit |
Show credit | R | asset |
Library item menu: show the item's credit (work, creator, licence). |
explorer.project.breadcrumb |
Breadcrumb | R | asset |
Navigate the Project pane to this breadcrumb folder (target id <source>:<folder>). |
explorer.library.breadcrumb |
Breadcrumb | R | asset |
Navigate the Library pane to this breadcrumb folder (target id <source>:<folder>). |
explorer.project.view-menu |
View menu | R | — | Open the Project pane's View menu (the view itself is the explorer.project.view field). |
explorer.library.view-menu |
View menu | R | — | Open the Library pane's View menu (the view itself is the explorer.library.view field). |
explorer.project.toggle-hidden-files |
Show hidden files | R | — | Toggle listing the files the editor manages (preserved originals, link records, thumbnails…). They can be inspected and deleted, not edited. Editor view state. |
explorer.project.collapse |
Collapse the Project pane | R | — | Collapse the Project pane to a rail. Editor view state. |
explorer.library.collapse |
Collapse the Library pane | R | — | Collapse the Library pane to a rail. Editor view state. |
explorer.project.expand |
Expand the Project pane | R | — | Expand the collapsed Project pane. Editor view state. |
explorer.library.expand |
Expand the Library pane | R | — | Expand the collapsed Library pane. Editor view state. |
explorer.library.source-menu |
Library source | R | — | Open the Library source menu (the source itself is the explorer.library.source field). |
explorer.library.manage-plugins |
Manage plugins… | R | — | Open the Plugins panel (Manifest ▸ Plugins) from the Library source menu. |
explorer.credit.close |
Close credit | R | — | Close the credit card. |
explorer.link-updates.review |
Review | R | — | Open the linked-item updates review (dialog.link-update). Nothing is applied until that dialog does. |
explorer.link-updates.dismiss |
Dismiss | R | — | Dismiss the source-updates notice for this session. |
editor.status-bar#
Status bar and problems · surface editor · singleton (no target)
How it opens: Always mounted; the problems list opens from the status bar.
Actions (6)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
editor.status-bar.save-state |
Save state | R | — | Open what is unsaved, or the Problems list. |
editor.status-bar.validation |
Draft validation | R | — | Toggle the Problems list (draft validation). |
editor.status-bar.scene-validation |
Scene validation | R | — | Toggle the Problems list (scene validation). |
editor.status-bar.problems |
Errors and warnings | R | — | Toggle the Problems list. |
editor.status-bar.checkpoint |
GitHub checkpoint | R | — | Toggle the Problems list (auto-checkpoint status). |
editor.status-bar.sync |
GitHub sync | R | — | Open the GitHub sync dialog. Prefer sync_status / sync_resolve. |
snap-point.point#
Snap point · surface editor · target snap-point
How it opens: Select the snap point in the Hierarchy.
Fields (5)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
snap-point.point.name |
Name | text |
— | snap-point |
W | — | The snap point's name; scripts read it with world.getSnapPointAt(). The only field a grid-generated point keeps. |
snap-point.point.position |
Position | length-vec3 |
length |
snap-point |
W | — | The point's position (read-only for a grid-generated point). [x, y, z] in world feet. |
snap-point.point.rotation-y |
Rotation (°) | angle |
degrees |
snap-point |
W | step 5 | The facing, in degrees, a piece is turned to when it snaps here (read-only for a grid-generated point). |
snap-point.point.snap-radius |
Snap radius | length |
length |
snap-point |
W | ≥ 0.01, ≤ 2, step 0.01 | How close a dropped piece has to land to be pulled in (read-only for a grid-generated point). World feet. |
snap-point.point.owner |
Owner | select |
— | snap-point |
W | ``, red, blue, green, yellow, purple, orange, pink, cyan, white, brown |
Seat that owns the point; "" = nobody (any player). |
Actions (2)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
snap-point.point.select-grid |
Select grid | R | snap-point |
Select the grid that generates this snap point. |
snap-point.point.delete |
Delete snap point | D | snap-point |
Delete this (hand-placed) snap point. Undoable. |
snap-point.grid#
Snap grid · surface editor · target snap-point
How it opens: Select the snap grid in the Hierarchy.
Fields (9)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
snap-point.grid.name |
Name | text |
— | snap-point |
W | — | The grid's name (up to 80 characters). |
snap-point.grid.rows |
Rows | integer |
— | snap-point |
W | ≥ 1, ≤ 64, step 1 | Ranks along the grid's Z axis. |
snap-point.grid.cols |
Columns | integer |
— | snap-point |
W | ≥ 1, ≤ 64, step 1 | Files along the grid's X axis. |
snap-point.grid.spacing-x |
Spacing X | length |
length |
snap-point |
W | ≥ 0.01, ≤ 48, step 0.05 | Centre-to-centre distance between columns. World feet. |
snap-point.grid.spacing-z |
Spacing Z | length |
length |
snap-point |
W | ≥ 0.01, ≤ 48, step 0.05 | Centre-to-centre distance between rows. World feet. |
snap-point.grid.center |
Centre | length-vec3 |
length |
snap-point |
W | — | The point the grid is laid out symmetrically about. [x, y, z] in world feet. |
snap-point.grid.rotation-y |
Rotation (°) | angle |
degrees |
snap-point |
W | step 5 | Yaw of the whole block in degrees; every generated point takes it as its facing. |
snap-point.grid.snap-radius |
Snap radius | length |
length |
snap-point |
W | ≥ 0.01, ≤ 2, step 0.01 | Catchment of every point in the grid; keep it under half the spacing. World feet. |
snap-point.grid.owner |
Owner | select |
— | snap-point |
W | ``, red, blue, green, yellow, purple, orange, pink, cyan, white, brown |
Seat that owns every point in the grid; "" = nobody (any player). |
Actions (1)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
snap-point.grid.delete |
Delete grid | D | snap-point |
Delete the snap grid and every snap point it generates. Undoable. |
snap-point.folder#
Snap Points folder · surface editor · singleton (no target)
How it opens: Select the Snap Points folder in the Hierarchy.
Actions (2)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
snap-point.folder.toggle-visible |
Show/Hide snap points | W | — | Toggle drawing every snap point's marker and snap-radius disc in the viewport. View state only. |
snap-point.folder.new-folder |
New Folder | W | — | Create an empty author folder in the Snap Points section. Undoable. |
scene.scripts#
Scene scripts · surface editor · target script
How it opens: Select the Room row; the Scene scripts block.
Fields (1)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
scene.scripts.add |
Add script | select |
— | — | W | — | Attach an existing scene script (its id) to the scene. Setting "" does nothing. |
Per-instance field families
| Id pattern | Materialised from |
|---|---|
script.var.<name> |
One field per variable the attached script declares — on the attaching entity for an object script, per scene-script id for a scene script. |
Actions (3)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
scene.scripts.edit |
Edit | R | script |
Open the attached scene script in the Script editor. |
scene.scripts.detach |
Remove | W | script |
Detach this script from the scene. The script itself stays in the project. |
scene.scripts.new |
+ New Script | W | — | Create a new global (scene) script, attach it to the scene and open it. Prefer script_write to fill it. |
material#
Material inspector · surface editor · target material
How it opens: Open the material in a Material tab, or select it in the explorer.
Fields (3)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
inspector.material.name |
Name | text |
— | material |
W | — | The material's name. |
item.material.name |
Name | text |
— | material |
W | — | The material's display name (1..80 characters). An empty name is ignored. |
item.material.advanced |
Advanced | boolean |
— | — | W | — | Show the Material inspector's advanced sections and fields. Editor view preference shared by every material inspector; nothing in the project changes. |
Derived field families (15)
| Id pattern | Family | Fields | Keys | Target |
|---|---|---|---|---|
material.textureTransform.<key> |
textureTransform material section |
4 | tilingX, tilingY, offsetX, offsetY |
material |
material.ambient.<key> |
ambient material section |
3 | ambient, aoMap, ambientTint |
material |
material.diffuse.<key> |
diffuse material section |
4 | diffuse, diffuseMap, diffuseTint, diffuseVertexColor |
material |
material.specular.<key> |
specular material section |
11 | useMetalness, metalness, metalnessMap, metalnessMapChannel, gloss, specular, specularMap, glossMap, glossMapChannel, glossInvert, specularityFactor |
material |
material.emissive.<key> |
emissive material section |
3 | emissive, emissiveIntensity, emissiveMap |
material |
material.opacity.<key> |
opacity material section |
5 | opacity, blendType, opacityMap, alphaTest, alphaToCoverage |
material |
material.normals.<key> |
normals material section |
2 | normalMap, bumpiness |
material |
material.parallax.<key> |
parallax material section |
2 | heightMap, heightMapFactor |
material |
material.clearcoat.<key> |
clearcoat material section |
3 | clearCoat, clearCoatGloss, clearCoatBumpiness |
material |
material.sheen.<key> |
sheen material section |
3 | useSheen, sheen, sheenGloss |
material |
material.refraction.<key> |
refraction material section |
3 | refraction, refractionIndex, thickness |
material |
material.iridescence.<key> |
iridescence material section |
4 | useIridescence, iridescence, iridescenceThicknessMin, iridescenceThicknessMax |
material |
material.environment.<key> |
environment material section |
2 | cubeMap, reflectivity |
material |
material.lightmap.<key> |
lightmap material section |
1 | lightMap |
material |
material.other.<key> |
other material section |
5 | cull, depthTest, depthWrite, twoSidedLighting, opacityFadesSpecular |
material |
Actions (4)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
material.duplicate |
Duplicate | W | material |
Duplicate this material. |
material.delete |
Delete | D | material |
Delete this (non-built-in) material. |
material.section.toggle |
Expand / collapse section | R | material |
Expand or collapse one Material inspector section. The target is <material id>#<section key> (e.g. felt#normals); collapsed sections do not mount their fields. View state only; nothing is saved. |
item.material.duplicate-to-project |
Duplicate to project | W | material |
Copy this built-in preset material into the project as an editable material (shown only on read-only presets). |
manifest.details#
▸ · surface editor · singleton (no target)
How it opens: Open diceytable.mod.json (Manifest tab) ▸ Details.
Fields (14)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
manifest.details.name |
Title | text |
— | — | W | — | The pack's public title (manifest.name), shown on its listing page and in the lobby. |
manifest.details.mod-id |
Mod ID | text |
— | — | W | — | The permanent mod id (manifest.id) other packs and games pin. Editable only until the first publish; the control is disabled once published. |
manifest.details.version |
Version | text |
— | — | W | — | Semver version (manifest.version, e.g. 1.0.0). A published version is immutable, so bump it before publishing changes. |
manifest.details.slug |
Game URL | text |
— | — | W | — | The public URL slug (manifest.slug). The box is shown after the URL's Edit action; "" returns to the slug derived from the title. |
manifest.details.summary |
Summary | multiline |
— | — | W | — | One-line plain-text tagline (manifest.summary, at most 200 characters). |
manifest.details.description |
Description | multiline |
— | — | W | — | The long description as Markdown (manifest.description). The WYSIWYG editor re-renders from it. |
manifest.details.category |
Category | select |
— | — | W | — | Browse category slug (manifest.category). The options depend on the pack type; fields_get lists them. |
manifest.details.players-min |
Players (fewest) | integer |
— | — | W | ≥ 1, ≤ 64 | Smallest supported player count (manifest.players.min). Shown for pack types that seat players. |
manifest.details.players-max |
Players (most) | integer |
— | — | W | ≥ 1, ≤ 64 | Largest supported player count (manifest.players.max); must not be below the fewest. |
manifest.details.tags |
Tags | tags |
— | — | W | — | The whole tag list (manifest.tags): up to 20 tags of letters, digits and dashes. Tags are lower-cased and de-duplicated. |
manifest.details.video-url |
Video link | text |
— | — | W | — | The gallery's video form (open it with Add a video, or a video tile's link action): a YouTube watch / youtu.be / Shorts link or id. Committed by the form's Add/Save action. |
manifest.details.screenshot.title |
Screenshot title | text |
— | project |
W | — | A gallery entry's caption; "" removes it. Shown after the entry's details action. Target: the row, {kind: "project", id: "<0-based index>"}. |
manifest.details.screenshot.alt |
Screenshot alt text | text |
— | project |
W | — | A gallery entry's alternative text for readers who cannot see it; "" removes it. Target: the row, {kind: "project", id: "<0-based index>"}. |
manifest.details.screenshot.kind |
Screenshot type | select |
— | project |
W | ``, marketing, gameplay, component |
What a gallery entry shows (marketing, gameplay or component art); "" clears it. Target: the row, {kind: "project", id: "<0-based index>"}. |
Actions (20)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
manifest.details.mod-id.use-suggestion |
Use suggested id | W | — | Replace an invalid Mod ID with the valid id the form suggests. |
manifest.details.version.bump |
Bump patch | W | — | Increase the patch number of manifest.version (1.2.3 → 1.2.4). |
manifest.details.slug.edit |
Edit URL | R | — | Show (or hide) the Game URL box so manifest.details.slug can be set. |
manifest.details.slug.reset |
Reset URL | W | — | Clear the custom URL slug so the public URL follows the title again. |
manifest.details.cover.recrop |
Re-crop cover | R | — | Open the crop dialog on the current cover image; nothing changes until its Apply crop. |
manifest.details.cover.remove |
Remove cover | W | — | Stop using a cover image (manifest.coverImage). The file stays in the project. |
manifest.details.screenshot.move-left |
Move left | W | project |
Move a gallery entry one place earlier. Target: the entry's 0-based index. |
manifest.details.screenshot.move-right |
Move right | W | project |
Move a gallery entry one place later. Target: the entry's 0-based index. |
manifest.details.screenshot.remove |
Remove | W | project |
Take an entry out of the gallery (the image file stays in the project). Target: the entry's 0-based index. |
manifest.details.screenshot.recrop |
Re-crop | R | project |
Open the crop dialog on a gallery image; nothing changes until its Apply crop. Target: the entry's 0-based index. |
manifest.details.screenshot.edit-link |
Change the YouTube link | R | project |
Open the video form for a video entry (then set manifest.details.video-url and Save). Target: the entry's 0-based index. |
manifest.details.screenshot.details |
Details | R | project |
Open (or close) a gallery entry's title / alt text / type form. Target: the entry's 0-based index. |
manifest.details.screenshot.details-done |
Done | R | — | Close the gallery entry details form. |
manifest.details.video.add |
Add a video | R | — | Open the video form for a new gallery video. |
manifest.details.video.submit |
Add / Save video | W | — | Commit the video form's link as a new gallery video, or re-point the entry it was opened for. |
manifest.details.video.cancel |
Cancel | R | — | Close the video form without changing the gallery. |
manifest.details.published.private-toggle |
Make private / Private | H | — | Requires the user's confirmation in the DiceyTable tab. Owner: toggle the published mod between private (hidden from every listing but the owner's; tables hosted with it are always private) and public. Making it private needs a membership. |
manifest.details.published.delete.ask |
Delete… | R | — | Owner: open the delete-mod dialog. Nothing is deleted yet. |
manifest.details.published.delete.cancel |
Cancel | R | — | Close the delete-mod dialog without deleting. |
manifest.details.published.delete.confirm |
Delete mod | H | — | Requires the user's confirmation in the DiceyTable tab. Owner: retire the published mod for good. It leaves every listing, its page and the Projects rail; the GitHub repository is untouched. |
manifest.gameplay#
▸ · surface editor · singleton (no target)
How it opens: Manifest tab ▸ Gameplay.
Fields (40)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
manifest.gameplay.entry-setup |
Scene | select |
— | — | W | — | The scene this pack loads (manifest.entry.setup), picked from the project's scene files; "" stops declaring one. |
manifest.gameplay.entry-script |
Script | select |
— | — | W | — | The mod script this pack runs (manifest.entry.script), picked from the project's .js/.ts files; "" stops declaring one. Room and table packs have no script. |
manifest.gameplay.rules.title |
Rules title | text |
— | project |
W | — | A rules document's title. Target: {kind: "project", id: "<rules document id>"}. |
manifest.gameplay.rules.url |
Rules link | text |
— | project |
W | — | A link-kind rules document's https URL (shown once the document is opened for editing). Target: the rules document id. |
manifest.gameplay.rules.video-url |
Rules video link | text |
— | project |
W | — | A video-kind rules document's YouTube link; only a link that parses to a video id is committed. Target: the rules document id. |
manifest.gameplay.rules.body |
Rules text | multiline |
— | project |
W | — | A written rules document's Markdown body, saved to rules/<id>.md in the draft. Target: the rules document id. |
manifest.gameplay.lobby-requirement.kind |
Asks for | select |
— | project |
W | deck |
What a lobby requirement asks each player for. Target: the row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.lobby-requirement.id |
Requirement id | text |
— | project |
W | — | The key each player's answer is filed under (lowercase snake_case, unique). Target: the row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.lobby-requirement.label |
Requirement label | text |
— | project |
W | — | The caption players see above the lobby picker. Target: the row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.lobby-requirement.help |
Requirement help | text |
— | project |
W | — | One line of help under the picker; "" removes it. Target: the row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.lobby-requirement.applies-to |
Asked of | select |
— | project |
W | players, owner |
Which seated members are asked. Target: the row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.lobby-requirement.required |
Blocks Start | boolean |
— | project |
W | — | Whether an unanswered requirement stops the owner pressing Start. Target: the row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.lobby-requirement.deck-sources |
Deck sources | tags |
— | project |
W | — | Which pools a deck requirement's picker offers (mine, community, database, game), in tab order. Never empty. game (the game's own decks, also the only pool a bot can be handed) needs manifest.gameplay.game-decks. Target: the row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.lobby-requirement.database-plugin |
Database plugin | text |
— | project |
W | — | The plugin behind the database deck source; it must already be listed on the Plugins tab. Target: the row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.lobby-requirement.database-function |
Listing function | text |
— | project |
W | — | The declared plugin function that lists decks for the database source. Target: the row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.lobby-requirement.database-label |
Tab label | text |
— | project |
W | — | What the lobby picker calls the database tab; "" uses the plugin's name. Target: the row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.lobby-requirement.format |
Format | text |
— | project |
W | — | A format id from the pack's card schema that an answer's deck must carry; "" accepts any. Target: the row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.lobby-requirement.min-cards |
Fewest cards | integer |
— | project |
W | ≥ 0, ≤ 100000 | Smallest legal deck; 0 means no limit. Target: the row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.lobby-requirement.max-cards |
Most cards | integer |
— | project |
W | ≥ 0, ≤ 100000 | Largest legal deck; 0 means no limit. Target: the row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.lobby-requirement.icon-image |
Deck icon | text |
— | project |
W | — | deckIcon.image: the default icon shown beside every deck in the lobby — a repo-relative PNG/JPEG/WebP declared in assets (never a URL); "" removes it. Target: the row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.lobby-requirement.icon-field |
Icon field | text |
— | project |
W | — | deckIcon.field: the key a per-deck icon value is read from (e.g. side on a database row or game deck, derived from the cards' own side for a saved deck; or formatId); "" removes it. Target: the row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.lobby-requirement.icon-map |
Icon map | text |
— | project |
W | — | deckIcon.map as comma-separated value=path pairs (e.g. L=ui/side-light.png, D=ui/side-dark.png); at most 32, each path a declared repo raster image; "" removes it. Target: the row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.lobby-requirement.distinct |
Decks must differ | boolean |
— | project |
W | — | distinctBy: no two decks at the table (players' and bots') may share a deck-icon value (e.g. both Light Side). Needs an icon field and map. Target: the row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.lobby-requirement.distinct-except |
May repeat | text |
— | project |
W | — | distinctBy.except as comma-separated icon values that two decks MAY share (e.g. N for Neutral); "" for none. Target: the row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.lobby-requirement.distinct-labels |
Value names | text |
— | project |
W | — | distinctBy.labels as comma-separated value=Name pairs used in refusals (e.g. L=Light Side, D=Dark Side); "" removes them. Target: the row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.setup-option.key |
Setup option key | text |
— | project |
W | — | The name a script reads the room owner's answer by (lowercase snake_case, unique in the pack): world.getSetupOptions()[key] in a table script, the third setup() argument in an entry script. Target: the option's row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.setup-option.label |
Setup option label | text |
— | project |
W | — | The caption the room owner sees beside the control under Game options in the lobby. Target: the option's row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.setup-option.help |
Setup option help | text |
— | project |
W | — | One line of help under the lobby control; "" removes it. Target: the option's row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.setup-option.control |
Control | select |
— | project |
W | text, number, toggle, select |
Which lobby control the option is (text, number, toggle, select). Changing it drops the settings the new control does not use and resets the default to one it can hold (a select gets one starter choice). Target: the option's row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.setup-option.default-toggle |
Default (on / off) | boolean |
— | project |
W | — | A toggle option's default: what the lobby shows, and what a script reads when the owner changes nothing. Mounted only when the control is toggle. Target: the option's row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.setup-option.default-number |
Default (number) | number |
— | project |
W | — | A number option's default; it must lie within the option's lowest and highest. Mounted only when the control is number. Target: the option's row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.setup-option.default-text |
Default (text) | text |
— | project |
W | — | A text option's default; no longer than its longest. Mounted only when the control is text. Target: the option's row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.setup-option.default-choice |
Default (choice) | select |
— | project |
W | — | A select option's default: the VALUE of one of its declared choices (the live control lists them). Mounted only when the control is select. Target: the option's row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.setup-option.choice-value |
Choice value | text |
— | project |
W | — | What a script reads when the owner picks this choice; unique within the option. Renaming the default choice's value renames the default with it. Target: {kind: "project", id: "<option index>/<0-based choice index>"}. |
manifest.gameplay.setup-option.choice-label |
Choice label | text |
— | project |
W | — | What the lobby's list shows for this choice. Target: {kind: "project", id: "<option index>/<0-based choice index>"}. |
manifest.gameplay.setup-option.min |
Lowest | text |
— | project |
W | — | A number option's min as text (e.g. "2"), or "" for no lower bound. Mounted only when the control is number. Target: the option's row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.setup-option.max |
Highest | text |
— | project |
W | — | A number option's max as text, or "" for no upper bound. Mounted only when the control is number. Target: the option's row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.setup-option.step |
Step | text |
— | project |
W | — | A number option's step as text (positive; "1" for whole numbers), or "" for none. Mounted only when the control is number. Target: the option's row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.setup-option.max-length |
Longest | integer |
— | project |
W | ≥ 0, ≤ 2000 | A text option's maxLength in characters; 0 means no limit beyond the platform's 2000. Mounted only when the control is text. Target: the option's row, {kind: "project", id: "<0-based index>"}. |
manifest.gameplay.game-decks |
Game decks file | text |
— | — | W | — | gameDecks: the repo path of the pack's decklists file (a declared .json, e.g. decks/game-decks.json) offered in the lobby's Game decks tab and to bots; "" removes it. |
Actions (15)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
manifest.gameplay.remove-stranded-field |
Remove | W | project |
Delete a manifest key this pack type cannot use (it would refuse publish). Target: {kind: "project", id: "<manifest key>"}. |
manifest.gameplay.rules.add-written |
Write rules | W | — | Add a written (Markdown) rules document and open it for editing. |
manifest.gameplay.rules.add-link |
Link to rules | W | — | Add a rules document that is a link to rules hosted elsewhere. |
manifest.gameplay.rules.add-video |
Add a video | W | — | Add a YouTube how-to-play video as a rules document. |
manifest.gameplay.rules.toggle |
Edit / Done | R | project |
Open (or close) a rules document's editor. Target: the rules document id. |
manifest.gameplay.rules.move-up |
Move up | W | project |
Move a rules document one place earlier. Target: the rules document id. |
manifest.gameplay.rules.move-down |
Move down | W | project |
Move a rules document one place later. Target: the rules document id. |
manifest.gameplay.rules.remove |
Remove | H | project |
Requires the user's confirmation in the DiceyTable tab. Remove a rules document AND delete its files (Markdown body, rendered pages, cover) from the project. Target: the rules document id. |
manifest.gameplay.rules.remove-cover |
Remove cover | H | project |
Requires the user's confirmation in the DiceyTable tab. Delete a video rules document's cover image file; YouTube's own still is used instead. Target: the rules document id. |
manifest.gameplay.lobby-requirement.add |
Add a requirement | W | — | Add a lobby requirement (one deck per player, blocking Start, by default). |
manifest.gameplay.lobby-requirement.remove |
Remove | D | project |
Remove a lobby requirement and its settings. Target: the requirement's 0-based index. |
manifest.gameplay.setup-option.add |
Add an option | W | — | Add a setup option (an on/off toggle, default off, with a fresh key) to manifest.setupOptions; at most 12. |
manifest.gameplay.setup-option.remove |
Remove | D | project |
Remove a setup option and all its settings. Target: the option's 0-based index. |
manifest.gameplay.setup-option.choice-add |
Add a choice | W | project |
Add a choice to a select setup option (at most 32). Target: the option's 0-based index. |
manifest.gameplay.setup-option.choice-remove |
Remove choice | D | project |
Remove one choice from a select setup option; if it was the default, the first remaining choice becomes the default. Target: <option index>/<0-based choice index>. |
manifest.files#
▸ · surface editor · singleton (no target)
How it opens: Manifest tab ▸ Files.
Fields (6)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
manifest.files.view |
Show | select |
— | — | W | — | Which files the Files tab lists (game files, on demand, editor-only, cleanup, all). View state only. |
manifest.files.filter |
Filter by path | text |
— | — | W | — | Filters the Files tab's list by path. View state only. |
manifest.files.preload |
Pre-load | boolean |
— | asset |
W | — | Whether a game file is pre-loaded (listed in manifest.assets) or fetched on demand (manifest.excludedAssets). Target: {kind: "asset", id: "<repo-relative path>"}. |
manifest.files.asset-repo.owner |
Art repository owner | text |
— | project |
W | — | GitHub account or organisation of an outside art repository (manifest.assetRepos). Target: the row, {kind: "project", id: "<0-based index>"}. |
manifest.files.asset-repo.repo |
Art repository name | text |
— | project |
W | — | Repository name of an outside art repository. Target: the row, {kind: "project", id: "<0-based index>"}. |
manifest.files.asset-repo.ref |
Art repository ref | text |
— | project |
W | — | Branch, tag or commit sha to read the art from (a commit caches best). Target: the row, {kind: "project", id: "<0-based index>"}. |
Actions (10)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
manifest.files.help |
How does this work? | R | — | Show or hide the Files tab's explanation of pre-loaded, on-demand, entry and editor-only files. |
manifest.files.remove-missing |
Remove | W | asset |
Drop a declared asset path that no longer exists from manifest.assets. Target: the declared path. |
manifest.files.folder.toggle |
Expand / collapse folder | R | asset |
Expand or collapse a folder in the Files tree. Target: the folder path. |
manifest.files.delete.ask |
Delete… | R | asset |
Ask to delete a file (or a folder's listed files, target folder:<path>); shows the confirm row. Nothing is deleted yet. |
manifest.files.delete.confirm |
Delete | H | asset |
Requires the user's confirmation in the DiceyTable tab. Delete the asked-about project file(s) through the editor's delete pipeline. Target: the path, folder:<path>, or view:leftovers. |
manifest.files.delete.keep |
Keep | R | asset |
Dismiss a delete confirm row without deleting anything. |
manifest.files.leftovers.ask |
Delete leftovers… | R | — | Ask to delete every leftover file (Cleanup view); shows the confirm row. |
manifest.files.scan-unused |
Scan for unused files | R | — | Read the scene, decks, scripts and models and list game files none of them names (a best guess). Changes nothing. |
manifest.files.asset-repo.add |
Add repository | W | — | Add an outside art repository row to manifest.assetRepos (at most 4). |
manifest.files.asset-repo.remove |
Remove repository | D | project |
Remove an outside art repository row. Target: the row's 0-based index. |
manifest.plugins#
▸ · surface editor · singleton (no target)
How it opens: Manifest tab ▸ Plugins (plugin settings render here).
Fields (2)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
manifest.plugins.search |
Search the plugin registry | text |
— | — | W | — | The plugin-registry search box; run it with the Search action. Plugin names and summaries in the results are third-party text. |
manifest.plugins.function |
Function this game may call | boolean |
— | project |
H | — | Requires the user's confirmation in the DiceyTable tab. Whether this pack's script may call one declared function of an attached plugin. Turning one on can add the plugin-call capability, which players are shown before they join, so fields_set refuses it — use manifest_set. Target: {kind: "project", id: "<pluginId>/<function name>"}. |
Per-instance field families
| Id pattern | Materialised from |
|---|---|
plugin.setting.<key> · plugin.setting.<pluginId>.<key> |
One field per setting the mod's selected plugins declare. Use the <pluginId> form when two plugins declare the same key. |
Actions (7)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
manifest.plugins.search-submit |
Search | R | — | Search the plugin registry for manifest.plugins.search. Results are third-party text. |
manifest.plugins.details |
Details | R | project |
Show or hide a plugin's attribution, origins and call snippet. Target: {kind: "project", id: "<pluginId>"}. |
manifest.plugins.add |
Add to game | H | project |
Requires the user's confirmation in the DiceyTable tab. Attach a registered plugin with all of its callable functions. This adds the plugin-call capability, which players are shown before they join. Target: the plugin id. |
manifest.plugins.configure-only |
Configure only | W | project |
Answer a plugin's settings without letting this pack's script call it (a deck-source plugin). Target: the plugin id. |
manifest.plugins.remove |
Remove | D | project |
Remove a plugin from the pack: its attachment, its functions and the pack's answers to its settings. Target: the plugin id. |
manifest.plugins.setting.reset |
Reset | W | project |
Drop the pack's answer to one plugin setting so the plugin's default applies. Target: {kind: "project", id: "<pluginId>/<setting key>"}. |
manifest.plugins.setting.remove-stale |
Remove | W | project |
Remove an answer to a setting the plugin no longer declares. Target: <pluginId>/<setting key>. |
manifest.bots#
▸ · surface editor · singleton (no target)
How it opens: Manifest tab ▸ Bots (game bots: the AI models and the AI/scripted opponents a game pack declares). Game packs only.
Fields (20)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
manifest.ai-models.label |
Label | text |
— | project |
W | — | An AI model's display name (manifest.aiModels[].label), 1-40 characters of plain text. Target: {kind: "project", id: "<model id>"}. |
manifest.ai-models.min-tier |
Min tier | select |
— | project |
W | cpu-basic, cpu-fast, gpu |
The weakest host device a game using this model may start on (aiModels[].minTier): cpu-basic, cpu-fast or gpu. Lower than the import's estimate means slow bot turns on weak hosts. Target: {kind: "project", id: "<model id>"}. |
manifest.ai-models.difficulty.id |
Difficulty id | text |
— | project |
W | — | A model strength preset's id (lowercase letters, digits, hyphens; unique within the model). Target: {kind: "project", id: "<model id>/<0-based difficulty index>"}. |
manifest.ai-models.difficulty.label |
Difficulty label | text |
— | project |
W | — | A model strength preset's display name. Target: {kind: "project", id: "<model id>/<0-based difficulty index>"}. |
manifest.ai-models.difficulty.sims-per-move |
Sims per move | integer |
— | project |
W | ≥ 0, ≤ 4096 | Search simulations per move for this preset (simsPerMove, 1-4096); 0 leaves it unset. Target: {kind: "project", id: "<model id>/<0-based difficulty index>"}. |
manifest.ai-models.difficulty.temperature |
Temperature | text |
— | project |
W | — | Move-sampling temperature for this preset as text: a number from 0 to 2 (e.g. "0.8"), or "" to leave it unset. Target: {kind: "project", id: "<model id>/<0-based difficulty index>"}. |
manifest.bots.label |
Label | text |
— | project |
W | — | A game bot's display name in the lobby and at the table (manifest.bots[].label). Target: the bot's row, {kind: "project", id: "<0-based index>"}. |
manifest.bots.id |
Id | text |
— | project |
W | — | A game bot's id (lowercase letters, digits, hyphens; unique). Rooms and fallbacks refer to it. Target: the bot's row, {kind: "project", id: "<0-based index>"}. |
manifest.bots.kind |
Kind | select |
— | project |
W | scripted, ai |
Whether the bot is scripted (script code only) or ai (its handler evaluates a declared AI model). Switching to scripted clears its model and fallback. Target: the bot's row, {kind: "project", id: "<0-based index>"}. |
manifest.bots.model |
Model | select |
— | project |
W | — | The AI model an ai bot evaluates (modelId, one of manifest.aiModels[].id) — its DEFAULT model, used by every difficulty that does not name its own (manifest.bots.difficulty.model). Shown for ai bots only; fields_get lists the options. Target: the bot's row, {kind: "project", id: "<0-based index>"}. |
manifest.bots.fallback |
Fallback bot | select |
— | project |
W | — | The scripted bot of this game a promoted host may swap an ai bot for when its device cannot run the model (fallbackBotId); "" for none. Shown for ai bots only. Target: the bot's row, {kind: "project", id: "<0-based index>"}. |
manifest.bots.handler |
Handler | text |
— | project |
W | — | The id the scene script passes to bots.register({ id }) for this bot (handler). Free text; publish refuses a handler no scene script registers. Target: the bot's row, {kind: "project", id: "<0-based index>"}. |
manifest.bots.handler-pick |
Registered handlers | select |
— | project |
W | — | Pick the handler from the ids the scene scripts' compiled bodies register with bots.register; writes the same handler value. fields_get lists the options. Target: the bot's row, {kind: "project", id: "<0-based index>"}. |
manifest.bots.default-difficulty |
Default difficulty | select |
— | project |
W | — | Which of the bot's own difficulties a room starts on (defaultDifficulty); "" uses the first. Target: the bot's row, {kind: "project", id: "<0-based index>"}. |
manifest.bots.seats-max |
Seats (most) | integer |
— | project |
W | ≥ 0, ≤ 9 | The most of this bot one table may seat (seats.max); 0 leaves it unset (up to the game's player limit). Target: the bot's row, {kind: "project", id: "<0-based index>"}. |
manifest.bots.description |
Description | text |
— | project |
W | — | One line about the bot shown where it is offered; "" removes it. Target: the bot's row, {kind: "project", id: "<0-based index>"}. |
manifest.bots.difficulty.id |
Difficulty id | text |
— | project |
W | — | A bot difficulty's id — what the bot's script reads. Target: {kind: "project", id: "<bot index>/<0-based difficulty index>"}. |
manifest.bots.difficulty.label |
Difficulty label | text |
— | project |
W | — | A bot difficulty's display name — what players pick. Target: {kind: "project", id: "<bot index>/<0-based difficulty index>"}. |
manifest.bots.difficulty.description |
Difficulty description | text |
— | project |
W | — | One optional line about a bot difficulty; "" removes it. Target: {kind: "project", id: "<bot index>/<0-based difficulty index>"}. |
manifest.bots.difficulty.model |
Difficulty model | select |
— | project |
W | — | The AI model this difficulty of an ai bot plays with (difficulties[].modelId, one of manifest.aiModels[].id) — e.g. a separate network per Easy / Medium / Hard; "" uses the bot's default model (manifest.bots.model). It is the model the table loads, gates the host's device on, reports as BotTurnContext.modelId and keys the bot's Rankings strength on for that difficulty. Shown for ai bots only; fields_get lists the options. Target: {kind: "project", id: "<bot index>/<0-based difficulty index>"}. |
Actions (12)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
manifest.ai-models.import |
Import model… | R | — | Open the Import AI model dialog, where the human picks an .onnx file. Nothing is imported yet; an agent sends a file with the ai_model_import tool instead. |
manifest.ai-models.revalidate |
Re-check files | R | — | Validate every declared AI model's file in the draft again (the publish scanner's own ONNX check) and refresh each row's status. Changes nothing. |
manifest.ai-models.remove |
Remove | H | project |
Requires the user's confirmation in the DiceyTable tab. Remove an AI model from manifest.aiModels AND delete its .onnx file from the project. Refused while a game bot still uses the model. Target: {kind: "project", id: "<model id>"}. |
manifest.ai-models.trained-import |
Import… | R | project |
Open the Import AI model dialog on a model the training page exported for this project, already checked against its export. Nothing is added until the dialog's Add. Target: {kind: "project", id: "<exported model id>"}. |
manifest.ai-models.trained-discard |
Discard | H | project |
Requires the user's confirmation in the DiceyTable tab. Delete a trained model's export (the .onnx and its description in the training page's storage on this device) without importing it. Target: the exported model id. |
manifest.ai-models.difficulty.add |
Add difficulty | W | project |
Add a strength preset (id, label, simulations per move, temperature) to an AI model. Target: the model id. |
manifest.ai-models.difficulty.remove |
Remove difficulty | D | project |
Remove one strength preset from an AI model. Target: {kind: "project", id: "<model id>/<0-based difficulty index>"}. |
manifest.bots.add |
Add bot | W | — | Add a game bot row to manifest.bots (a scripted bot with a fresh id; edit its fields afterwards). At most 8. |
manifest.bots.remove |
Remove | D | project |
Remove a game bot from manifest.bots. AI bots that named it as their fallback lose that fallback. Target: the bot's 0-based index. |
manifest.bots.difficulty.add |
Add difficulty | W | project |
Add a named difficulty (id, label, description) to a game bot. Target: the bot's 0-based index. |
manifest.bots.difficulty.remove |
Remove difficulty | D | project |
Remove one difficulty from a game bot; a default difficulty that named it is cleared. Target: {kind: "project", id: "<bot index>/<0-based difficulty index>"}. |
manifest.bots.train |
Train a model… | W | — | Leave the editor for the training page (/editor/train) for this project, in this tab. Asks before discarding unsaved changes, so an agent must save first (project_save). |
manifest.credits#
▸ · surface editor · singleton (no target)
How it opens: Manifest tab ▸ Credits.
No field or action is registered on this panel yet. panel_open can still open it, and describe_panel / screenshot_panel can read it.
manifest.file#
▸ · surface editor · singleton (no target)
How it opens: Manifest tab ▸ File (read-only JSON view).
No field or action is registered on this panel yet. panel_open can still open it, and describe_panel / screenshot_panel can read it.
agent.indicator#
AI agent indicator · surface editor · singleton (no target)
How it opens: Mounted while an agent is attached; its controls are the human's, never the agent's.
No field or action is registered on this panel yet. panel_open can still open it, and describe_panel / screenshot_panel can read it.
editor.scene-snap-points#
Snap point tools · surface editor · singleton (no target)
How it opens: Left rail ▸ Snap points; the flyout's Grid and Label sub-tools show their settings.
Fields (9)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
editor.scene-snap-points.grid-rows |
Rows | integer |
— | — | W | ≥ 1, ≤ 20, step 1 | Rows in the next snap grid the Grid sub-tool places. |
editor.scene-snap-points.grid-columns |
Columns | integer |
— | — | W | ≥ 1, ≤ 20, step 1 | Columns in the next snap grid the Grid sub-tool places. |
editor.scene-snap-points.grid-spacing-x |
Spacing X | length |
length |
— | W | ≥ 0.05, ≤ 5, step 0.05 | Distance between grid columns, in feet. |
editor.scene-snap-points.grid-spacing-z |
Spacing Z | length |
length |
— | W | ≥ 0.05, ≤ 5, step 0.05 | Distance between grid rows, in feet. |
editor.scene-snap-points.label-text |
Label | text |
— | snap-point |
W | — | The name of the snap point the Label sub-tool highlighted (max 80 characters). |
editor.scene-snap-points.label-scheme |
Scheme | select |
— | — | W | chess, rows-columns, numbered |
How Name all names a regular grid. |
editor.scene-snap-points.label-flip-rows |
Flip rows | boolean |
— | — | W | — | Name the grid rows from the other end. |
editor.scene-snap-points.label-flip-columns |
Flip columns | boolean |
— | — | W | — | Name the grid columns from the other end. |
editor.scene-snap-points.label-swap |
Swap | boolean |
— | — | W | — | Swap rows and columns when naming the grid. |
Actions (8)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
editor.scene-snap-points.radii |
Show/Hide radii | W | — | Toggle the snap point markers and their catchment radii in the viewport. View state only. |
editor.scene-snap-points.place |
Place | W | — | Arm the Place sub-tool (click the table to add a snap point). Prefer snap_points_set for exact positions. |
editor.scene-snap-points.move |
Move | W | — | Arm the Move sub-tool (drag snap points in the viewport). |
editor.scene-snap-points.delete |
Delete | W | — | Arm the Delete sub-tool (click a snap point to remove it). |
editor.scene-snap-points.grid |
Grid | W | — | Arm the Grid sub-tool (click the table to place a rows × columns grid of snap points). |
editor.scene-snap-points.label |
Label | W | — | Arm the Label sub-tool (click a snap point to name it, or name a whole regular grid). |
editor.scene-snap-points.name-all |
Name all | W | — | Apply the chosen naming scheme to every snap point of the inferred grid. Undoable. |
editor.scene-snap-points.lift |
Lift onto table | W | — | Re-seat snap points (and grids) that sit below the play surface just above it. Undoable. |
scene.ui-layouts#
Scene UI layouts · surface editor · singleton (no target)
How it opens: Select the Game / Room row (its Scene scripts & UI block) or the Hierarchy's UI Layouts folder.
Fields (2)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
scene.ui-layouts.attach |
Attach UI layout | select |
— | — | W | — | Attach a layout from the project's library to the scene (written to the current variant scope, like scene scripts). The game's scripts show its furniture widgets when they start. |
scene.ui-layouts.attached |
Attached | boolean |
— | asset |
W | — | Whether this layout is attached to the scene in the variant being edited. The target is the layout id. |
Actions (5)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
scene.ui-layouts.new |
+ New UI layout | W | — | Create an empty UI layout in the project's library, attach it to the scene (current variant scope) and open it in the UI Layout tab. |
scene.ui-layouts.edit |
Edit | R | asset |
Open a layout in the UI Layout tab. The target is the layout id. |
scene.ui-layouts.detach |
Detach | W | asset |
Stop showing a layout in the variant being edited (the layout stays in the library). The target is the layout id. |
scene.ui-layouts.duplicate |
Duplicate | W | asset |
Copy a layout under a fresh id (not attached). The target is the layout id. |
scene.ui-layouts.delete |
Delete | D | asset |
Delete a layout from the library and detach it from every variant. The target is the layout id. |
scene.highlights#
Highlight styles · surface editor · singleton (no target)
How it opens: Select the Game row (or the Room row in the pre-mode editor): its HIGHLIGHT STYLES block.
Fields (6)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
scene.highlights.id |
Name | text |
— | asset |
W | — | The name scripts pass to world.setHighlight (lowercase letters, digits and -, up to 32). Naming a style target / active / playable overrides that built-in for this game. Renaming refuses a name another style already has. The target is the style id. |
scene.highlights.label |
Label | text |
— | asset |
W | — | An editor-only description of what the style means in this game (e.g. "Exhausted"). Players never see it. The target is the style id. |
scene.highlights.color |
Colour | color |
— | asset |
W | — | The outline colour as [r, g, b] in 0..1 (stored as #rrggbb). The target is the style id. |
scene.highlights.width |
Width | number |
— | asset |
W | ≥ 0.5, ≤ 4, step 0.25 | Outline thickness as a multiple of the default (about 1/4 inch at 1). The target is the style id. |
scene.highlights.intensity |
Intensity | number |
— | asset |
W | ≥ 0.2, ≤ 1, step 0.05 | How bright and opaque the outline is: 1 is fully bright. The target is the style id. |
scene.highlights.pulse |
Pulse | boolean |
— | asset |
W | — | A slow breathing pulse (respects the player's reduced-motion setting in the hand drawer). The target is the style id. |
Actions (3)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
scene.highlights.add |
+ Style | W | — | Add a new highlight style (style-N, light blue) to the variant being edited. Rename it with scene.highlights.id. |
scene.highlights.customise |
Customise | W | asset |
Override a built-in style for this game: adds a style named after it with the built-in look, ready to edit. The target is the built-in's id (target, active, playable). |
scene.highlights.remove |
Remove | W | asset |
Remove a style from the variant being edited (a removed override falls back to the built-in look; scripts naming a removed custom style are refused with a diagnostic). The target is the style id. |
editor.menu.file#
File menu · surface editor · singleton (no target)
How it opens: Menu bar ▸ File. Opening a menu mounts its items as menu.file.* actions.
No field or action is registered on this panel yet. panel_open can still open it, and describe_panel / screenshot_panel can read it.
editor.menu.edit#
Edit menu · surface editor · singleton (no target)
How it opens: Menu bar ▸ Edit. Opening a menu mounts its items as menu.edit.* actions.
No field or action is registered on this panel yet. panel_open can still open it, and describe_panel / screenshot_panel can read it.
editor.menu.view#
View menu · surface editor · singleton (no target)
How it opens: Menu bar ▸ View. Opening a menu mounts its items as menu.view.* actions.
No field or action is registered on this panel yet. panel_open can still open it, and describe_panel / screenshot_panel can read it.
editor.menu.mod#
Mod menu · surface editor · singleton (no target)
How it opens: Menu bar ▸ Mod. Opening a menu mounts its items as menu.mod.* actions.
No field or action is registered on this panel yet. panel_open can still open it, and describe_panel / screenshot_panel can read it.
editor.menu.help#
Help menu · surface editor · singleton (no target)
How it opens: Menu bar ▸ Help. Opening a menu mounts its items as menu.help.* actions.
No field or action is registered on this panel yet. panel_open can still open it, and describe_panel / screenshot_panel can read it.
editor.move-assists#
Move assists · surface editor · singleton (no target)
How it opens: Always mounted in the viewport's top-left corner in Edit Mode.
Fields (1)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
editor.move-assists.grid-size |
Grid spacing | select |
— | — | W | — | Grid spacing in feet for the Grid move assist (the live options, e.g. 0.25). Disabled while Grid is off. Editor-local; nothing is saved. |
Actions (3)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
editor.move-assists.snap-points |
Snap points | W | — | Toggle pulling a moved entity onto nearby snap points and board squares. Editor-local; nothing is saved to the project. |
editor.move-assists.grid |
Grid | W | — | Toggle pulling a moved entity's centre onto nearby grid lines. Editor-local. |
editor.move-assists.magnetism |
Magnetism | W | — | Toggle lining a moved entity up with nearby entities' edges, centres and spacing. Editor-local. |
game.dice#
DICE (Game) · surface editor · singleton (no target)
How it opens: Select the Game row in the Hierarchy; its DICE section (only for a game pack).
Fields (8)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
game.dice.mode |
Dice offered | select |
— | — | W | standard, custom |
standard: the stock d4–d20 set. custom: the dice listed below. Disabled while dice rolling is off (the section header's checkbox). |
game.dice.clear-after |
Clear rolled dice after (s) | number |
— | — | W | ≥ 0, ≤ 3600, step 1 | Seconds after a roll settles before its dice clear themselves (manifest.diceClearAfterSeconds); 0 = never (the default). Applies to dice-dock, VR and script-requested rolls (a script's clearAfterSeconds overrides it). A die someone picked up is kept; one being held is never cleared. Disabled while dice rolling is off. |
game.dice.entry.faces |
Faces | select |
— | project |
W | — | The die's face layout: face count, printed numbers and collider shape. Target game#<die key>. |
game.dice.entry.model |
Model | select |
— | project |
W | — | What the die looks like, applied exactly as dropping that thing on the die's slot: "" = the stock die of its face layout; preset:<die preset id> = a stock die with the same face count (sets the layout, clears any custom model); a project die design's repo path (models/dice/<name>.die.json, labelled with the design's name; offered once its model is built) = that design's baked model, which also sets the face layout to the design's shape. A current model no design baked reads back as its own path. Live options come from fields_get. Target game#<die key>. |
game.dice.entry.name |
Name | text |
— | project |
W | — | Label shown in the dice picker; empty uses the layout's name. Target game#<die key>. |
game.dice.entry.start-count |
Start | integer |
— | project |
W | ≥ 0, ≤ 40, step 1 | How many of this die the picker starts at. Target game#<die key>. |
game.dice.entry.tint |
Tint | color |
— | project |
W | — | Colour the die is tinted, as [r, g, b] in 0..1 (clear it with the clear-tint action). Target game#<die key>. |
game.dice.add |
+ Add die… | select |
— | — | W | — | Write a face layout to append a die of that layout to the list. Reads back empty (it is a picker, not a stored value). |
Actions (4)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
game.dice.entry.clear-model |
Use the stock die model | W | project |
Drop this die's custom model so it renders as the stock die of its face layout. Target game#<die key>. |
game.dice.entry.clear-tint |
Clear tint | W | project |
Remove this die's tint. Target game#<die key>. |
game.dice.entry.clear-material |
Clear material | W | project |
Remove this die's material. Target game#<die key>. |
game.dice.entry.remove |
Remove this die | W | project |
Remove this die from the game's dice list (the last one cannot be removed while custom dice are on). Target game#<die key>. |
