Repository navigation
FR Creer Sorties
English · Type : référence · Public : auteur · Contexte : dépôt du moteur, projet créé · Statut : prête · S'applique depuis : 4.2.4
Comment un lieu mène à un autre. On peut écrire une sortie à la main, comme un hotspot plus une règle qui lance
goto ; la déclarer dans les exits du lieu est plus court, et donne aux outils la carte du monde. Cette page est la
référence de exits.
L’ancien chapitre « Sorties, chapitres, sauvegardes » du guide du contenu tient désormais en trois pages :
- les sorties d’un lieu : cette page ;
- les chapitres, invariants et objectifs : Chapitres et objectifs ;
- les emplacements de sauvegarde, les migrations et ce qu’une sauvegarde garde : État et sauvegardes.
Dans un fichier de lieu (game/rooms/<lieu>.ts dans un projet créé, games/<id>/rooms/<lieu>.ts dans le dépôt du
moteur) :
exits: {
fenetre: { name: 'fenêtre du jardin', to: 'jardin', entry: 'maison', if: { unlocked: 'jardin' },
locked: 'Pas encore. D’abord, la clé.', sfx: 'porte', verbs: ['use', 'open', 'push'] },
trappe: { name: 'trappe', to: 'cave', oneWay: true },
},Ce qu’en fait le moteur quand il compile le jeu (normalizeExits dans
src/engine/core/define.ts) :
-
Un hotspot du même id, de kind
exit(plus les kinds ajoutés danskind), visible quandvisibletient. On le place dans le layout comme toute zone, et sa ligne de regard va dans lelookdu lieu, comme pour tout hotspot. -
Des règles ajoutées à la fin du
ondu lieu : « VERBE sortie →goto» quandiftient (précédé dusfxs’il y en a un), puis une seconde règle qui dit la lignelocked. Leurs ids sontexit.<lieu>.<sortie>.goetexit.<lieu>.<sortie>.locked. - Vos propres règles passent avant. Une règle écrite sur la sortie est évaluée avant les règles générées : une réaction spéciale (un objet utilisé sur la porte) gagne toujours.
Quand if ne tient pas et qu’il n’y a pas de ligne locked, c’est la réponse par défaut du verbe qui s’affiche, comme
pour tout hotspot sans règle qui corresponde.
À partir des sorties, des commandes goto et de la carte, le validateur sait quels lieux ne sont atteints par rien
et quelles sorties n’ont pas de retour ; l’onglet Check du Studio et, dans le dépôt du moteur, npm run page:world dessinent
cette carte (voir Pages de relecture). Ce que fait un simple tap sur une sortie, c’est onTap, plus bas.
exits est un dictionnaire dans un lieu : la clé est l’id de la sortie (c’est aussi l’id de son hotspot), la valeur
un objet avec les champs ci-dessous. Le type est ExitDef, dans
src/engine/core/types/content.ts.
| Champ | Type | Sens |
|---|---|---|
name |
texte, obligatoire | Le nom affiché au survol et dans la ligne d’action. Se traduit comme tout texte. |
to |
id de lieu, obligatoire | Le lieu où mène la sortie. |
entry |
id de point d’entrée, ou [x, y]
|
Où apparaît le héros : un point d’entrée du layout du lieu cible (entries), ou un point. Sans lui, voir plus bas. |
if |
condition | La sortie ne se prend que tant qu’elle tient. |
locked |
texte | Ce que dit le héros quand il essaie la sortie alors que if ne tient pas. |
verbs |
ids de verbes | Les verbes qui prennent la sortie. |
sfx |
id de son | Joué au départ (un id de audio.sfx). |
visible |
condition | Le hotspot n’apparaît que tant qu’elle tient. |
kind |
texte[] | Des kinds en plus pour le hotspot, après exit. |
oneWay |
booléen | On ne revient pas par là, et c’est voulu : les outils cessent de signaler l’absence de retour. |
defaultVerb |
id de verbe | Le verbe d’un double tap sur elle, quand le verbe logique ne convient pas (voir Réactions). |
onTap |
'go' ou 'walk'
|
Ce que fait un simple tap sans verbe choisi : go y marche et la franchit à l’arrivée, walk y marche seulement. |
-
verbs: par défaut, ceux deuse,open,walk,go,enter,push,pullque votre jeu possède. Un jeu qui n’en a aucun prend tous ses verbes sauflook,talk,giveettake. -
onTap: par défautgoquand le jeu poseinput: { exitOnTap: true }dansgame.ts, sinonwalk. Un verbe choisi gagne toujours ; un tap ailleurs pendant la marche redirige toujours le héros ; un double tap a toujours franchi la sortie.onTapetexitOnTapne touchent qu’à la saisie : les règles, le solveur et les sauvegardes ne les voient pas. -
entry: sans lui, le héros revient là où il se tenait la dernière fois dans le lieu cible ; dans un lieu jamais visité, au point d’entréedefaultde son layout (ou en 320, 360 si le layout n’en a pas).
Le validateur (npx quest-n-click validate dans le projet créé, GAME=<id> npm run validate dans le dépôt du
moteur) signale :
- une erreur pour un lieu
toinconnu (unknown room: "<id>"), uneentryqui n’est pas un point d’entrée du layout du lieu cible, un verbe inconnu dansverbs, unsfxinconnu, unonTapautre quegoouwalk, et une sortie dont l’id est aussi un hotspot que vous avez écrit ("<id>" is both an exit and a hotspot) ; - un avertissement pour une sortie qui mène à son propre lieu, pour un lieu qu’aucune sortie, aucun
gotoni aucune place de la carte n’atteint depuis le départ, et pour une sortie sans retour (no way back from <to> to <from> (add oneWay: true if intended)).
// game/rooms/house.ts (projet créé)
exits: { door: { name: 'door', to: 'garden' } },Le hotspot door a quand même besoin de sa zone dans game/layout/house.json, placée dans l’éditeur du Studio ; le layout
du lieu cible devrait donner un point d’entrée default.
Le moteur et le validateur ne le lisent pas. TypeScript le signale, comme pour tout objet littéral écrit dans un
defineRoom typé.
Les sorties déclarées existent depuis la 1.4.0 « Scale ». onTap et input.exitOnTap sont arrivés en 4.2.4 ;
defaultVerb en 4.0.0.
Limite ·
exits-input-onlyonTapetinput.exitOnTapchangent la lecture d’un tap, pas ce que le jeu permet : ils n’ouvrent jamais une sortie dont leifne tient pas, et le solveur ne les voit pas.
-
goto(la commande que lance une sortie),entries(les points d’entrée du layout) : Commandes du jeu, Géométrie. -
input.exitOnTap,defaultVerb, le double tap : Réactions. - La carte des places et
unlocked: Carte du monde. - Les lieux que rien n’atteint, vus dans le Studio : Check.
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)
Démarrer (6)
Jouer (9)
Installer (17)
- Prérequis
- Installer depuis l'archive de la release
- Installer depuis npm, une fois publié
- Installer depuis le dépôt pour travailler sur le moteur
- doctor : vérifier sa machine
- Outils pour les images
- Outils audio : ffmpeg, fluidsynth, Furnace, uv
- Mettre à jour
- Notes de mise à jour : 4.4
- Notes de mise à jour : 4.3
- Notes de mise à jour : 4.2
- Notes de mise à jour : 4.1
- Notes de mise à jour : v3
- Notes de mise à jour : v2 vers v3
- Venir de web-scumm
- Référence du paquet
- Dépannage de l'installation
Créer un jeu (55)
- Votre premier jeu
- Organisation d'un projet créé et du dépôt du moteur
- La boucle de travail
- Principes du contenu et contrat d'identité
- Salles
- Géométrie : placement, zones de marche, masques, calques, caméra
- Un objet est visible mais inaccessible
- Réactions
- Commandes du jeu
- Conditions
- Drapeaux, variables et événements : lequel choisir
- Code sur mesure
- Personnages
- Objets et inventaire
- Carte du monde
- Dialogues
- Scripts et événements
- Faire bouger les personnages : patrouilles et marches
- Sorties
- Chapitres et objectifs
- État et sauvegardes : persistant ou temporaire, renommer un id, migrations
- Mise en scène : salles larges et animations
- La scène : lumières, particules, sols
- Habillage et polices
- Titre et générique
- Héros : plusieurs personnages et choix du héros
- Mini-jeux intégrés
- Un mini-jeu sur mesure
- Traductions
- Musique en stems
- Bruitages
- Voix : par langue et par héros
- Images : prompts, découpe des planches, transparence, échelle
- Provenance des assets
- Le storyboard, source de vérité
- Concevoir des énigmes
- Mécaniques classiques
- Pages de relecture
- Référence du DSL
- Vérifier son jeu
- Ce que prouve le solveur
- Options du solveur
- Playtests
- Remix
- Speedrun pour les auteurs
- La fin scellée
- Modèle de production
- Jeux d'exemple
- Travailler avec une IA
- Construire et publier un jeu
- Publier sur GitHub Pages
- Le jeu statique sur Clever Cloud
- Autres hébergeurs statiques
- Sous-chemin, cache et service worker, déploiement incomplet, retour arrière
- Tester sur un téléphone en réseau local
Studio local (24)
- Le Studio local : présentation et lancement
- Modifier une salle
- Placement et scène
- Aperçu, application, annulation
- Storyboard
- Assets et découpe
- Vérifier : validateur, solveur, chemin critique, chaleur, santé, couverture
- Captures avant et après
- Diff sémantique
- Jouer et rejouer une session
- Explication des règles
- Langue et objectifs
- Voix et matrice héros × langues
- Carte
- Notes
- Remix dans le Studio
- Musique
- L'Assistant : votre propre clé
- Mode démo et studio-apply
- Sécurité en local et en réseau local
- API du Studio
- MCP local : configurer chaque client
- Outils MCP
- Dépannage du Studio
Studio d'équipe (21)
- Ce qui tourne où
- Concepts : révision, transaction, pan, bail, aperçu, build
- Débuter comme dev invité
- Travailler ensemble au quotidien
- Rôles et actions : la matrice complète
- Invitations
- Gérer les membres
- Écriture refusée sur le Studio hébergé : révision de base périmée (409)
- Écriture refusée sur le Studio hébergé : pan verrouillé (423)
- Reprendre après un bail perdu, une déconnexion ou un aperçu périmé
- Commentaires
- Carte et diff sémantique
- Publier des builds
- MCP distant
- Le jeu dans Git
- Mettre à jour le moteur d'un jeu hébergé
- Assets hébergés
- La ligne de commande du serveur
- Routes de santé et de métriques
- L'essayer en local avec compose.yml
- Limites connues
Clever Cloud (23)
- Clever Cloud : vue d'ensemble, coût et prérequis
- Applications et add-ons
- Domaines et TLS
- Keycloak
- OIDC générique et GitLab
- Configuration
- Premier déploiement
- Sauvegardes
- RPO et RTO
- Exercice de restauration sur une installation vierge
- Redéploiements
- Mettre à jour le serveur et vérifier l'état après une migration
- Limites du retour arrière
- Supervision
- Sécurité
- Renouveler les clés
- Récupérer l'accès administrateur
- Changer de domaine ou de fournisseur OIDC
- Worker, PostgreSQL ou Cellar en panne
- Exporter le jeu et quitter l'installation
- Rétention
- Dépannage sur Clever Cloud
- Coûts et démontage
Reality Bridge et connecteurs (16)
- Le Reality Bridge : ce que c'est
- Démarrage rapide
- Garanties
- Installer et lancer le Bridge
- Sauvegarde et restauration
- Plusieurs tenants
- Signaux et manifeste
- La ligne de commande du Bridge
- Vue d'ensemble des connecteurs
- Connecteur email
- Connecteur Telnet
- Connecteur SSH
- Connecteur Open Badges
- Le SDK des connecteurs
- Sécurité : Biscuit et signatures
- Dépannage du Bridge et des connecteurs
Contribuer (25)
- Bienvenue
- Préparer son poste de développement
- La boucle de développement
- Avant une pull request
- Conventions
- Écrire la documentation
- Architecture
- Visite du code
- Frontières d'import
- Quels tests tournent quand
- Tests de mutation
- Le cliquet de couverture
- La référence de qualité
- La CI expliquée
- Passes de terrain
- Mesures de performance
- Publier une release
- Paquets npm
- Décisions et ADR
- Gouvernance
- Pull requests des bots
- Contribuer avec des agents IA
- Politique de sécurité
- Code de conduite
- Licences et crédits