# Mines model guide [Read as Markdown](/raw/game-model-mines.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 layout Use asset `mines`, IDs `mines:0` through `mines:4`, floor elevation Y = 0–64 and scale `[1,1,1]`. The native root is `mines`. This is a large upright game: plan its whole frontage and a clear standing area before adding scenery. Perimeter placement facing inward is often easier to read than a tall board in the center of a walkway. Fetch `games.mines` from the current reference JSON. The native `tile_0` through `tile_24` geometry defines the baseline board envelope, but **the live game is not fixed to 25 tiles**. The client lays out 3 × 3 through 8 × 8 grids inside that area. Native mesh names are reference data, not a fixed creator-defined number of playable cells. ## Protected controls and displays | Region | Runtime behavior | Artwork requirement | |---|---|---| | Full tile rectangle | Reveals a chosen cell during an active game | Leave every edge and the entire face clear for all grid sizes | | Native CASH OUT button | Starts a game when idle; cashes out when the active state permits it | Retain the button, approach and state-dependent behavior | | Settings button | Opens stake, mine count and board-size settings | Keep unobstructed | | Summary screen | Current/next return, stake, mines, remaining gems and status | Preserve the whole display, not just its central number | | Revealed cell volume | Gem/mine artwork extends forward from the grid | Reserve depth in front of the board | The native action metadata for the main button is `cashout`. The client maps it to the correct action in context. It does not cash out before a valid reveal and does not let decorative artwork start or settle a round. The nearby primary prompt also changes from Bet to Cash out. Keep its label/state client-owned. ## Model a surround that works at every size Use separate outside columns, low side accents or a title plaque beyond the native top edge. Avoid a decorative lattice over the grid. A divider aligned to a 5 × 5 screenshot will cross cells on a 3 × 3 or 8 × 8 board. Do not add permanent tile numbers, gems, mines or selected-state colors to custom geometry. The smallest cells occur in the 8 × 8 layout. Leave enough empty space around the face that they remain readable on a portrait phone. Avoid bright emissive trim and high-frequency textures immediately behind the numbers. Do not cover the summary with a custom price/sign; the displayed values depend on the actual game settings and state. As with every prop, a single hollow frame gets a solid box collider. Split side decorations and keep their bounds outside the frontal interaction corridor. Reserve the full approach distance instead of placing another machine directly in front of the grid. Check a neighboring station's camera line too. ## State and clearance review Review minimum, default and maximum board sizes. In an authorized preview, inspect untouched cells, selected/queued feedback, gem reveals, a mine reveal, cashout and completed-round state. A static GLB viewer will not show the live grid layout or reveal pieces; use its bounds as a starting point, not a complete test. A common failure is trim that clears idle tiles but intersects a gem after reveal. Another is a custom base covering the low controls. Correct the decorative piece; native buttons, grid extents and reveal depth are not user-relocatable. ## AI brief ```text Get game_skin_contract for mines 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 [complete workflow](/model-authoring-workflow/) for export, normalization and budgets. ## Reference skin sockets (v1 and v2) Read `game_skin_contract({"game":"mines"})` before saving. The current fingerprint is `c05feb8688027c9c`. The [live catalog](/game-skin-catalog.json) is authoritative if a copied example differs. The replacement body is fitted to station-local world bounds `[-3.7327677, 0, -1.1684503]` through `[3.7327677, 8.4065694, 1.9840131]`. Width, height and depth are `[7.4655354, 8.4065694, 3.1524634]`. 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.cashout` | `cashout` | None | CASH OUT | `[-3.5445609, 1.6746155, 0.9163082]` → `[-2.6662627, 2.0004075, 1.7910646]` | | `control.settings` | `settings` | None | SETTINGS | `[2.6662627, 1.6746155, 0.9163082]` → `[3.5445609, 2.0004075, 1.7910646]` | 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. Save a skin with `game: "mines"`, its current fingerprint, a converted `body` hash and the chosen `bindings`. Apply it only to existing `mines:` 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":"mines"})`. 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/).