# Build in the game ## Open your world builder Sign in, open **Create your world**, name your world and select **Create world**. The builder opens with your starting room and native game stations. For an existing world, select it in **Your worlds** and choose **Open world builder**. While playing in a world you own, open the Escape menu and choose **Edit this world**. The builder loads your latest saved draft into a private 3D workspace. Other players continue using the published layout. Your player leaves the live room while you edit. Game controls and betting are unavailable in the builder. Only the owner can read, save or publish the draft through this interface. ## Place objects The asset library is on the right: - **Build:** floor slabs, walls, doorways, window walls, stairs and ramps. - **Props:** building blocks, pillars, carpets, benches, planters and bar counters. - **Games:** native betting stations, with the placed count and available capacity shown on each card. - **Uploads:** your validated custom GLB models. - **Objects:** search the objects already in your world. Select one to focus the camera and open its position, rotation and size controls. - **World:** terrain generation, backgrounds, surface colors, storage, saved budget and draft controls. Each card shows a preview of the actual model, including your uploads. Select an asset, move your pointer onto a floor or prop surface and click to place it. On a phone or tablet, select the asset and tap the surface. A transparent model previews the placement. Press **R** or choose **Rotate** in the placement prompt to turn it by 45 degrees. Press **Escape**, choose **Select**, or use the cancel button to cancel placement. Set **Build area** above the viewport to enlarge the placement grid and playable floor. Choose 56, 96, 128, 192, 256, 320 or 384 metres per side; **World → Build area width (m)** accepts any whole number from 56 to 384. Your existing objects keep their positions. Resizing supports undo; shrinking is refused if an object would fall outside the new bounds or block the relocated entrance. Object origins must stay within ±half the build width on X/Z and 0–64 metres on Y. The gold area at the entrance is reserved: keep origins with `abs(x) < 3` and `z > buildSize / 2 - 6` clear. Keep walking routes and game controls accessible when arranging larger objects. The editor does not automatically prevent every overlap between props. Uploaded props are centered horizontally, grounded and normalized so their longest dimension is one game unit before the entity scale is applied. Set the scale in the inspector after placement to choose the visible size. ## Build floors and structures Open **Build** for the modular building kit. The pieces have matte stone surfaces and can be tinted. Every piece is one entity and uses instanced rendering after saving. | Piece | Default width × height × depth | Collision | | --- | --- | --- | | Floor slab | 6 × 0.25 × 6 m | Solid slab | | Wall | 6 × 6 × 0.3 m | Solid wall | | Doorway | 6 × 6 × 0.3 m | Open center, 3 m wide and 4.8 m high | | Window wall | 6 × 6 × 0.3 m | Open window, 3 m wide, from Y 2.2 to 4.8 | | Stairs | 4 × 6 × 12 m | Smooth walking slope beneath the visible steps | | Ramp | 4 × 3 × 8 m | Sloping surface | Use **Width**, **Height** and **Depth** in the inspector to enter dimensions in metres, measured along the object's own axes. The underlying scale remains 0.1–12 times its source dimensions. The doorway opening and stair slope scale with the piece; keep enough headroom and a gentle enough slope for players. Use **Copy beside → Left / Right / Back / Front** to create an adjacent copy aligned to the selected piece's dimensions and rotation. The new copy becomes selected; repeat to extend a wall or floor. Undo removes each copy separately. Enable **Keep placing** to place the same prop repeatedly without returning to the library. **Shift-click** repeats one placement on desktop. Rotation, dimensions and tint carry over; each placement is undoable. Press **Escape** to finish. This feature applies to props; games retain their available station counts. Build enterable structures from separate walls, floors, doorways and stairs. Uploaded props and the original scenery pieces still use one solid bounding box per entity; a single uploaded building shell would block its own interior. Export its modular components separately when using Blender. - **Place on → Surfaces** places the new object's bottom onto a visible, upward-facing prop surface. This works on saved floors and freshly added pieces. Grid snapping aligns X/Z; the surface determines the precise elevation. - **Place on → Height grid** places objects on the horizontal plane selected by **Grid height (m)**. Set this to the elevation of the next floor when you want to build above empty space. - Use the **Move** tool's vertical handle or the inspector's **Y** field to adjust elevation after placement. This works for props and game stations. **Set grid to top** in the inspector moves the working grid to the selected prop's top surface. This changes only the editing view. The placement grid can be raised from 0 to 64 metres. In Surfaces mode, it is the fallback plane and minimum eligible surface height. Return it to 0 to place objects on lower floors. Put floors beneath elevated game stations and leave enough standing space around their controls. The native stairs climb toward local negative Z; rotate the piece to choose the approach. Their default rise is 6 m. For two floors with origins at Y = 0 and Y = 6, place the stairs on the lower slab's top at Y = 0.25 so the landing meets the upper slab's top at Y = 6.25. Leave an opening in the upper floor above the stair flight. The room ceiling rises to accommodate elevated entities; choose **World → Layout → Outdoor** for freestanding buildings. Game stations retain unit scale. Their controls, cards, displays and player approach points move with the station, keeping table height relative to the floor unchanged. A moved floor does not carry other entities with it: select and move its contents separately. ### Furnish below a roof Enable **Cutaway**, then set **Show below (m)** to the height you want to see. Geometry above that plane is hidden and cannot intercept selection or surface placement. This lets you place furniture beneath an existing upper floor or roof. For a room under a floor at Y = 6, a cutaway height of 4.5 m exposes the interior. The clipped view is editor-only; saving and publishing keep every object intact. Turn Cutaway off to inspect the complete building. Changing **Grid height** sets the suggested cutaway height to six metres above it. You can adjust **Show below** independently. Asset thumbnails always show the complete model. ## Move, rotate and resize Click or tap an existing object to select it. The highlighted bounds and transform handles identify your selection. | Tool | Shortcut | Operation | | --- | --- | --- | | Move | W | Drag an axis or plane handle to reposition the selection. | | Rotate | E | Drag the vertical rotation ring. | | Resize | Q | Change a prop's width, height or depth. | | Turn 45° | R | Rotate the selected object or placement preview. | | Focus | F | Move the camera close to the selected object. | | Duplicate | Ctrl/Command + D | Create a copy, then choose its surface or grid position. | | Delete | Delete / Backspace | Remove the selected object. | | Undo | Ctrl/Command + Z | Undo the latest edit. | | Redo | Ctrl/Command + Shift + Z | Reapply an undone edit. | | Save draft | Ctrl/Command + S | Save your current document. | The inspector also accepts numeric position, rotation and scale values. Commit a number by pressing Enter or leaving the field. Rotation is displayed in degrees; the saved world document uses radians. Prop dimensions on each axis can range from 0.1 to 12 times the source size. Use **Tint** to recolor a prop. Game stations retain unit scale and can move vertically onto another floor, keeping tables, players and native interactions in proportion. The **Snap** selector supports 0.25, 0.5, 1 and 2 game units, or Off. When snapping is enabled, rotation handles snap to 15 degrees and scale handles to 0.1 increments. Undo keeps up to 100 editing operations in the current session. Saving retains the undo history until you leave or reload the builder. ## Move the camera On desktop, drag empty space to orbit, right-drag to pan, and scroll to zoom. On touch devices, use one finger to orbit and two fingers to pan or zoom. **Top view** looks down at the layout; **Show whole world** resets the overview. The **Assets** button opens or closes the right panel, including on mobile. Select **Fly camera** (the navigation arrow) to move freely through your build. Use **WASD** to move, **Q** to descend, **E** to rise, and **Shift** to move faster. Hold the right mouse button and drag to look around. Click an object to keep editing from your new viewpoint. On touch devices, drag to look and hold the Forward, Back, Left, Right, Up or Down buttons to move. **Escape** returns to orbit controls. Flying changes only your camera; it does not move your spawn or any entities. The W/E/Q transform shortcuts resume when you leave Fly camera mode. The builder uses a cutaway view: the room walls and ceiling are hidden so you can see the layout from above. They are present when playing the world. Change their color in **World**. The grid, selection outlines, entrance marker and transform handles appear only in the builder. ## Upload your own models Choose **Upload** and select a `.glb` file: 1. Export a static model with its textures embedded in the file. 2. Keep the file at or below **4,000,000 bytes**. Each embedded texture must be at most **2048 pixels** on either axis. 3. Upload it and wait for validation. The server converts it through the existing isolated prop processor. 4. Select the accepted model under **Uploads** and place it in your world. The viewport loads only the accepted server output. Rejected files are not added to the library or rendered as a local preview. Your library can contain up to **100 MB** of converted models and background images, shared across your worlds. Uploading adds a library asset; placing it adds an entity to the draft. Deleting a placed entity keeps its reusable library asset. Use [custom models](/custom-models/) for detailed export requirements. The asset uploader creates static scenery. To replace a betting machine's body or controls, use the [game skin contract](/game-skin-contract/) through Blender or MCP. Existing skin definitions, bindings and numeric animation data are preserved when the builder saves your world; moving a station moves its configured presentation with it. ## Terrain and backgrounds In **World**, set **Layout → Outdoor**. Choose a terrain preset, set its size (128–512 m), height, roughness and seed, or select **Flat**. **New seed** regenerates the surrounding hills; **View terrain** frames the landscape. The central build area remains flat, and the surrounding terrain is walkable. Terrain width must be at least the build width plus 64 metres; enlarging the build area automatically expands terrain when necessary. For the background, choose **Sky**, **Lobby panorama**, or **Upload panorama**. Upload a PNG, JPEG or WebP up to 12 MB, 8192 pixels wide and 16 megapixels, with an aspect ratio of 2:1 to 8:1. Set its rotation to align the horizon. Both terrain and background settings support undo and are saved with the draft. See [terrain and backgrounds](/terrain-backgrounds/) for image preparation, exact parameters and the upload API. ## Save a private draft **Save draft** persists your complete layout without changing the playable world. The header shows whether you have unsaved changes and the current saved revision. Leaving with unsaved changes offers **Save & leave**, **Discard & leave**, or **Keep editing**. Uploads already accepted by the server remain in your asset library even if you discard layout edits. Every save checks asset ownership, station IDs, placement bounds and the world budgets: up to 1,000,000 entities, 500 MB estimated runtime memory and 100 MB total download, with the first reached limit applying. See [limits](/limits/) for the additional geometry, texture and manifest caps. The **World** tab shows budget totals returned by the last successful save. If another browser, Blender or your AI saves first, the revision check rejects your stale save. Use **Download my changes** to keep a JSON copy, then **Reload latest** to load the current saved draft. Reloading discards your unsaved local edits. There is no automatic merge; you can reapply your changes in the builder or ask your AI to merge the downloaded document with the latest revision. ## Publish a live update Choose **Publish** to save any pending edits and queue that exact revision. At least one game station must remain in the layout. Players see **Update incoming** at the top of the game. New wagers in that world are blocked on the server. Existing hands, picks, draws, cash-outs and shared rounds continue normally. Waiting player-versus-player coinflips can be cancelled by their creator or expire under the existing ten-minute rule; matched flips continue to settlement. After a notice period of at least five seconds, the server applies the queued snapshot as soon as all accepted bets have settled. Players automatically download the updated world and assets. Only the 3D world reloads; the site shell stays mounted. Other worlds remain open for betting. Further draft edits do not change the queued snapshot. In the **World** tab, choose **Cancel pending update** to reopen betting without applying it. You can then save and publish a different revision. Pending updates are stored in the database and survive a server restart. The server does not force a payout or erase an unfinished game to hurry publication. Choose **Play world** to enter the published layout. For new worlds, this becomes available after the first publication completes. Your draft remains private until publication. ## Combine the editor with AI and Blender The builder and MCP use the same document, asset library and revision numbers. For example, arrange native tables in the builder, save, ask an AI to build a custom prop in Blender and upload it, then reload the builder and place it from **Uploads**. Coordinate saves so only one client edits the draft at a time. The builder uses owner-session routes in the [World HTTP API](/world-api/): `GET /:id/draft`, `PUT /:id/draft`, `POST /assets`, `POST /backgrounds`, `POST /:id/publish`, `DELETE /:id/publish` and `GET /:id/update`. An AI world credential can edit drafts and upload models; publishing uses your signed-in owner session. ## Editing official maps as an admin Sign in to the admin panel with your password and authenticator. In **Lobby** or **Pyramids**, press **Escape → 3D editor**. You can move game stations in Pyramids, place props, and reposition the leaderboard TVs and portals. The lobby stays free of betting stations. Click either wooden world portal in the lobby to move or rotate it. Its frame, sign, portal surface and walk-through trigger move together. Pyramids' placed scenery is editable too: columns, walls, canopies, sofas, rugs, palms, braziers, pyramids, paving and terrain tiles. Related pieces move together—for example, a sofa includes its cushions. Use **Objects** to search for pieces obscured by a canopy or other scenery, then choose **Focus** or use the fly camera to inspect them. The sky panorama and ambient sand particles remain background effects. Original map scenery retains its authored materials and can be positioned within ±2,048 metres on each axis, including below ground. Newly placed library props and games use the normal build-area limits. The original scenery assets are available only in their own official map. Save a draft, then select **Publish**. Players see the update notice; new bets pause until existing games finish, then the world reloads. Saved official layouts survive server restarts. Leaderboard TVs show richest-online, profit and wager rankings, with Online, All time and This month views. A Lobby portal returns players to the main lobby by walking through it or selecting it. Each world supports up to four of each fixture.