Dicey Table

PIECE

PIECE is a Platform panel, rendered with the platform header accent, sitting directly below ENTITY and above RENDER. It used to be two fields (TYPE/SURFACE) living inside RENDER, which made "what is a component?" unanswerable — entity kind and physical surface are DiceyTable classifications, not render state. Splitting them into their own panel is why the accent-color distinction exists at all; see Provenance and lifecycle.

Source: the PIECE EmCollapsible (tone="platform") in TableEditModeShell.tsx's object Inspector branch.

Fields#

PIECE renders one of two forms depending on whether the object carries a custom/imported model (metadata.customModelAssetId is set).

Custom / imported pieces — both fields editable#

Field Type Values Default Runtime effect Replicates
Type select the 9 Platform kinds, by their author-facing names: Card, Deck, Die, Token, Board, Container (the bag wire kind — see CONTAINER), Custom piece, Card holder, Button. The list is derived from tableObjectKindSchema.options and labelled by tableObjectKindLabel, so no wire spelling ever reaches the dropdown. the kind chosen at creation Reclassifying an object's kind. Drives the sound-event mapping (which events this piece can emit) and, through defaultObjectPhysicsForKind, the suggested physics defaults shown as placeholders under RIGIDBODY — it does not overwrite physics fields you have already set. Yes — TableObjectState.kind
Surface select the 8 sound materials: wood, cardboard, metal, plastic, card, tile, generic, silent the kind's default material The physical surface, driving both impact-sound selection and — via the same defaultObjectPhysicsForKind — the read-only "From surface" mass/friction/restitution readout under RIGIDBODY. silent suppresses sound entirely. Yes — TableObjectState.material

A hint under these two fields spells out the coupling: "Surface drives impact sounds and the physics defaults (mass, friction, bounce). Adjust the numbers under Rigidbody afterward."

Standard (non-custom) pieces — read-only#

For every standard-preset piece (not a custom/imported model), PIECE shows a single read-only row:

Field Type Runtime effect Replicates
Type read-only text Displays object.kind (e.g. die, card) with no control to change it. Standard pieces are not reclassified from the Inspector — their kind was fixed by the preset they were spawned from. n/a (read-only view of TableObjectState.kind)

Standard pieces have no editable Surface field either — their sound material is fixed by the preset, and the admin-only SOUND SETS (BUILT-IN) section shows the resulting bindings read-only.

Deck source (deck pieces only)#

Field Type What it tells you
Deck source read-only text Custom: <deck id> when the object carries a baked metadata.customDeck slice — hover for the image/card counts and sheet path — or a warning-coloured Standard 52-card deck when it does not.

This row exists because the two are otherwise indistinguishable: a deck spawned from one of your .deck.json assets and one dragged out of the standard preset catalog look identical on the table and carry the same deck kind in the Hierarchy. The only difference is a metadata.customDeck slice, which nothing else surfaces — and mods have shipped a generic playing-card deck while their author was busy editing and republishing a custom deck that had never been placed.

If it reads Standard 52-card deck and you wanted your own, delete the object and drag the deck in from Project → Decks; see the Deck editor.

Search (deck pieces only)#

A container (bag) has the same two rows, but they are not here — they moved to the CONTAINER panel, where they sit beside Form, Container mode and the rest of that container's policy.

Field Type What it does
Search select Who may privately look through this pile: Not set, No one, Owner seat only, Host only, Owner seat and host, Anyone.
After search select What happens to the remainder when the session closes: Not set, Shuffle the rest, Keep the order.

Both are three-state. Not set removes the setting entirely, which is the only way back to unauthored once you have picked something: the pile then inherits from the surrounding Area zone, and then from the kind default (Owner seat and host for a deck, No one for a bag, Shuffle the rest for the order).

Set here, either one overrides what the zone says — and the two resolve independently, so a deck that sets only After search still inherits the zone's audience. The Not set (…) label names the kind default, not the zone's value, so read the zone's own dropdown to see what an unset pile sitting in it will do.

Full precedence rules, defaults and what a search looks like at the table: Deck and Bag Search.

What "Type" is not#

Neither Type field is parentId, and neither is the read-only Kind in ENTITY (ADVANCED) (the engine component-type list, which is a completely different axis — see The scene model). This Type is TableObjectState.kind, the Platform classification described in Provenance and lifecycle.

See also#

  • platform-panels.md — where Surface's sound bindings surface for review.
  • rigidbody.md — where the "From surface" physics readout driven by this panel's Surface field appears.
  • render.md — the next section down, and the one PIECE used to be (wrongly) part of.
  • ObjectHandleObjectData.kind, the same kind as a table script sees it.