Repository navigation
FR Creer Commandes Du Jeu
English · Type : référence · Public : auteur · Contexte : dépôt du moteur, projet créé · Statut : prête · S'applique depuis : 4.3.0
Les commandes que lance une règle, un sujet de conversation, un script ou un écouteur, rangées par ce qu'elles font. Chaque commande est une donnée : une simple chaîne, ou un objet dont la clé nomme la commande. La référence du DSL, générée, donne la forme exacte de chaque commande, champ par champ ; cette page dit ce que fait chacune et quand s'en servir.
Une liste de commandes (do, then, onEnter…) s'exécute dans l'ordre, chaque commande attendant la fin de la
précédente. Une commande écrite en simple texte fait parler le héros : 'Voilà. Un marchepied.'. Le catalogue des
commandes est src/engine/core/cmds.ts (CMD_KEYS) : il dit quelles commandes
changent l'état du jeu (ce qui compte pour le solveur et les sauvegardes) et lesquelles ne font que montrer quelque
chose. Une clé qu'il ne connaît pas est refusée par le validateur.
| Commande | Effet |
|---|---|
'texte' |
Le héros dit la réplique. |
{ say: ['grandma', 'texte'] } |
Un personnage parle. 'hero' désigne toujours le héros, quel que soit son id. Un personnage offscreen (narrateur, radio) parle dans un cadre en haut de l'écran. |
{ say: ['grandma', 'ATTENTION !'], shout: true } |
Un cri : texte plus gros, et il tremble. |
{ say: [...], id: 'house.l-careful' } |
Une réplique à id stable : sa traduction et son clip de voix suivent l'id (traductions). |
{ say: [...], voice: 'grandma_01' } |
Joue ce clip de audio.voices ; la réplique reste tant qu'il joue (voix). |
Une réplique reste à l'écran le temps de la lire, ou jusqu'à un tap. validate prévient au-delà de 140 caractères ;
sous 90, elle se lit confortablement sur un téléphone (dialogues).
| Commande | Effet |
|---|---|
{ walk: 'shelf' } |
Le héros marche jusqu'au point d'approche de l'étagère (posé dans le layout). |
{ walk: [300, 350], who: 'grandpa' } |
Papi marche jusqu'à ce point (tout acteur de la salle ; sans pose walk, il glisse dans sa pose du moment). L'endroit où il s'arrête est gardé dans la sauvegarde. |
{ face: 'left' }, { face: 'grandma' }, { face: 'hero', who: 'grandma' }
|
Se tourner vers la gauche, ou vers quelqu'un ou quelque chose (le héros compris). En cinématique, personne n'est la cible d'une action, donc personne ne se tourne tout seul : c'est ainsi que deux personnages se regardent. |
{ pose: ['cat', 'sleep'] } |
Une pose durable (jusqu'à la suivante). Les poses d'un personnage : voir sa planche sprites. |
{ anim: ['hero', 'use'], ms: 600 } |
Tenir la pose le temps donné, puis revenir à la normale. Marche pour tout acteur de la salle, même en pose: 'front' : { anim: ['grandpa', 'surprise'], ms: 900 } joue la pose surprise de sa planche, puis il revient à front. at: { 2: [{ sfx: 'thud' }] } lance des commandes quand la pose atteint cette image. |
{ place: ['grandpa', [420, 360]], face: 'left' } |
Téléporter un personnage. |
{ launch: { target: 'vase', to: [420, 310], height: 60, rotate: 360, ms: 900 } } |
Physique de scène (3.4) : un vol balistique d'un accessoire ou d'un personnage, depuis où il est (ou from) jusqu'à to, un point ou une chose. Calculé, jamais simulé : le même vol sur chaque appareil. Un personnage reste où il atterrit ; un accessoire jusqu'à la prochaine entrée dans la salle : faites suivre ce que ça signifie ({ hide: 'vase' }, { prop: ['vase', 'broken'] }). |
{ spring: { target: 'lamp', axis: 'rot', amplitude: 12, frequency: 3, damping: 0.25 } } |
Un balancement ou une secousse amortie autour de sa place (axis x, y ou rot). |
{ path: { target: 'bat', points: [[80, 120], [300, 60], [560, 140]], orient: true } } |
Le long d'une courbe douce passant par les points, orienté selon elle. |
{ follow: { target: 'parrot', leader: 'hero', offset: [10, -70], ms: 3000 } } |
Garde l'un à distance fixe de l'autre pendant un temps. |
{ wait: 500 } |
Pause, en millisecondes. Dans un script, le joueur continue de jouer pendant ce temps. |
{ parallel: [[…], […]] } |
Jouer plusieurs listes en même temps (par exemple deux personnages qui marchent). |
{ camera: … }, { play: [prop, anim] }, { stopAnim: prop }
|
La caméra d'une salle large et les animations d'accessoires : géométrie, mise en scène. |
Avec les animations réduites, chaque mouvement saute à sa fin. Les mouvements (launch, spring, path, follow)
ne sont que de la présentation : le solveur ne les voit pas. Faire marcher un personnage tout seul, une patrouille :
faire bouger les personnages.
| Commande | Effet |
|---|---|
{ prop: ['lamp', 'on'] } |
Changer l'état d'un accessoire. 'salle.accessoire' vise une autre salle. |
{ show: 'ghost', fade: 1200 }, { hide: 'ghost', fade: 1500 }
|
Faire apparaître ou disparaître un acteur ou un accessoire, avec un fondu facultatif. Gardé dans la sauvegarde. |
{ gain: 'rope' }, { lose: 'rope' }
|
Ajouter ou retirer un objet d'inventaire. gain sur un objet marqué used le réactive. |
{ used: 'rope' }, { used: ['rope', 'badge'] }
|
L'objet a servi : il reste dans le sac, grisé (objets). |
{ set: 'tied' }, { set: ['tries', 3] }, { unset: 'x' }, { inc: 'tries' }, { inc: 'tries', by: -1 }
|
Les drapeaux : cases à cocher, compteurs et valeurs, nommés comme vous voulez (drapeaux, variables et événements). |
{ unlock: 'market' } |
Débloquer un lieu sur la carte. Un lieu verrouillé n'apparaît pas (carte du monde). |
{ goto: 'market', at: 'gate' } |
Changer de salle ; at est un point d'entrée du layout, ou un point. |
{ map: true } |
Ouvrir la carte. |
{ moveActor: ['grandpa', 'house'], at: 'door' } |
Envoyer un personnage dans une autre salle (faire bouger les personnages). |
{ emit: 'bell_rang' } |
Déclencher un événement : ses écouteurs s'exécutent sur-le-champ (scripts et événements). |
{ startScript: 'id' }, { stopScript: 'id' }
|
Lancer un script depuis le début, ou l'arrêter (scripts). |
{ waitUntil: COND }, { waitEvent: 'gong' }
|
Dans un script : attendre qu'une condition tienne, ou un événement. |
{ switchPlayer: 'laverne' }, { transfer: ['tentacle', 'hoagie'] }
|
Plusieurs personnages jouables : prendre le contrôle d'un autre, passer un objet à un autre (héros). |
{ custom: 'sparkle', args: { ms: 1200 } } |
Une commande que le jeu définit en code (code sur mesure). |
| Commande | Effet |
|---|---|
{ sfx: 'coin' } |
Bruitage. caption: '[Une porte claque à l’étage]' écrit ce qu'il signifie pour qui ne l'entend pas (bruitages). |
{ music: 'market' } |
Changer de musique (fondu enchaîné). |
{ music: { push: 'minigame' } } puis { music: { pop: true } }
|
Une musique temporaire, puis retour au morceau précédent. |
{ music: { once: 'jingle' } } |
Jouer un morceau une fois par-dessus, puis la musique reprend. |
{ music: { stinger: 'success' } } |
Un court motif (un morceau de audio.music ou un son de audio.sfx) sur le prochain temps de la partition en cours (3.5) ; tout de suite avec un mixage unique (musique). |
{ music: { stop: true } } |
Arrêter la musique. |
{ toast: 'Nouveau lieu : le marché' } |
Un petit message en haut de l'écran (id lui donne un id stable pour sa traduction). |
{ shake: 400 } |
L'écran tremble, pendant ce nombre de millisecondes. |
| Commande | Effet |
|---|---|
{ if: COND, then: […], else: […] } |
Embranchement selon une condition. |
{ once: […], id } |
Une seule fois dans toute la partie. |
{ nth: [[…1re fois], […2e fois], […ensuite]], id } |
Selon le nombre de fois ; la dernière branche se répète. |
{ cycle: [[…], […]], id } |
En boucle : 1, 2, 1, 2… (par exemple un tourne-disque qui alterne deux morceaux). |
{ random: [[…], […]], id } |
Au hasard, jamais deux fois la même de suite. |
En schéma 3, chacun de once, nth, cycle et random demande un id stable : son compte est gardé dans la
sauvegarde sous cet id (key est l'ancien nom, de la v2). Retenir quelque chose pour plus tard, c'est un drapeau
(set) ; signaler un moment, c'est un événement (emit) : lequel choisir.
| Commande | Effet |
|---|---|
{ cutscene: […] } |
Cinématique : bandes noires, un bouton « Passer ». Passer joue le reste instantanément : les effets (objets, drapeaux, états) s'appliquent quand même. |
{ choice: [{ id, text, do, if?, once?, img? }, …] } |
Le joueur choisit une réplique ; le héros la dit, puis do se joue. img montre l'option comme une carte avec cette image (dialogues). |
{ talk: 'grandma' } |
Ouvrir le menu de conversation d'un acteur depuis un script. |
{ minigame: 'pipes', params: { tiles: …, cols: 4 }, then: […] } |
Lancer un mini-jeu. Un mini-jeu ne se perd jamais : then se joue toujours, même si l'on passe. Toutes ses images viennent de params (mini-jeux). |
{ phone: 'grandma', do: […] } |
Appel entrant : sonnerie (skin.sounds.phone), un bouton Décrocher, puis les répliques de do. Pendant l'appel, l'appelant apparaît dans un cadre de téléphone (en bas à gauche), la bouche animée quand il parle ; ses répliques s'affichent en haut. |
{ phone: ['lou', 'seller'], do: […] } |
Un appel à plusieurs : tous côte à côte dans le même cadre (le premier devant), chacun à sa taille (height). Chaque { say: ['lou', …] } anime la bonne bouche. Pose montrée : la première de skin.callPoses qui existe (par défaut phone, front, face, idle) ; bouches tirées de mouths.phone (sinon la pose phone_talk alterne, sinon un petit rebond). Les ids sont des personnages de characters (aucun acteur nécessaire dans la salle). |
{ guide: { verb: 'look', target: 'shelf', say: 'Choisis Regarder, puis touche l’étagère.' } } |
Tutoriel : le héros donne la consigne, le verbe clignote, la cible brille. On attend que le joueur fasse exactement cette action ; toute autre action répète la consigne. |
{ hint: true } |
Donner l'indice courant (comme parler à l'objet d'indices). |
{ ending: true, after?: […] } |
La fin scellée (GameDef.ending) : ticket à gratter, confettis, puis after, puis la carte finale. { reveal: true } est l'ancien nom, toujours accepté (la fin scellée). |
{ end: true } |
Fin de partie. |
Limite ·
custom-for-the-restCe qu'aucune de ces commandes ne fait demande une commande sur mesure, écrite en TypeScript avec ses effets déclarés (code sur mesure). Aucune commande ne lance du code arbitraire depuis le contenu.
- La forme exacte de chaque commande : la référence du DSL. Les types :
Cmddanssrc/engine/core/types/content.ts. - Réactions, conditions, scripts et événements.
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