# Dice model guide [Read as Markdown](/raw/game-model-dice.md) · [All game guides](/betting-models/) · [Measured native reference](/game-model-reference.json) ## Replacement skin support This game supports the [v2 skin contract](/game-skin-contract/). Replace the visible body and the exact named physical meshes listed at the end of this page. Use the surround and trim suggestions below to add matching scenery. Preserve the functional regions and state-dependent clearances described here. ## Station and native surface Use `dice:0` through `dice:4`, asset `dice`, floor elevation Y = 0–64, scale `[1,1,1]`. The root is `dice` in the game library. This game uses a low stepped control surface with a slider and display. It does not need a creator-authored rolling-dice physics simulation. Use `games.dice.controls` for the current button faces and `runtimeMounts` for the stepped sections and slider/display transforms. Older anchor names can describe reference locations rather than current visible buttons. Do not position new artwork from an old `roll_button` name alone; the generated control list measures the shipped native model. ## Functional regions | Region | Native behavior | |---|---| | Bet | Uses the configured stake and target | | Bet Size / Settings | Opens the supported bet controls | | Stake − / + | Changes the stake when allowed | | Flip | Switches the supported over/under direction | | Slider groove and target handle | Shows and changes the configured target | | Low/high fill sections | Indicate the target's two ranges | | Tick labels | Explain the numerical scale | | Main display | Shows target/result, chance, return information and status | | Result marker | Moves to the game result | The slider spans the native 0–100 reference scale; the current input clamps playable targets to 5…95 with half-unit selection steps. These values describe the interface, not permission to change the rules. Do not make a custom slider with new endpoints or an implied probability outside the native range. ## Protected transforms and movement Important runtime mounts include `section_2`, `section_3`, `slider_min`, `slider_max`, `screen` and the native slider references. The slider's live hit region is a 2.5 × 0.30 plane in its own transformed surface frame, not an axis-aligned plane at the game origin. Read the mount rotation as well as position. Keep the full handle travel clear, including both extremes. Low/high fills resize with the target and change visual meaning with Flip. The result marker travels across the same horizontal scale. A thin decorative strip over the groove may look harmless while still hiding the marker or intercepting the player's view. ## Artwork recipe Build separate pedestal trim and side panels below/outside the functional stepped surfaces. A small title plaque nearby is safer than adding another layer to the sloped top. Use broad, calm material regions around the numerical display. Do not add a glass lid across the controls: transparency does not remove a prop's box collider. Preserve the native labels and use custom signage only for the game title or visual theme. Never bake a target, win chance or result into the texture. Do not add fake numbered dice as if their physical landing determines the paid result; the native presentation is driven by game state. ## Review and AI brief Review minimum, middle and maximum target positions, both Flip directions, idle and settled display states, and the result marker at both ends. Keep the full slider accessible in portrait view. Merely opening Settings or inspecting artwork should not require placing a wager. ```text Get game_skin_contract for dice and download my current world draft. Build an original [theme] replacement body in Blender using the reference socket measurements and the preserved gameplay regions described in this guide. Upload static body/button assets; bind only the listed control/part sockets. Keep native labels, game values and collision. Use supported v2 placements, clips and result-motion channels for presentation changes. Save with game_skin_save and the current revision. Inspect the fitted model and report budgets and reviewed states. Do not upload code or publish via MCP. ``` Use [the shared workflow](/model-authoring-workflow/) for collision, normalization and upload limits. ## Reference skin sockets (v1 and v2) Read `game_skin_contract({"game":"dice"})` before saving. The current fingerprint is `b0f6f68ea1a67fd7`. The [live catalog](/game-skin-catalog.json) is authoritative if a copied example differs. The replacement body is fitted to station-local world bounds `[-2.8623114, 0, -1.7320752]` through `[2.8623114, 3.1645429, 1.7887485]`. Width, height and depth are `[5.7246228, 3.1645429, 3.5208237]`. These values already include source scale. Entity scale remains `[1,1,1]`. | Accepted binding slot | Fixed native action | Fixed index / seat | Native label | World-space bounds, minimum → maximum | |---|---|---|---|---| | `control.stake_up` | `stake_up` | None | + | `[-0.9096661, 1.6224991, 1.0508211]` → `[-0.6900915, 1.7244444, 1.5527059]` | | `control.quick` | `quick` | None | BET | `[-0.4469911, 1.6224991, 1.0508211]` → `[0.4469911, 1.7244444, 1.5527059]` | | `control.settings` | `settings` | None | BET SIZE | `[-2.3212169, 1.6224991, 1.0508211]` → `[-1.5683898, 1.7244444, 1.5527059]` | | `control.flip` | `flip` | None | FLIP | `[1.6154415, 1.6224991, 0.92535]` → `[2.3682685, 1.7244445, 1.678177]` | | `control.settings_2` | `settings` | None | SETTINGS | `[0.6273559, 1.6224991, 1.0508211]` → `[1.4742864, 1.7244444, 1.5527059]` | | `control.stake_down` | `stake_down` | None | − | `[-1.239028, 1.6224991, 1.0508211]` → `[-1.0194534, 1.7244444, 1.5527059]` | Only `slot` and the converted model `asset` hash go in each binding. Action, index and seat columns explain platform behavior; **do not copy them into uploaded JSON**. All listed sockets are optional visual overrides. Omitted sockets retain native meshes. Repeated Settings actions are distinct physical sockets and must use the exact listed ID. The catalog provides exact mesh-local `localBounds` for fitting and the full `matrixSource` for native orientation. Optional static surface: `part.playing_surface`, native reference `top`, world bounds `[-2.6348947, 1.4429186, -1.5213381]` through `[2.6348947, 1.4711496, 1.3958669]`. Its replacement does not move cards, the animation rig or the interaction proxy. Save a skin with `game: "dice"`, its current fingerprint, a converted `body` hash and the chosen `bindings`. Apply it only to existing `dice:` entities. Declare each binding in the skin manifest. Follow [the exact manifest and fitting rules](/game-skin-contract/) and [the export workflow](/model-authoring-workflow/). ## V2 layout and animation Fetch `game_skin_contract({"game":"dice"})`. Use `presentation.targets` to position the body, complete display and each listed physical control. Control labels and clickable proxies follow their target; action/index/seat identity stays the same. Numeric `idle` and `result` clips are supported. Use a `result` clip on `display` to animate the live presentation; this game has no separate card/coin/ball motion channel. Reference dimensions above describe the neutral layout before v2 placement. See the [exact fields, transforms and limits](/game-skin-contract/).