Repository navigation
FR Studio Mode Demo
English · Type : procédure · Public : auteur · Contexte : Studio de démo · Statut : prête · S'applique depuis : 4.2.5
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 :demo-limits
Le Studio tourne aussi sans aucun serveur, sur un hébergement statique : le Studio du jeu de démo est en ligne à
https://wanoo.github.io/quest-n-click/studio.html, construit par la CI. Vos modifications restent dans votre
navigateur ; téléchargez-les en patch et npm run studio-apply les écrit dans votre copie du jeu.
Les modifications faites dans le Studio de démo en ligne (textes, layouts, entités ajoutées, storyboard, notes) écrites dans votre clone, par les mêmes opérations que celles du Studio local.
Le Studio de démo (un build statique) et le dépôt du moteur, où se lance npm run studio-apply. Vrai depuis la 4.2.5
(l'adresse ci-dessus).
- Pour appliquer un patch : le dépôt du moteur cloné et installé (Installer depuis le dépôt), avec le jeu sur lequel le patch a été fait.
La démo tourne dans votre navigateur. npm run studio-apply et le build de la démo se lancent dans le dépôt du moteur,
sur votre machine.
Même interface, même vue du moteur et même éditeur de placement que le Studio local ; les modifications restent dans le navigateur.
-
Build.
npm run build:studio-demo(c'est-à-direSTUDIO=1 VITE_STUDIO_DEMO=1 vite build) ; la CI pose les deux variables sur sonnpm run build. AvecSTUDIO=1, le build écrit d'abordpublic/studio-demo/snapshot.json(tools/studio/snapshot.ts, aussinpm run studio-snapshot; ignoré par git) :{ game, rooms: { <id>: { def, layout, texts, file } }, storyboard, notes, docs: { CONTENT_GUIDE }, assets }, tout ce que le Studio lit dans l'API. SansSTUDIO=1, nistudio.htmlni l'instantané n'atteignentdist/. Le code du Studio et des outils de dev va dansdist/assets/tools/, hors du précache du service worker. -
Backend.
src/studio/api.tsdéfinit l'interfaceApi; celle du serveur de dev est la valeur par défaut. Celle du navigateur (src/studio/api-browser.ts) sert quand le build le dit (VITE_STUDIO_DEMO=1) ou quandGET /__studio/api/gamerépond 404 (ou une page à la place du JSON). Elle charge l'instantané et rejoue les modifications gardées dans lelocalStoragesousweb-scumm.studio-demo.<jeu>: une liste de patchs{ kind: 'text', room, path, value }(remplacement,[+]ajout,nullsuppression, avec les mêmes décalages de chemin que le fichier du lieu),{ kind: 'layout', room, layout },{ kind: 'entity', room, entity }(Add prop / hotspot / actor),{ kind: 'storyboard', storyboard },{ kind: 'note', note },{ kind: 'note-edit', id, text, about?, edited },{ kind: 'note-delete', id }. Un layout ou un storyboard plus récent remplace le précédent ; modifier ou supprimer une note ajoutée en démo réécrit son patchnote. -
Vérifications. Validate et Solve tournent dans la page (
src/engine/tools/validate.ts,solve.ts) sur le vrai module du jeu avec les modifications appliquées : layouts, entités ajoutées, et chaque texte dont le chemin atteint une chaîne du lieu compilé (lignes de Regarder, noms, indices, sujets, répliques deon/talk/onEnter…). Export Markdown téléchargestoryboard.md. Pas d'événements : rien sur le disque à surveiller. -
Vue du moteur. Dans un build démo, les outils de dev se chargent aussi avec
?edit/?dev(et seulement alors : le jeu du joueur est le même). Ils appliquent les mêmes patchs au jeu et aux layouts au démarrage. Save layout dans l'éditeur envoie le layout au Studio qui l'entoure (postMessage, messagesavedaveclayout), qui le garde en patchlayout; l'éditeur ouvert seul écrit lui-même le patch dans lelocalStorage. Sur le serveur de dev, l'éditeur écritlayout/<lieu>.jsonpar l'API du Studio (PUT /__studio/api/room/<id>/layout, une opération gardée du journal) ; il ne se rabat sur le patch que quand cette API n'existe pas. -
Bandeau. « Demo: your edits stay in this browser », Download patch (
studio-patch-<jeu>.json:{ format: 'web-scumm-studio-patch', version, game, created, patches }) et Reset demo (abandonne toutes les modifications).
Limite ·
demo-limitsUn texte que le lieu construit par du code (une constante partagée, une fonction) n'est validé que dans la version serveur. Les captures d'écran demandent le serveur de dev : le panneau est caché. L'onglet Assets est en lecture seule, le tableau des voix, la carte du scénario et le diff sémantique sont absents, les modifications structurées (set_value) demandent le serveur de dev, et l'Assistant n'a niscreenshot, nirun_tests, niasset_prompts(L'Assistant).
S'applique depuis la 4.5.0
Depuis la 4.5.0, l'instantané porte aussi le wiki : le bundle d'un paquet quand le moteur est installé depuis l'un
d'eux, sinon les pages ready du dépôt (jamais un brouillon). L'Assistant de la démo les lit avec search_docs,
list_docs et read_doc par id ; read_doc par nom n'a toujours que CONTENT_GUIDE.
- Modifiez dans le Studio de démo. Le bandeau compte ce que vous avez changé.
-
Download patch : vous obtenez
studio-patch-<jeu>.json.
-
Appliquez-le à votre copie :
# dans le dépôt du moteur npm run studio-apply studio-patch-demo.jsonIl rejoue le patch à travers le cœur du Studio (
setText,setLayout,addEntity,setStoryboard,addNote,editNote,deleteNote, dans l'ordre) et imprime une ligne par patch (✔appliqué,=inchangé,✘échoué, avec la raison) et un résumé :<n> applied, <n> unchanged, <n> failed (<dossier du jeu>).GAME=<id>ouGAME_DIR=<dossier>choisissent le jeu, comme pour chaque outil ; un patch fait sur un autre jeu est appliqué avec un avertissement (⚠ the patch was made on "<jeu>", the current game is "<jeu>").
Garantie ·
apply-replays-demo· référencée · portée vérifiée par son auteur (IA), pas reluestudio-applyécrit les modifications de la démo dans une copie du jeu, qui se relit ensuite comme la démo la montrait.
Le résumé dit 0 failed, le code de sortie vaut 0, et git diff montre les modifications de la démo dans les fichiers
des lieux, les layouts, storyboard.json et notes.json. Ouvrez npm run studio pour les voir.
| Symptôme | Cause | Que faire |
|---|---|---|
usage: npm run studio-apply <patch.json> (sortie 2) |
Aucun fichier donné | Donner le fichier du patch |
not a Studio patch (expected { format: "web-scumm-studio-patch", patches: [...] }) |
Un autre fichier | Prendre le studio-patch-<jeu>.json téléchargé |
Une ligne ✘ … et un code de sortie 1 |
Ce patch a échoué (un lieu renommé, un texte déplacé) ; les autres sont appliqués | Refaire cette modification à la main dans le Studio |
⚠ the patch was made on "…" |
GAME désigne un autre jeu |
Poser GAME=<id> sur le jeu du patch |
Dans le navigateur : la clé web-scumm.studio-demo.<jeu> du localStorage. Dans votre copie : les fichiers des
lieux, layout/*.json, storyboard.json, notes.json du jeu, chaque patch une opération du journal.
Dans le navigateur, Reset demo abandonne toutes les modifications. Dans votre copie, les écritures sont des
fichiers ordinaires : git checkout -- games/<id>.
-
studio-server/src/ops/apply.ts,src/studio/demo-patch.ts,src/studio/api-browser.ts. - Jouer en ligne et essayer le Studio de démo.
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