Repository navigation
EN Create Visible But Unreachable
Français · Type: troubleshooting · Audience: author · Context: engine repository, created project · Status: ready · Applies from: 4.3.0
You can see a thing in the room, but tapping it does nothing, picks something else, or the hero stops short of it.
This page goes from what you see to the cause, in the geometry (layout/<room>.json) or in the room's content.
One of these, in the game or in the Studio's play view:
- The tap walks to the floor. The sentence line says "Walk to" with no name (with a mouse, hovering shows no name either), and the hero walks to where you tapped, as on empty floor.
- The tap names something else. The sentence line shows another name (the cupboard instead of the key in it).
- The hero stops short. The thing is named, the hero walks, but stops away from it, or on the other side of a wall, then acts or speaks from there.
- The hero stops and says a line such as "The gate is shut." on the way: a closed walk link.
- The thing is beyond the edge: in a wide room, the camera never shows it, or the hero cannot walk that far.
It is not a target. A tap reaches only the room's hotspots, its props that have a name, its actors without
interactive: false, and other playable characters standing there, each only while it is visible
(what a tap touches). So:
- The thing is painted in the backdrop and no hotspot covers it. A painting is not clickable.
- It is a prop without a
name: decoration, by design. - It is a hotspot without a zone: no
rectnorpolyin the layout (validatesaysno zone in the layout (rect or poly)), or the room has no layout at all (no layout: nothing will be clickable). - Its
visiblecondition is false: a hidden hotspot or prop is not a target. A hotspot is drawn by nothing, so the backdrop still shows the thing while the hotspot is hidden. - It is an actor with
interactive: false(living scenery), or a moving character that is in another room now (moveActor): its actor shows only in the room it is in.
Something smaller wins the tap. When several targets contain the tap, the smallest box wins. A small hotspot drawn inside a prop's image, or a small prop on a large one, takes the tap there.
The approach point cannot be reached. Before acting, the hero walks to the thing's approach point (approach points):
- The approach point is outside the walk area or in a hole: the walk goes to the closest point inside it instead, and the action goes on from there (from afar, or from the wrong side of a counter).
- There is no approach point, and the computed one lands badly: for a prop, 12 units under its feet (never below
floor, 395 by default); for a hotspot, under the middle of its zone. A hotspot high on a wall gets a point in the air, then clamped onto the floor's edge. - A prop or an actor moved more than 150 units from its saved approach point (
NEAR): the old point is ignored and a new one computed.
A floor is closed or missing (rooms with walkZones):
- The thing stands in a zone behind a closed walk link (
stage.links.<id>.iffalse): the hero walks to the link's foot and says itslockedline. If the room's rule on that thing does not check the same condition, the action then runs from the wrong side. - No link joins its zone, or a one-way link points the wrong way (
validaterefuses a zone nothing leads to).
The room is wider than it is drawn:
- The thing, its zone or an entry is beyond the layout's
width(validatewarns… is beyond the room's width), or the room is wider than 640 but its layout has nowidth.
Limit ·
not-presentationA layer drawn in front of a thing (foreground) or an occluder never blocks a tap on it: they only change what you see. If the tap reaches the thing and the rule still does not answer, the cause is not here: see the neighbouring cases below.
- Open the room with the geometry drawn over it:
/?dev&at=<checkpoint>on the dev server (in the created project or the engine repository:npm run dev). The walk area is green, its holes red, hotspots blue, props purple, actors green, walk links yellow; an approach point is a dot, filled when the layout gives it, hollow when the engine computes it. A hidden hotspot or prop is not drawn. Press D to toggle the overlay.- No blue zone or purple box over the thing: causes 1 to 5.
- A smaller zone inside it: the smaller one wins.
- The approach dot outside the green area, in red, or far from the thing: causes 6 to 8.
- Tap the thing with no verb picked (or hover it with a mouse): the sentence line says "Walk to" and the name of the target the tap reached, or no name.
-
Run the checks:
# in the engine repository npm run validate npm run lint# in the created project npx quest-n-click validate npx quest-n-click lintLook for
no zone in the layout,no position in the layout,no layout,is beyond the room's width,walk zone "…" cannot be reached,no walk link (portal) joins walk zone, and the lint codewalk-link-gate.
- In
rooms/<room>.ts, read the thing's declaration: is it a hotspot or a prop with aname, what is itsvisible, is the actorinteractive: false? For a moving character, the DEV panel shows where it is.
-
Not a target: give the painted thing a hotspot (declare it in the room with a
name, then draw its zone in/?edit=<room>or the Studio's Rooms tab, and save); give a prop aname; fix itsvisiblecondition; dropinteractive: false.
-
Approach: in
/?edit=<room>, drag the thing's approach point inside the green area, out of the red holes, next to the thing. The point becomes a filled dot and is written tolayout/<room>.json. Widen the walk area if the thing should be reachable from where it stands.
-
Something smaller wins: shrink or move the inner zone, or make the inner thing a separate target with its own
rule; a polygon (
poly) fits a shape better than a rectangle.
-
Closed link: when it is the puzzle, add the link's condition to the rule's
ifon the thing behind it (whatwalk-link-gateasks). When the zone is simply not joined, add a walk link in the editor.
-
Width: set the layout's
widthto the backdrop's logical width, or move the thing inside it.
Never fix a position by typing coordinates in the layout file: the editor writes it, and a hand edit is lost at the next save (geometry).
- In
/?dev, the thing has its zone or box, and its approach dot sits inside the green area. - A tap names it on the sentence line; the hero walks next to it, turns to it, and the rule answers.
-
validateandlintprint none of the messages above.
-
The hero reaches it but the answer is a fallback ("I can't do that"): the tap and the walk work; no written rule
matched. Check the rule's verb,
a/band condition (reactions, conditions);npm run lintreports a rule that can never run (rule-never-run) or that an earlier rule hides (rule-shadowed). -
The room itself cannot be reached:
validatewarnsno exit, goto or map place leads to this room from the start(exits, world map). -
The item cannot be used any more: a greyed-out inventory item was marked
used(items). -
The hero walks in a straight line through furniture: the room has no
walkarea, or holes are missing (the walk area).
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