Keno model guide
Read as Markdown · All game guides · Measured native reference
Replacement skin support
This game supports the v2 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 station
Use keno:0 through keno:4, asset keno, floor elevation Y = 0–64 and unit entity scale. The root is keno in the game collection. It is a wide upright cabinet; measure its current world-space bounds before fitting it beside another board. Leave an approach far enough back to see the entire grid on a portrait display.
The live number area contains 40 numbers in eight columns and five rows. Players can select up to ten numbers. Native references tile_0…tile_39 are zero-based geometry identifiers; the game selections are numbers 1…40. Do not confuse these conventions when reading the reference.
Required visible areas
| Region | Native purpose |
|---|---|
| Number grid | Select/unselect numbers and display drawn outcomes |
| Bet | Starts the configured round; requires a valid number selection |
| Random | Uses the platform's number-selection behavior |
| Stake − / + | Adjust the next stake when allowed |
| Settings | Opens supported risk, stake and related bet controls |
| Paytable area | Reflects the current number count and risk configuration |
| Status strip | Instructions, reveal progress, hit count and result |
Read physical button positions from games.keno.controls and the current grid and screen envelope from its reference nodes/runtime mounts. Do not build a substitute Random button or invent a random binding for a prop. The functional control stays native.
Artwork layout
Frame the outside of the native cabinet with separate panels or a nearby sign. Keep all eight columns visible. Centering a decorative opening on the middle six columns is not sufficient. Keep the entire screen above the numbers clear: it contains a live payout table, not just a decorative title area.
The payout table changes when selection count or risk changes. Never engrave a fixed payout table into new artwork as the game's authoritative information. Preserve the native distinction between selected numbers, drawn numbers and selected hits; a custom background should not reuse those state colors in a confusing pattern.
Place large boards on the room perimeter when practical and face them inward using yaw. Use separate solid side decorations and check their collision boxes. A planter at the front corner may hide the outermost column even if it does not overlap the cabinet itself. Leave adequate room for the full portrait-phone viewing position, not just a character standing immediately in front of the base.
State review
Check an empty selection, several selected numbers, the maximum selection, and the live paytable at different selection counts/risk settings. During a draw, the native client reveals outcomes progressively and displays matches. Inspect both the lowest and highest numbered rows. At completion, the result summary and hit count must remain readable.
In a Blender-only review, mark the number rectangle and paytable as protected placeholders. They will be generated by the client. To inspect active states, use an authorized preview or owner-authorized session; creating art does not authorize wagering.
Common problems include a central ornament spanning the grid, a title board hiding the paytable, and front furniture forcing the viewing camera too close. Another is labeling custom tiles 0–39, which does not match the player-facing 1–40 numbering.
AI brief
Get game_skin_contract for keno 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.
Continue with export and upload; replacement cabinets use skin contract v2.
Reference skin sockets (v1 and v2)
Read game_skin_contract({"game":"keno"}) before saving. The current fingerprint is 11b132575f081153. The live catalog is authoritative if a copied example differs.
The replacement body is fitted to station-local world bounds [-4.5091205, 0, -1.1684503] through [4.5091205, 9.0401985, 2.3525847]. Width, height and depth are [9.018241, 9.0401985, 3.521035]. 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 | + | [-3.7406096, 1.7476827, 1.5340446] → [-3.4112477, 1.9273402, 1.8634197] |
control.quick | quick | None | BET | [-4.2192821, 1.6928011, 0.5293448] → [-3.4815115, 1.9822218, 1.2683618] |
control.random | random | None | RANDOM | [3.4815115, 1.6928011, 0.5293448] → [4.2192821, 1.9822218, 1.2683618] |
control.settings | settings | None | SETTINGS | [3.5445608, 1.7322574, 1.5078444] → [4.1562328, 1.9427655, 1.9523555] |
control.stake_down | stake_down | None | − | [-4.2424942, 1.7476827, 1.5340446] → [-3.9131324, 1.9273402, 1.8634197] |
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: "keno", its current fingerprint, a converted body hash and the chosen bindings. Apply it only to existing keno:<index> entities. Declare each binding in the skin manifest. Follow the exact manifest and fitting rules and the export workflow.
V2 layout and animation
Fetch game_skin_contract({"game":"keno"}). 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.