Repository navigation
FR Creer Playtests
English · Type : procédure · Public : auteur · Contexte : dépôt du moteur, projet créé · Statut : prête · S'applique depuis : 3.9.0
Le solveur vous dit que le jeu peut se finir. Il ne peut pas vous dire où une personne bloque. Un playtest, si : les
joueurs partagent leur session depuis le menu pause, vous déposez les fichiers dans le jeu, et playtests les rejoue
sur le contenu actuel et en fait la synthèse.
Un rapport sur la façon dont de vraies personnes ont joué : le temps de jeu par lieu, où elles ont bloqué, les indices qu'elles ont vus, les mini-jeux joués, où chacune s'est arrêtée, les taps qui ont raté une cible de peu, et une carte de chaleur sur le graphe de puzzles, avec les mêmes clés que celle du solveur. Les sessions restent dans le jeu et sont rejouées par chaque vérification suivante : vous savez aussi quand un changement de contenu empêche une ancienne session de se rejouer.
- Le dépôt du moteur (les fichiers vont dans
games/<id>/playtests/) ou un projet créé (game/playtests/). - Depuis la 3.9.0 : les playtests, les quotas de terrain (3.7.1) et les taps manqués de peu (3.8.0) sont tous là, et
un projet créé a la commande
quest-n-click playtests. L'onglet Check du Studio et l'outil MCPplaytestsmontrent le même rapport.
- Une version du jeu que les testeurs peuvent ouvrir sur leur téléphone : une URL déployée (Construire et publier un jeu) ou votre machine sur le réseau local (Tester sur un téléphone en réseau local).
- Des testeurs qui n'ont jamais vu le jeu.
- Sur le téléphone du testeur : le menu pause du jeu.
-
npm run playtests …: dans le dépôt du moteur, sur votre machine.npx quest-n-click playtests …: dans le projet créé, sur votre machine.
Chaque vérification attrape ce que les autres ratent. Lancez-les dans cet ordre :
| Étape | Commande (dépôt du moteur) | Attrape |
|---|---|---|
| Valider | npm run validate |
ids cassés, Regarder manquants, lignes trop longues, flags jamais posés |
| Résoudre | npm run solve |
impasses, fin inatteignable, objets jamais utilisés |
| Test de parcours |
npm test (tests/demo-walkthrough.test.ts pour la démo) |
une partie complète scriptée sur le vrai moteur |
| Captures | npm run e2e |
ce que le solveur ne voit pas : un personnage sur une table, une ligne coupée par le bord |
| Un vrai téléphone |
npm run dev:lan, en paysage |
taille des pouces, lisibilité, son, l'écran « tournez » |
| Fin scellée |
npm run seal, npm run build, npm run check:spoilers
|
le texte de fin jamais en clair |
| Une personne | les étapes ci-dessous | ce que plus personne dans l'équipe ne voit |
Dans un projet créé, npm run verify lance la validation, le solveur, l'état des traductions, le lint et les
playtests ; les autres lignes n'ont pas de commande quest-n-click, voir
Vérifier son jeu. L'onglet Check du Studio lance validate et solve au même endroit.
Puis donnez le téléphone à quelqu'un qui n'a jamais vu le jeu, et taisez-vous. Chaque fois qu'il hésite plus d'une minute, notez-le : c'est un Regarder qui manque, un indice vague, ou une sortie que personne n'a vue.
- Envoyez l'URL du jeu. Dites seulement : « joue comme tu veux ; quand tu t'arrêtes, fini ou pas, ouvre le menu pause et touche Partager la session ». N'expliquez aucune énigme, même si on vous le demande : notez la question.
-
Le testeur partage la session. Partager la session (la ligne du menu pause, nommée par
ui.shareSession; « Share session » dans un jeu non traduit) fabrique un fichier<jeu>-<date>-<heure>.session.jsonet l'envoie par la feuille de partage du téléphone (Web Share), ou le télécharge quand le navigateur ne sait pas partager. Le fichier contient les entrées depuis le début de la partie, en ids et indices seulement (pas de texte du journal, pas de nom), l'heure de chaque entrée, la famille d'appareil (ios,androidoudesktop, rien de plus fin) et les taps manqués de peu : un tap dans le vide à moins de 24 px d'une cible, par lieu et par cible. Le testeur l'envoie comme il veut.
Garantie ·
session-ids-only· référencée · portée vérifiée par son auteur (IA), pas relue Une session de playtest partagée porte un horodatage à chaque étape et un journal vide, et une réplique dite par le jeu pendant la partie n'est pas dans le fichier.
-
Déposez les fichiers dans le jeu et commitez-les :
- dépôt du moteur :
games/<id>/playtests/(npm run auditparcourt ce dossier avec le reste degames/) ; - projet créé :
game/playtests/.
Seuls les fichiers dont le nom finit par
.session.jsonsont lus. - dépôt du moteur :
-
Rejouez et lisez le rapport.
# dans le dépôt du moteur npm run playtests -- --out=.cache/playtests # dans un projet créé npx quest-n-click playtests --out=.cache/playtests
Il rejoue chaque fichier sur le contenu actuel et affiche, en Markdown : le temps de jeu par lieu (un écart de plus d'une minute entre deux entrées compte comme une pause), où les joueurs bloquent (la même action trois fois de suite sans effet), les indices montrés, les mini-jeux joués, où chaque joueur s'est arrêté, les taps manqués de peu, et les sessions que le contenu a dépassées.
--outécritreport.md,report.jsonetheat.svg(le graphe de puzzles, chauffé par les joueurs) ;--jsonaffiche le rapport sur stdout et rien d'autre ;--dir=<dossier>lit un autre dossier.
- Faites du rapport du travail. Un blocage, c'est une énigme à mieux indicer ; un tap manqué de peu, une zone cliquable à agrandir ; un abandon, un endroit à regarder. Dans l'onglet Check du Studio, la chaleur du graphe de puzzles peut venir des joueurs au lieu du solveur.
-
Gardez les sessions comme garde-fou. Les sessions restent dans le jeu. Une fois le contenu changé, elles peuvent ne plus se rejouer :
- sans
--strict(ce que lancentverify:game,npm run build, etverifyetbuildd'un projet créé), une session divergente est signalée, pas en erreur : un changement de contenu ne bloque jamais un push ; - avec
--strict(le garde-fou de release :verify:releaseetrelease-checkdans le dépôt du moteur,quest-n-click releasedans un projet créé, et le workflow hebdomadaireprove), une session divergente est une erreur, code 1 : réenregistrez-la ou supprimez-la.
--strictseul ne demande aucun nombre de sessions : zéro session le passe, et il le dit. - sans
-
Pour une version testée par des joueurs, demandez des quotas.
# dans le dépôt du moteur : verify:commercial, puis 5 sessions qui se rejouent, 3 jouées jusqu'au bout, 2 familles d'appareils npm run verify:field # dans les deux contextes, vos propres nombres npm run playtests -- --strict --require=5 --require-completed=3 --require-devices=2 npx quest-n-click playtests --strict --require=5 --require-completed=3 --require-devices=2
Une session divergente ne compte pour rien ; chaque famille d'appareil compte une fois. Un quota manqué est une erreur, et aucune session du tout aussi.
verify:fieldn'est pas une étape derelease-check(décision D12) : c'est ce dont a besoin une version testée par des joueurs. La passe de terrain du mainteneur est décrite dans Passes de terrain.
Le moteur enregistre chaque entrée depuis le début de la partie ou le chargement d'une sauvegarde (actions, carte,
changements de personnage, pas de script) avec les réponses données en route (réponses aux choix, tirages
aléatoires). En plus de Partager la session, le menu de sauvegarde du jeu, le panneau de dev et l'onglet Play du
Studio l'exportent en <jeu>-session.json. Le rapport de bug d'un testeur, c'est ce fichier et une capture d'écran.
# dans le dépôt du moteur
npm run replay -- session.json
npm run replay -- session.json --upTo=40 --jsonnpm run replay la rejoue sans affichage et imprime le journal, le journal sémantique (4.1.11) et l'état final. Il
sort avec 1 à la première entrée dont le résultat diffère de l'enregistrement, ou quand son journal sémantique diffère
de celui du fichier. --upTo=N s'arrête plus tôt ; --json est pour les scripts. Un projet créé n'a pas de commande
replay : jouez la session dans l'onglet Play du Studio
(Jouer et rejouer une session). La solution du solveur est aussi une session
(npm run solve -- --json donne steps), et c'est elle que npm run e2e tapote. Le format du fichier est dans
Formats de fichiers.
La commande finit par N session(s) replayed in … s, sans divergence. Avec --out, ouvrez report.md et
heat.svg. Avec --strict et des quotas, le code de sortie est 0.
| Symptôme | Cause | Correction |
|---|---|---|
no playtests in games/<id>/playtests |
Le dossier est vide, ou les fichiers ne finissent pas par .session.json (l'export du menu de sauvegarde s'appelle <jeu>-session.json) |
Utilisez Partager la session, ou renommez le fichier pour qu'il finisse par .session.json. |
✖ <fichier>: recorded on game "x", not "y" (code 1) |
La session d'un autre jeu | Déplacez-la dans le dossier de ce jeu. |
⚠ <fichier>: recorded with save version N, the game is at M |
La version de sauvegarde a changé depuis | Un avertissement : le rejeu peut diverger. |
… diverged (content changed since: re-record or delete) |
Le contenu a dépassé la session | Réenregistrez-la, ou supprimez-la. Avec --strict, c'est le code 1. |
✖ [<id>] field quotas missed: … (code 1) |
Moins de sessions, de parties finies ou de familles d'appareils que demandé | Récoltez plus de sessions, sur d'autres sortes d'appareils. |
Les fichiers de session que vous ajoutez dans playtests/. --out écrit dans le dossier que vous lui donnez
(.cache/playtests plus haut). Rien d'autre n'est écrit.
Une session est un simple fichier : supprimez-le, ou remplacez-le par un nouvel enregistrement. Rien d'autre n'en dépend.
-
tools/playtests.ts,src/engine/tools/playtests.ts tests/playtests.test.ts- Vérifier son jeu, Ce que prouve le solveur
- Passes de terrain, Confidentialité
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