Repository navigation
EN Reference Dev URL Parameters
Français · Type: reference · Audience: author, contributor · Context: engine repository, created project · Status: ready · Applies from: 4.4.0
The query parameters a game's page reads. Add them to the page's URL in the browser: on the dev server
(npm run dev from the root of the engine repository, or from a created project's folder), the address is
http://localhost:5173/ unless Vite says otherwise. Some are development tools, read only by a development page;
the others work in every build, the production one included.
-
?dev,?edit=<room>and&at=<checkpoint>turn on the dev tools only on the dev server, in a Studio demo build (studio.demo-mode) and in a hosted Studio's previews of a revision (src/main.ts). Without them the player's game is the same in every build; a production build ignores them. - Every other parameter below is read by the engine in every build.
Limit ·
dev-tools-buildThe dev tools are not in a production build:?devand?edit=on a published game show the normal game.
| URL | Effect | Build |
|---|---|---|
/ |
The normal game: title screen, New Game / Continue. | every |
/?dev |
Starts on the first checkpoint, with the debug layer and the DEV panel. | development |
/?dev&at=<checkpoint> |
Starts on this checkpoint (one of the game's checkpoints). |
development |
/?edit=<room> |
The room's placement editor. | development |
/?edit=<room>&at=<checkpoint> |
The same, in that checkpoint's state (to place a prop in a given state). | development |
?lang=<code> |
The language to play in. | every |
?renderer=canvas|dom |
Forces a painter for every room. | every |
?music=mix|stems |
Forces the single mix or the stems. | every |
?fps |
A frame counter in a corner. | every |
?seed=, ?daily=, ?world=
|
Opens a Remix world. | every |
?reality=sim |
A simulated world link. | every |
?speedrunTool=<port> |
Posts the run's events to a local speedrun tool. | every |
?token=<token> |
The LAN Studio's token. | dev server in LAN mode |
/?dev starts the game on its first checkpoint with the engine's trace on, the debug layer and the DEV panel
(src/engine/dev/).
-
Layer, drawn over the scene:
- clickable zones in blue, props in purple, characters in green;
- the walkable zone in green, holes (furniture) in red;
- depth-scale lines in orange, entry points in pink;
- approach points: filled if set in the layout, hollow if computed.
- Show or hide the layer: the D key, or the DEV button in the bottom left (on a phone).
-
Panel:
- the current room and the "busy" state (a script is running);
- Checkpoints: load a ready state, or start a New Game;
- Rooms: go to any room, without playing its arrival script;
- Bag: check or uncheck an item;
-
Flags: edit existing flags, or set a flag name and value (
true,false, a number or text); - Map: unlock a place, or Unlock all;
-
World: the room of each moving character (change it to
moveActorthem); -
Scripts: the position of each script in scope (
next command / length, done, stopped), with a stop or restart button; -
Journal: the last ten entries of the engine's journal (what answered, events, script steps, moves, switches;
the Studio's Play tab shows it whole), and Export session: the inputs since the game started, with the
session's semantic journal, for
npm run replay; - Semantic journal (4.1.11): the last twelve events the core numbered in this session (room entered, item acquired or lost, flag changed, ending, load, save), refreshed with the panel;
- Edit this room: opens the editor on the room shown.
With ?dev or ?edit=, starts on that checkpoint, an id of the game's checkpoints, instead of the first one.
/?edit=<room> opens the room's placement editor. On start it loads the first checkpoint located in that room; if
there is none, it starts from a fresh state, without playing an arrival script. All coordinates are logical
(640 × 400). The gestures and the editor's panel are described in studio.placement.
-
Saving writes
games/<GAME>/layout/<room>.jsonin the engine repository (game/layout/<room>.jsonin a created project), coordinates rounded to the unit, through the Studio's API (PUT /__studio/api/room/<room>/layout, one guarded operation of the game's journal: studio.api); the page then reloads with the saved file. Where there is no Studio API (a Studio demo build, a static host), the layout joins the demo's edits in this browser. A refusal of the Studio is shown with its reason. -
In the Studio (
/__studio/), the editor runs in an iframe and talks to the Studio's page withpostMessage, to the Studio's origin only (the page's own origin, or on a hosted Studio the origin itsweb-scumm-studio-originmeta tag names). It sends{ source: 'web-scumm-editor', room, type }messages:ready(withmissing, the entities that have no place yet),select(keysuch asprop:lamp,hs:door,actor:grandma, pluskindandidfor those three),dirty(unsaved changes) andsaved(ok,error; on a hosted Studio also thelayoutand the request'snonce, the Studio writing it). It accepts{ source: 'web-scumm-studio', type }messages:select(kind,id),create(gives a place to an entity the room declares but the layout lacks, optionally atat) andsave(optionally with anonce). In an iframe its panel starts folded.
The language to play in, when the game ships it: it comes before the player's saved choice and the browser's language
(pickLanguage, engine.api). See play.languages.
Forces one painter for every room: the visual parity check, the Studio's comparison. Any other value is ignored and
each room keeps its own renderer.
Forces the single mix or the director's stems (tests, the Studio); otherwise the device decides (create.music).
A frame counter in a corner (3.8): the frame rate now and the lowest second seen, for the real-phone pass.
For a game that declares remix (4.1.15): ?world=<frozen world> (its hash checked when it is applied),
?seed=WS-… (the remix mode) or ?daily=<signed day token> names the world the page plays. The autosave's world comes
first (Continue never disappears); a link to another world than the saved game's is asked on the title screen, never
adopted silently. See create.remix.
For a game that declares reality: the world link is simulated, as it always is with the dev tools on, and no
Bridge is contacted (bridge.signals-manifest).
The page posts its run's events (category, split ids and names, times; nothing else: no save, no player id, no token) to a local tool on that port of this machine: the OBS overlay or the LiveSplit autosplitter (4.1.14, D23). The port is 2 to 5 digits; the tool accepts them only from its allowed origin. See play.speedrun.
On the dev server in LAN mode (npm run dev:lan, npm run studio:lan), the one-session capability token the server
prints in its URL. Given once, it is kept in an HttpOnly, SameSite=Strict cookie; a request without it (and
without the x-web-scumm-token header) is refused with 401. See studio.security and
create.lan-testing.
Generated publication · publication générée — current documentation · documentation courante: quest'n'click 4.4.0 r1, documentation revision · révision de la documentation 8dc717c69acb62c4742b69c54a7e7dfb620f75d8.
Earlier versions and permalinks · versions précédentes et liens permanents: https://wanoo.github.io/quest-n-click/docs/
An edit made in this wiki is overwritten at the next publication · une modification faite dans ce wiki est écrasée à la publication suivante.
Edit the source · Modifier la source · Report an error · Signaler une erreur
Index (6)
Start (6)
Play (9)
Install (17)
- Requirements
- Install from the release archive
- Install from npm, once published
- Install from the repository to work on the engine
- doctor: checking your machine
- Image toolchain
- Audio toolchain: ffmpeg, fluidsynth, Furnace, uv
- Upgrade
- Upgrade notes: 4.4
- Upgrade notes: 4.3
- Upgrade notes: 4.2
- Upgrade notes: 4.1
- Upgrade notes: v3
- Upgrade notes: v2 to v3
- Coming from web-scumm
- Package reference
- Install troubleshooting
Create a game (55)
- Your first game
- Layout of a created project and of the engine repository
- The working loop
- Content principles and the identity contract
- Rooms
- Geometry: placement, walk zones, masks, layers, camera
- Something is visible but unreachable
- Reactions
- Game commands
- Conditions
- Flags, variables and events: which to use
- Custom code
- Characters
- Items and inventory
- World map
- Dialogues
- Scripts and events
- Moving characters: patrols and walks
- Exits
- Chapters and objectives
- State and saves: persistent or temporary, renaming an id, migrations
- Staging: wide rooms and animations
- The stage: lights, particles, floors
- Skin and fonts
- Title and credits
- Heroes: several characters and hero choice
- Built-in minigames
- A custom minigame
- Translations
- Music in stems
- Sound effects
- Voices: per language and per hero
- Images: prompts, cutting sheets, transparency, scale
- Asset provenance
- The storyboard, source of truth
- Puzzle design
- Classic mechanics
- Review pages
- DSL reference
- Checking your game
- What the solver proves
- Solver options
- Playtests
- Remix
- Speedrun for authors
- The sealed ending
- Production template
- Example games
- Working with an AI
- Build and release a game
- Publish on GitHub Pages
- The static game on Clever Cloud
- Other static hosts
- Sub-path, cache and service worker, incomplete deploys, going back
- Testing on a phone over the LAN
Local Studio (24)
- The local Studio: overview and launch
- Edit a room
- Placement and stage
- Preview, apply, undo
- Storyboard
- Assets and cutting
- Check: validator, solver, critical path, heat, health, coverage
- Before and after captures
- Semantic diff
- Play and replay a session
- Rule explainer
- Language and objectives
- Voices and the heroes × languages matrix
- Map
- Notes
- Remix in the Studio
- Music
- The Assistant: bring your own key
- Demo mode and studio-apply
- Local and LAN security
- Studio API
- Local MCP: setting up each client
- MCP tools
- Studio troubleshooting
Team Studio (21)
- What runs where
- Concepts: revision, transaction, span, lease, preview, build
- Starting as an invited dev
- Working together day to day
- Roles and actions: the full matrix
- Invitations
- Managing members
- Write refused on the hosted Studio: stale base revision (409)
- Write refused on the hosted Studio: span locked (423)
- Recovering after a lost lease, a disconnection or a stale preview
- Comments
- Map and semantic diff
- Publishing builds
- Remote MCP
- The game in Git
- Upgrading the engine of a hosted game
- Hosted assets
- The server's command line
- Health and metrics routes
- Trying it locally with compose.yml
- Known limits
Clever Cloud (23)
- Clever Cloud: overview, cost and prerequisites
- Apps and add-ons
- Domains and TLS
- Keycloak
- Generic OIDC and GitLab
- Configuration
- First deployment
- Backups
- RPO and RTO
- Restore the Studio on a fresh installation
- Redeploys
- Upgrading the server and checking state after a migration
- Limits of going back
- Monitoring
- Security
- Rotating keys
- Recovering admin access
- Changing domain or OIDC provider
- Worker, PostgreSQL or Cellar down
- Exporting the game and leaving the installation
- Retention
- Clever Cloud troubleshooting
- Costs and teardown
Reality Bridge and connectors (16)
- The Reality Bridge: what it is
- Quick start
- Guarantees
- Install and run the Bridge
- Backup and restore
- Several tenants
- Signals and the manifest
- The Bridge's command line
- Connectors overview
- Email connector
- Telnet connector
- SSH connector
- Open Badges connector
- The connector SDK
- Security: Biscuit and signatures
- Bridge and connector troubleshooting
Contribute (25)
- Welcome
- Developer setup
- The dev loop
- Before a pull request
- Conventions
- Writing documentation
- Architecture
- Code tour
- Import boundaries
- Which tests run when
- Mutation testing
- The coverage ratchet
- The quality baseline
- CI explained
- Field passes
- Benchmarks
- Releasing
- npm packages
- Decisions and ADRs
- Governance
- Bot pull requests
- Contributing with AI agents
- Security policy
- Code of conduct
- Licences and credits