# Baccarat model guide [Read as Markdown](/raw/game-model-baccarat.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. ## Native identity and proportions Use `asset: "baccarat"`, IDs `baccarat:0` through `baccarat:8`, floor elevation Y = 0–64 and scale `[1,1,1]`. The root is `baccarat` in the game collection. Position and yaw can change; the table's functional dimensions cannot. The playing surface is 0.8779038617 source units and approximately 1.376895 world units high. Relative to the canonical bare player body, the ratio is **0.48273607884945505**. If making an offline scale sketch with body height `H`, place the playing plane at `H * 0.48273607884945505`. In the downloaded world, keep the actual native dimensions. Do not rescale the table to match real-world casino measurements or the rim in a concept image. ## Required controls and live areas | Region | Native function | Leave clear | |---|---|---| | Player | Selects Player | Its physical choice button and betting area | | Tie | Selects Tie | The middle choice and its label | | Banker | Selects Banker | Its physical choice button and betting area | | Deal | Starts the configured wager | The action button on the player side | | Stake − / + | Changes the configured stake when allowed | Both separate button faces | | Settings / stake monitor | Opens controls and shows the current amount | The visible screen and click surface | | Player and Banker card lanes | Dealing, optional third cards and totals | Full hand width and the travel from the deck | The native choice indices are **0 = Player, 1 = Tie, 2 = Banker**. They are described so an AI understands the template; the skin contract maps `control.choice_0`, `control.choice_1` and `control.choice_2` to those choices without accepting an uploaded index or action parameter. Runtime anchor names include `player_slot`, `banker_slot`, `player_chip_slot`, `tie_chip_slot`, `banker_chip_slot`, `deck` and `screen`. Read their transforms from the reference instead of placing cards by eye. ## Original decorative designs that fit Add a separate pedestal skirt in solid pieces, side medallions outside the native footprint, or a title sign behind the functional area. Use the game's supported felt tint for a coordinated palette. Keep the native top, choice controls and rail in place. Do not place another felt surface on top: it can hide live cards or intersect their animation plane. Use matte materials on broad surfaces so the native choice labels remain easy to read. Preserve the distinction between the three wager choices. Decorative symbols should not imply additional bets, changed payouts or an interactive fourth choice. Live amounts, odds, selection highlights and results remain client-rendered. ## Layout and state review Leave an unobstructed player approach on the front side. Align the walkway with the station's yaw and transform all decorative props with it. A rail or urn between the camera and the table can prevent interaction even if the player can reach the floor position. Review idle choice selection, dealing, two-card and three-card layouts, and the result state in an authorized preview or session. Check both Player and Banker lanes from portrait and landscape views. Do not add Hit, Stand or Cashout controls: Baccarat's dealing decisions are handled by the game, not by custom user buttons. ## AI brief ```text Get game_skin_contract for baccarat 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. ``` See [modeling workflow](/model-authoring-workflow/) and [scale reference](/custom-models/) before export. ## Reference skin sockets (v1 and v2) Read `game_skin_contract({"game":"baccarat"})` before saving. The current fingerprint is `977206937f57deca`. 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.9799405, 0, -2.2114296]` through `[2.9799405, 2.1514812, 2.1421068]`. Width, height and depth are `[5.9598811, 2.1514812, 4.3535364]`. 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 | + | `[-1.307622, 1.5770159, 1.4363936]` → `[-1.0449626, 1.6789612, 1.720139]` | | `control.choice_2` | `choice` | index 2 | BANKER | `[0.5617073, 1.5770159, 1.3563146]` → `[1.2576248, 1.6789612, 1.9332376]` | | `control.quick` | `quick` | None | DEAL | `[1.4435443, 1.5770159, 0.8670745]` → `[2.2578554, 1.6789612, 1.6505062]` | | `control.choice_0` | `choice` | index 0 | PLAYER | `[-0.9307255, 1.5770157, 1.431107]` → `[-0.2612508, 1.6789611, 1.9673178]` | | `control.settings` | `settings` | None | SETTINGS | `[2.448387, 1.5770159, 0.0489424]` → `[2.8527706, 1.6789612, 0.5784135]` | | `control.choice_1` | `choice` | index 1 | TIE | `[-0.1571137, 1.5770161, 1.4978473]` → `[0.4707916, 1.6789614, 1.9747576]` | | `control.stake_down` | `stake_down` | None | − | `[-1.6444073, 1.5770157, 1.3190743]` → `[-1.366901, 1.6789611, 1.6138176]` | 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.5627488, 1.3580748, -1.6562196]` through `[2.5627488, 1.3768955, 1.6562196]`. Its replacement does not move cards, the animation rig or the interaction proxy. Save a skin with `game: "baccarat"`, its current fingerprint, a converted `body` hash and the chosen `bindings`. Apply it only to existing `baccarat:` 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":"baccarat"})`. 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. Its result-motion channels are `card_deal`. Use the per-result progress and zero endpoint offsets described in the contract. Reference dimensions above describe the neutral layout before v2 placement. See the [exact fields, transforms and limits](/game-skin-contract/).