Repository navigation
FR Studio Placement
English · Type : procédure · Public : auteur · Contexte : Studio local · Statut : prête · S'applique depuis : 4.2.1
Le Studio local · contrat : stable · vérifié par la CI (matrice de support de la 4.4.0, 2026-10-23) : Chromium de bout en bout (les vérifications du Studio) ; Windows : la suite unitaire seulement · vérifications automatiques : jobs
e2e,windows; plan de CIe2e,windows; 2 fichiers de tests · passes humaines :studio-hero-matrixpas faite (#238) · limites connues :stage-save-blocked
L'emplacement des choses dans un lieu (zones, pieds, hauteurs, points d'approche, zone marchable, échelle de profondeur, entrées) et la géométrie de sa scène (calques, masques, zones de marche et leurs liens) se placent à la souris, jamais à la main dans un fichier.
Un lieu dont layout/<lieu>.json porte toutes les places dont il a besoin, réglées en glissant dans la vue du moteur
lui-même, et une scène (calques, masques d'occlusion, zones de marche, liens entre elles) que le validateur accepte.
L'éditeur de placement tourne sur n'importe quel serveur de dev : dans l'onglet Rooms du Studio, ou seul à
?edit=<lieu> sur le jeu (npm run dev). L'éditeur de scène est celui de l'onglet Rooms. Vrai depuis la 4.2.1 (un
layout enregistré est une opération du journal du jeu) ; le réglage actorGap ci-dessous depuis la 4.2.4.
- Le Studio lancé (présentation), ou
npm run dev. - Chaque entité déclarée dans le fichier du lieu (Modifier une salle) ; l'éditeur propose une place à celles qui manquent au layout.
Dans le dépôt du moteur ou le projet créé, sur votre machine. L'éditeur lui-même est dans le navigateur.
La géométrie vit à part de la logique, dans games/<id>/layout/<lieu>.json, et ne se tape jamais à la main. Trois
façons :
-
Dans le Studio : l'onglet Rooms montre le lieu avec l'éditeur de placement par-dessus (c'est la page
/?edit=<lieu>&at=<checkpoint>dans une iframe). Ou dans le jeu seul : lancez le serveur de dev et ouvrez l'éditeur du lieu.# dans le dépôt du moteur ou le projet créé npm run dev # puis ouvrir http://localhost:5173/?edit=<lieu>
-
Sur un téléphone, sans serveur de dev : publiez une page de glisser-déposer, placez-y les choses, et rapatriez le résultat.
# dans le dépôt du moteur npm run page:placement npm run import-layout <fichier>
- Glissez, puis Save the layout (les gestes ci-dessous). Dans le Studio, un placement en cours est enregistré avant tout autre enregistrement du lieu.
Au démarrage, l'éditeur charge le premier checkpoint situé dans ce lieu ; s'il n'y en a pas, il part d'un état neuf, sans jouer de script d'arrivée. Toutes les coordonnées sont logiques (640 × 400).
| Geste | Effet |
|---|---|
| Glisser une zone | La déplace, avec son point d'approche |
| Glisser un coin | Redimensionne la zone |
| Glisser un point de pied (cercle) | Déplace un accessoire ou un personnage, avec son point d'approche |
| Glisser le carré au-dessus du pied, ou la molette | Règle la hauteur |
| Glisser un petit cercle (plein ou creux) | Place le point d'approche : là où le héros va avant d'agir |
| Glisser un sommet de la zone marchable ou d'un trou | Le déplace |
| Double-clic sur un bord de la zone marchable | Ajoute un sommet |
| Alt-clic sur un sommet | Le supprime ; sur un trou réduit à 3 sommets, supprime le trou |
| Glisser une ligne d'échelle orange | Change sa profondeur (y) ; le facteur se règle dans le panneau |
| Glisser un triangle rose | Déplace un point d'entrée |
Le panneau de l'éditeur :
-
Save the layout : écrit
games/<GAME>/layout/<lieu>.json, coordonnées arrondies à l'unité ; la page se recharge ensuite avec le fichier enregistré. - Reload (undo) : abandonne les changements non enregistrés.
- hidden zones : montre aussi les zones et accessoires dont la condition de visibilité est fausse (en pointillés).
- Selection : l'élément touché et ses valeurs.
- To place : un bouton par zone cliquable, accessoire ou acteur défini dans le lieu mais absent du layout ; il le crée au centre, prêt à être déplacé.
- Walkable zone : créer la zone, ajouter un trou.
- Depth scale : créer l'échelle, régler les facteurs du fond et de l'avant.
-
Entries : ajouter un point d'entrée par son nom (
defaultest celui utilisé par défaut). - Room width : la largeur logique d'un lieu large (640 = pas de défilement) et un curseur de caméra pour regarder autour en plaçant.
- Dossier Walk zones : fait du polygone de marche unique une zone, ajoute des zones (trous, zoom) et des liens entre elles (mode, durée, sens unique).
- Dossier Stage : profondeur, parallaxe, fusion et opacité de chaque calque ; occulteurs dessinés en polygones (profondeur, adoucissement, inversion) ; lumières et zones de particules placées. Poignées : glisser ; double-clic sur un bord de zone pour ajouter un sommet ; Alt-clic pour en retirer un.
Pour un accessoire dont la position dépend de l'état (states dans le layout, un tabouret tiré par exemple),
l'éditeur modifie la variante de l'état affiché.
Dans le Studio, l'éditeur tourne dans une iframe et parle à la page par postMessage (même origine seulement). Dans
une iframe, son panneau démarre replié. Il envoie des messages { source: 'web-scumm-editor', room, type } : ready
(avec missing, les entités sans place), select (key comme prop:lamp, hs:door, actor:grandma, plus kind
et id pour ces trois-là), dirty (changements non enregistrés) et saved (ok, error). Il accepte des messages
{ source: 'web-scumm-studio', type } : select (kind, id), create (donne une place à une entité que le lieu
déclare mais que le layout n'a pas, éventuellement à at) et save. Sur le serveur de dev, l'éditeur écrit le
layout par l'API du Studio (PUT /__studio/api/room/<id>/layout) ; dans la démo, il le garde en patch
(Mode démo).
Sous la fiche du lieu de l'onglet Rooms, l'éditeur de scène montre le fond avec les masques d'occlusion (rouges), les zones de marche (vertes) et les liens entre zones.
- Réglez la profondeur, la parallaxe, l'opacité et la fusion de chaque calque dans ses champs. Draw a mask ou
Draw a zone, cliquez ses coins sur le fond, puis Close the polygon (un polygone qui ne ferme aucune surface
n'est pas gardé). Link them relie deux zones par un escalier, une échelle, un saut, une téléportation ou une
marche, placé en deux clics. Save stage écrit cette géométrie (
layers,occluders,walkZones,walkLinks) sur le layout du lieu une fois la vue de placement enregistrée.
Limite ·
stage-save-blockedSave stage reste éteint tant qu'un masque ne ferme aucune surface ou qu'une zone n'a pas de lien : le validateur refuse les deux aussi (src/engine/tools/validate-stage.ts).
Champs lus par le moteur : sur un accessoire (et dans chacun de ses states) rot (degrés, sens horaire, pivot aux
pieds), flip (miroir horizontal), flipV (miroir vertical : l'image passe sous la ligne des pieds, comme sur la page
de placement), z (calque forcé) ; un champ absent d'un état reprend celui de l'accessoire. Sur un acteur, z force
son calque (sinon, il suit ses pieds). Sur le lieu, floor (395 par défaut) est le bas du sol : un point d'approche
calculé ne descend jamais plus bas.
Un acteur sans point approach dans le layout est abordé du côté qui fait face au milieu du lieu, à 44 unités quelle
que soit la taille des personnages. Le format complet du layout : Géométrie.
S'applique depuis la 4.2.4
Des personnages grands qui gesticulent en parlant peuvent finir une main dans la tête de l'autre. Posez actorGap sur
le jeu (par exemple 0.8) : la distance devient cette part de la taille moyenne des deux personnages (height du
héros et du personnage, ou h de l'acteur dans le layout), multipliée par l'échelle de profondeur là où se tient le
personnage. Un point approach dans le layout l'emporte toujours, pour un personnage qu'il faut aborder de l'autre
côté.
Après Save the layout, la page se recharge avec le fichier enregistré et l'élément reste où vous l'avez laissé.
npm run validate (ou l'onglet Check) ne signale aucune erreur de géométrie, et le solveur atteint toujours la fin.
| Symptôme | Cause | Que faire |
|---|---|---|
| Une entité manque dans la vue | Elle est déclarée dans le lieu mais n'a pas de place dans le layout | To place, puis la glisser |
| Save stage est grisé | Un masque ne ferme aucune surface, ou une zone n'a pas de lien | Fermer le polygone, ou relier la zone |
| Quelque chose de visible est inaccessible | Son point d'approche est hors de la zone marchable | Quelque chose est visible mais inaccessible |
games/<id>/layout/<lieu>.json seulement (dans un projet créé, game/layout/<lieu>.json).
Avant d'enregistrer : Reload (undo). Après : Undo du Studio (un pas par enregistrement), ou
git checkout -- games/<id>/layout/<lieu>.json.
- Géométrie : placement, zones de marche, masques, calques, caméra, Paramètres d'URL de dev.
-
src/studio/rooms-stage.ts,src/studio/rooms-bridge.ts.
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