Repository navigation
EN Contribute Developer Setup
Français · Type: tutorial · Audience: contributor · Context: engine repository · Status: ready · Applies from: 4.4.0
From an empty folder to an engine repository whose checks run on your machine. About fifteen minutes, most of it downloads.
A clone of wanoo/quest-n-click with its dependencies, the Python image modules, a Playwright Chromium, and a report
from npm run doctor with no required item missing. At the end the sample game runs in your browser and the unit suite
passes.
This page is for working on the engine. To make a game with a released engine, create a project instead (Your first game); to install from the repository without contributing, see Install from the repository.
- Git.
-
Node.js 22.12 or newer (
package.jsonengines:>=22.12). The repository's.nvmrcsays22, sonvm usetakes the newest 22 you have installed: make sure it is at least 22.12. The Studio, the tools that write a game and the Reality Bridge on SQLite need 22.13 or newer (node:sqlite). -
Python 3 with the modules of
requirements.txt(Pillow 13.0.0, NumPy 2.4.6, SciPy 1.18.1): the asset tests andnpm run assetsuse them. CI uses Python 3.12. -
ffmpeg (optional): audio authoring, and
validate --release, which measures the music stems withffprobe. - About 2 GB of disk for
node_modulesand the browsers.
The exact versions per system are in Requirements.
Every command below runs in a terminal, in the engine repository once it is cloned.
-
Clone the repository and enter it.
# in the folder that will hold the clone git clone https://github.com/wanoo/quest-n-click.git cd quest-n-click
You see the repository's folders:
src/,games/,tools/,tests/,wiki/…
-
Select Node. With nvm:
# in the engine repository nvm use node --versionnode --versionprintsv22.12.0or newer. Without nvm, install a Node 22 LTS from nodejs.org.
-
Install the dependencies exactly as the lockfile says.
# in the engine repository npm ciIt ends without error and creates
node_modules/. Usenpm ci, notnpm install: the lockfile is part of what CI checks.
-
Install the Python image modules.
# in the engine repository python3 -m pip install -r requirements.txtA virtual environment works too; the tools call
python3, so activate it before running them.
-
Install a browser for the end-to-end tests.
# in the engine repository npx playwright install chromiumChromium is required (the e2e and the Studio's checks use it). WebKit and Firefox are optional:
npx playwright install webkit firefoxadds them, for the rows CI runs in those browsers.
-
Ask the doctor.
# in the engine repository npm run doctorEach line is
✔(present),○(optional and missing) or✖(required and missing), with the command that fixes it, for instanceRun: python3 -m pip install -r requirements.txtorRun: npx playwright install chromium. It checks Node (major version 22 or more), Python 3, the image modules, ffmpeg, the three Playwright browsers, and Ed25519 and Biscuit for the Reality Bridge. Only a required item fails the report: Python, ffmpeg, WebKit and Firefox are optional for daily work.npm run doctor -- --releasemakes Python, its modules and ffmpeg required, asnpm run release-checkneeds them. The doctor never installs anything.
-
Run the unit suite and the sample game.
# in the engine repository npm test npm run dev
npm testruns the unit suite (test:node: every test file but the heavy solver tests and the two asset tests).npm run devserves the sample game, "The Pantry Key", athttp://localhost:5173/: open it in a phone-sized window.
-
Pick another game when you need one. The current game is, in this order: the
GAMEenvironment variable, the game the link.cache/gamepoints to,package.json"config": { "game" }, thendemo.# in the engine repository GAME=reference npm run dev # this command only GAME=heroes npm run game # moves the .cache/game link: later commands use heroes GAME=demo npm run game # back to the sample game
The bundled games are
demo,reference("The Night Market"),heroes,signalsand_template(the modelnpm run new-gamecopies).npm run dev,npm run checkandnpm run buildrunnpm run gamefirst, so the link followsGAMEwhen it is set.
Limit ·
windows-posixOn Windows the unit suite runs without the few test files that assume POSIX (file modes,/in paths, the shell's tools, the connectors' Telnet and SSH tests, the Studio Server's processing worker): CI'swindowsjob names them. See Requirements.
- The repository's tools are npm scripts; npm scripts lists them all.
-
npm run doctorsays what is missing and how to fix it:doctor. - The current game is chosen by
GAME, a link, thenpackage.json.
- The dev loop: change, check, look.
- Architecture and the Code tour.
- Before a pull request.
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