# Doubler display model guide [Read as Markdown](/raw/game-model-roulette.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. ## Doubler is the `roulette` asset Use `{"id":"roulette:0","kind":"game","asset":"roulette","position":[0,0,0],"yaw":0,"scale":[1,1,1],"color":"#ffffff"}` as the native station, with a position that fits your layout. There is one permitted Doubler station per creator world. Do not invent `doubler:0` or an ordinary roulette wheel asset. Its native root is `roulette` in the **props/display library**, not the card-table library. The library geometry uses a display-specific source-to-world scale, currently **1.05**. The bridge applies it. Do not use the shared card-table scale or change the entity scale to compensate. ## Screen and interaction regions The main screen plane is 9.36 × 4.68 source units, centered at `[0,3.6,0.31]` before the display scale and station transform. Preserve the entire screen rectangle and the slightly forward overlays. Exact display measurements are also in [model-proportions.json](/model-proportions.json). | Region | Native purpose | |---|---| | Reel strip and marker | Shows the round's moving selection and outcome | | Round status / countdown | Shows when betting is open or the round is progressing | | Red / Green / Black / Bait columns | The four native outcome selections and their bet areas | | Stake and settings area | Opens/configures the supported bet controls | | Player rows | Shows participants and results; some regions open player information | The reel strip is centered above the betting columns; the betting overlay is centered near `[0,1.90,0.38]` in display-source space. These are live client layers in front of the static display body. Do not add a glass pane, custom billboard face or decorative bars across them. The generated native reference can correctly show an empty `controls` array here: this game's clickable regions are generated by the display code, not mesh-based physical buttons. ## Artwork recipe Create separate outside frame pillars, base end-caps or a sign above the native cabinet. Keep all four betting columns visible and reachable. Use an opening sized for the full display, not just the animated reel. A narrow opening that preserves the center will still hide a side choice or the settings corner. Avoid a single giant hollow frame: its bounding-box collider may span the screen approach. Split solid pieces and keep their bounds outside the player's route. The lower betting/player region must be visible from standing height and on portrait phones. Do not place shrubs or a thick front counter across it. Do not bake player names, a payout table, countdown, winning color or reel result into the art. These values are live. Decorative color stripes should not look like additional betting choices. The runtime owns selection semantics and wager handling; your mesh cannot change the reel order or accepted outcomes. ## Shared-state review Review the open-betting display, waiting state, moving reel and settled result in an authorized preview. Verify that the outcome marker is visible throughout the reel animation and that all selection columns remain separate. Check the lower participant area as well as the title. A screenshot of an empty screen is insufficient. The nearby prompt may open bet controls rather than silently choose an outcome. Keep instructions generic and let the client show the player's current key binding or touch action. ## AI brief ```text Get game_skin_contract for roulette 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. ``` Follow [the common workflow](/model-authoring-workflow/) for transforms, budgets and publication. ## Reference skin sockets (v1 and v2) Read `game_skin_contract({"game":"roulette"})` before saving. The current fingerprint is `d4e49f283e62dbaf`. The [live catalog](/game-skin-catalog.json) is authoritative if a copied example differs. The replacement body is fitted to station-local world bounds `[-5.7434999, 0, -0.819]` through `[5.7434999, 7.6440002, 0.987]`. Width, height and depth are `[11.4869999, 7.6440002, 1.806]`. These values already include source scale. Entity scale remains `[1,1,1]`. There are **no physical-button replacement sockets** for this game. Use `bindings: []`. The platform generates all clickable screen regions, their labels and state-dependent availability. The body can be replaced; the interactive display supports v2 placement and clips, with live content supplied by Betworld. Save a skin with `game: "roulette"`, its current fingerprint, a converted `body` hash and the chosen `bindings`. Apply it only to existing `roulette:` 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":"roulette"})`. 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/).