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
Surfacefield appears. - render.md — the next section down, and the one
PIECEused to be (wrongly) part of. ObjectHandle—ObjectData.kind, the same kind as a table script sees it.
