Repository navigation
EN Play Accessibility
Français · Type: reference + explanation · Audience: player · Context: player's browser · Status: ready · Applies from: 4.3.0
The player (DOM painter) · contract: stable · verified by CI (support matrix of 4.4.0, 2026-10-23): Chromium on the desktop, mouse and keyboard; Chromium and WebKit at a phone's size, touch and keyboard (emulated); axe-core on every screen (not a WCAG claim) · automated checks: jobs
e2e; CI plane2e; 2 test files · people's passes:phone-both-renderersnot run (#83),code-wheel-humannot run (#78),blind-playtestersnot run (#76) · known limits:no-screen-reader-pass
What a quest'n'click game offers a player who uses the keyboard, a screen reader, larger text or less motion; what is checked by machines, what only people can check, and where those checks stand. True from 4.3.0 (verb keys and their announcement); the rest is older and says since when.
Every game made with the engine gets these, without its author writing anything:
- The whole game plays at the keyboard: Tab reaches the verbs (the arrows move inside the grid, and the chosen verb is announced as pressed), the scene's targets (one hidden button per visible hotspot, prop or character, in the scene's order), the bag and the tools. A conversation's choices and the map's places take the focus when they appear (arrows, Enter). Space or Enter advances a line of dialogue. Escape closes what is on top (a menu, the map, a transcript, a cutscene's or minigame's Skip), otherwise opens the pause menu, whose focus stays inside. The keys: Controls.
-
A live region announces the room you enter, each line of dialogue with who speaks, and each item you gain. The
"tap to continue" marker has a name for screen readers (
ui.advance, "Continue" by default). -
Verb keys (a game's choice, since 4.3.0): a verb with a letter is announced with that shortcut
(
aria-keyshortcuts), and the settings can turn the keys off, as WCAG 2.1.4 asks of single-letter shortcuts. - Images are decorative unless named: the scene is reached through its targets, an item through its name; an empty bag slot is left out of the accessibility tree.
-
Minigames play to their end at the keyboard, not only skip:
pickandhide(the options and hiding spots are named buttons, the arrows move, Enter picks),pipes(the arrows walk the grid, Enter turns a tile),runner(▲ / W jumps, ▼ / S ducks),stroke(◀ ▶ in turn at a calm rhythm; holding a key is "too fast"),scratch(the arrows move a coin over the silver layer, the revealed text is announced) andcables(Enter on a plug picks it up, Enter on a socket plugs it in). The minigame takes the focus on its first control; Skip is always reachable. The Remix code wheel turns with buttons, arrows or a gamepad, announces each turn, and can be printed.
- Text: a larger text size, and a slower text speed that keeps each line longer on screen, in the settings; a readable font when the game ships one. A line with a voice clip stays as long as the clip plays; a tap skips any line.
- Motion: "Reduce motion" removes shake, camera glides, parallax, particles and transitions; the system's own reduced-motion preference does the same and stops the interface's animations.
- Sound: every spoken line is also written. A sound that matters can be captioned on screen ("[A door slams upstairs]") when the author wrote a caption; the captions are on by default. Whether a puzzle needs to be heard is the author's choice. Music, sound and voice have separate volumes.
- Colour: the verbs, items and topics carry their names as text. There is no high-contrast mode or colour setting: a game's colours are its author's.
By machines, in CI, on every change that can affect the player:
-
npm run e2e -- --axeruns axe-core on the title, a room, the pause menu and the ending;npm run e2e:a11yon a conversation menu, the map, the save and load slots, the overwrite and restart confirmations, and every bundled minigame as it opens. Aseriousorcriticalviolation fails the run; the list of accepted rules is empty. -
npm run e2e:a11yalso wins each bundled minigame in a real browser with key presses only, reading the page as a player does. - The solver's winning path is replayed at the keyboard (
npm run e2e -- --generic --keyboard), in Chromium and, since 3.3.1, in WebKit.
What the engine can claim is therefore "tested at the keyboard, no serious or critical axe violation on the screens checked". It is not a WCAG conformance claim.
Limit ·
no-screen-reader-passNo person has played a quest'n'click game with a screen reader for a release yet. The checklist exists (docs/dev/SCREEN-READER.md: VoiceOver on iOS or TalkBack on Android, the title, a room, an action, an item, a conversation, the map, the pause menu, a minigame, the ending), and the support matrix lists a VoiceOver or NVDA pass under "checked by people (not yet done)". As of 4.4.0, the people's passes that read this surface,phone-both-renderers(#83),code-wheel-human(#78, the code wheel's text alternative by a screen-reader user) andblind-playtesters(#76), are not run.
A speedrun category declares the inputs it allows (mouse, touch, keyboard, gamepad, macros). An accessibility option is never an implicit cheat: the text speed, the text size, reduced motion and the readable font change nothing in the in-game time (a line costs the same logical time at every speed), and the keyboard's and the screen reader's targets are the same actions as a tap. A category that forbids an input says so; the inputs a run used are declared by the player's browser (its word, as the real-time clock is). See Speedrun for players and, for authors, Speedrun for authors.
A barrier is a bug. Open an issue on the project's tracker with the screen, your device, browser and assistive technology, and what you heard or could not reach. A session file (pause menu › Save › Export session) helps the author replay what you did.
- Stability and support: the player's statuses, its passes.
- The code:
src/engine/dom/a11y.ts(the focus trap, arrow navigation),src/engine/dom/input.ts(the keys),tests/dom/minigames-keyboard.test.ts(five minigames won with key events).
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