build-world51.1 KB
View saved version →
---
name: build-world
description: Builds polished, fully playable 3D browser games in three.js, with high-quality .glb models from the Thrixel API, and publishes each finished game to a public thrixel.world link that anyone can play. Use when the user wants to make a game, build a playable prototype, or generate 3D assets, and also when they want to publish or host a game folder they already have, share a playable link, or list, rename, update, unpublish or find the link for a game they published earlier.
---
# This is the ChatGPT build - read this section first
This copy of the skill runs in ChatGPT, not on the user's computer. The Thrixel connector
is Thrixel's hosted server, and there is no local machine, terminal, GPU or browser for you
to use. **Where anything below conflicts with this section, this section wins.**
- **three.js only.** Unity, Unreal and Roblox need an engine installed on a computer. If the
user asks for one of them, say this build makes three.js games and offer that, or point
them to the Claude Code or Codex version of Thrixel on their own machine.
- **Nothing to set up.** Sign-in happened when the connector was added.
- **Static files, no build step.** Write plain HTML and ES modules. Load three.js from a CDN
with an import map, for example:
`<script type="importmap">{"imports":{"three":"https://cdn.jsdelivr.net/npm/three@0.170.0/build/three.module.js","three/addons/":"https://cdn.jsdelivr.net/npm/three@0.170.0/examples/jsm/"}}</script>`.
No bundler and no build step.
- **Models stay on Thrixel.** Generation tools return a download link and a `submission_id`
instead of saving a file. Do not paste model data into your files. In the game, load each
model from a path of your choosing (`models/boat.glb`), and remember which `submission_id`
belongs to each path: publishing packs them in for you.
- **Never hand out a localhost address.** Nothing is served locally, so a `localhost` link
leads nowhere. The user's link is the one publishing returns.
- **Play it before you publish: `thrixel_playtest_game`.** There is no browser here, so
the game runs on Thrixel's side instead: pass the same `files` and `assets` you will
publish, and it presses start, moves, turns, acts, drags on a phone screen, and returns
a screenshot of each step with every error the page raised. Look at each screenshot as
someone seeing the game for the first time: every model on screen at a believable size
and facing the right way, each control doing what the controls line says, whatever the
player steers facing the way it travels (not backwards or sideways), everything that
moves in real life moving, nothing blank, black, covered or stuck on a loading message,
and a playable phone layout. If it reports a frame took too long to draw, the scene
costs more than it needs (the test has no GPU, but phones feel the same cost): cut
shadow resolution and soft shadows, lights and separate materials. A run of a heavy
scene can outlast one call; collect it with the `playtest_id` it returns. Fix what you
find and playtest again, as many
rounds as it takes; time spent here is time the user does not spend finding the same
bugs. Leave `cold_open` off (there is no preview video in this build).
- **Publish automatically once the playtest is clean.** This replaces the serve-and-ask
step of asking first. Call:
```
thrixel_publish_game(
files={"index.html": "...", "js/main.js": "...", "css/style.css": "..."},
assets={"models/boat.glb": "<submission_id>", "models/dock.glb": "<submission_id>"},
title="...", controls="...", controls_touch="...",
description="...", engine="threejs", genre="...", tags="...",
)
```
`files` holds every file except the models (text; a data URI for a binary such as
`cover.png`), with `index.html` at the root. Everything in "Publish" about `controls`,
`description`, `genre` and `tags` applies.
- **Then give the user the link.** The publish result caPreview of the first 4,000 characters. Read full instructions →
Referenced files: 25 — file references are metadata, not package contents.