Repository navigation
FR Jouer Speedrun
English · Type : procédure · Public : joueur · Contexte : navigateur du joueur · Statut : prête · S'applique depuis : 4.1.14
Speedrun et Remix · contrat : stable · vérifié par la CI (matrice de support de la 4.4.0, 2026-10-23) : Replays dans quatre environnements d'exécution (cross-runtime) · vérifications automatiques : jobs
cross-runtime,e2e; plan de CIe2e; 2 fichiers de tests · passes humaines :runs-real-playerspas faite (#85),run-resume-power-cyclepas faite (#84),mystery-deployedpas faite (#82),livesplit-obspas faite (#81),code-wheel-humanpas faite (#78) · limites connues :integrity-not-authenticity,livesplit-obs-not-tried
Comment jouer un jeu quest'n'click contre la montre, exporter la preuve de votre run, et afficher votre chrono dans OBS ou piloter LiveSplit. Pour les auteurs qui veulent déclarer des catégories : Speedrun pour les auteurs.
Une tentative chronométrée dans une catégorie que déclare le jeu (Any%, par exemple), découpée en temps
intermédiaires sur ce qui se passe dans le jeu, jamais sur des pixels ; à l’arrivée, un fichier .wsrun scellé que
n’importe qui peut rejouer et vérifier ; vos records sur votre appareil ; et, si vous diffusez, un chrono dans OBS ou
LiveSplit piloté par le jeu.
Un rejeu prouve qu’un run est possible et que son temps de jeu est exact. Il ne promet pas de détecter toute triche : seule l’observation d’un serveur ou d’une personne élève la confiance au-delà (voir les limites).
Le joueur d’un jeu qui déclare des catégories de speedrun (speedrun dans son contenu). Le moteur a le speedrun depuis
la 4.1.14 « Time Attack » ; cette page vaut depuis cette version. Le jeu d’exemple sur
wanoo.github.io/quest-n-click ne déclare aucune catégorie : son menu de pause
n’a pas de ligne Speedrun ; le jeu de référence du dépôt du moteur (games/reference) en déclare plusieurs.
- Un jeu dont le menu de pause affiche Speedrun.
- Pour OBS ou LiveSplit seulement : Node 22.12 ou plus récent sur la machine d’où vous diffusez, et une copie du moteur (un projet créé, ou le dépôt du moteur) ; OBS ou LiveSplit.
Le run lui-même ne demande aucune commande : il se passe dans le jeu. Les outils de diffusion sont de petits processus
Node sur votre propre machine, jamais sur un serveur et jamais dans le jeu : dans le dépôt du moteur par npm run,
ou dans un projet créé depuis le package du moteur qu’il a installé (node_modules/quest-n-click/tools/speedrun/).
- Démarrer : menu de pause › Speedrun › une catégorie. Le jeu redémarre avec la graine de la catégorie ; un petit chrono montre la catégorie, le temps sur lequel elle est classée (temps réel, temps de jeu, ou temps de jeu sans les pauses) et le dernier temps intermédiaire.
- Pendant le run : le menu de pause affiche Abandonner le run. Ouvrir le menu est noté comme une pause, et le passage de l’onglet en arrière-plan aussi ; ni l’un ni l’autre n’arrête le temps de jeu (le jeu ne tourne pas pendant qu’il attend).
-
À l’arrivée : le run est scellé, et le menu de pause affiche Exporter le run : un fichier
.wsrun, la preuve à envoyer à un classement ou à un ami. Le panneau de développement (?dev) a le même export.
-
Vos records restent sur l’appareil, hors ligne (IndexedDB
web-scumm-runs) : le record personnel et ses temps intermédiaires, le meilleur segment de chaque temps intermédiaire, la somme des meilleurs, les tentatives, les arrivées, les abandons, des notes. Un run reprend après un plantage ou un onglet fermé depuis son dernier morceau enregistré (toutes les 500 entrées) ; ce qui a été joué après est rejoué.
Le fantôme est votre record personnel joué à côté de vous, sur des cibles de sens : la salle où il est, l’action qu’il fait et ce qu’il tient, en avance ou en retard à chaque temps intermédiaire, jamais une trace de pixels. Il est désactivé la première fois que vous jouez une catégorie sur cet appareil, parce qu’il montrerait les solutions des énigmes.
Les outils tournent sur la machine du joueur (décision D23), jamais sur le Bridge, jamais dans le jeu. Ouvrez le jeu
avec ?speedrunTool=<port> dans son adresse : la page envoie alors les événements de son run (la catégorie, les
identifiants et noms des temps intermédiaires, les temps ; rien d’autre : ni sauvegarde, ni identifiant de joueur, ni
jeton) à 127.0.0.1:<port>. Une page porte un seul port : elle alimente un outil à la fois. Les outils n’acceptent les
événements que de l’origine du jeu : par défaut le serveur de développement et la prévisualisation (localhost et
127.0.0.1, ports 5173 et 4173), --origin=<url> pour un jeu déployé. Une autre page ouverte dans le navigateur ne
peut pas envoyer de faux temps.
-
OBS : lancez l’incrustation, puis ajoutez dans OBS une Source navigateur sur
http://127.0.0.1:7777/?mode=full(oucompact: le chrono et le dernier temps ;transparent: la même chose sans fond). Elle se met à jour par Server-Sent Events.# dans le dépôt du moteur, sur votre machine npm run speedrun:overlay -- --port=7777 --origin=https://wanoo.github.io# dans un projet créé, sur votre machine node node_modules/quest-n-click/tools/speedrun/overlay.mjs --port=7777 --origin=https://wanoo.github.ioPuis ouvrez le jeu à
https://…/?speedrunTool=7777. Mettez l’adresse de votre jeu dans--origin.
-
LiveSplit : dans LiveSplit, Control › Start WebSocket Server (il écoute sur
ws://127.0.0.1:16834/livesplit), puis lancez le pont et ouvrez le jeu avec?speedrunTool=7778. Le jeu pilote LiveSplit : départ, temps de jeu, temps intermédiaire, saut, pause, remise à zéro.# dans le dépôt du moteur, sur votre machine npm run speedrun:livesplit -- serve --port=7778 --origin=https://wanoo.github.io--livesplit=ws://…désigne une autre adresse de LiveSplit.
-
Des temps LiveSplit depuis un run : écrire un fichier LiveSplit
.lssavec les temps intermédiaires d’un run comme record personnel.# dans le dépôt du moteur, sur votre machine npm run speedrun:livesplit -- export run.wsrun --names=Pantry,Garden,Market --out=run.lss
Sans
--names, les segments portent les identifiants des temps intermédiaires ; sans--out, le fichier est écrit à côté du run.
- Dans le jeu : le chrono, puis Exporter le run à l’arrivée.
- Dans OBS : la source navigateur affiche le nom de la catégorie au lieu de « waiting for a run… », puis les temps intermédiaires à mesure.
- Dans LiveSplit : le chrono démarre avec le run et découpe avec le jeu.
| Symptôme | Cause | Correction |
|---|---|---|
| Pas de ligne Speedrun dans le menu de pause | Le jeu ne déclare aucune catégorie | Rien à faire : ce jeu n’a pas de speedrun |
| L’incrustation reste sur « waiting for a run… » | La page a été ouverte sans ?speedrunTool=<port>, ou avec un autre port |
Rechargez le jeu avec le port de l’incrustation dans l’adresse |
| L’incrustation ne reçoit rien d’un jeu déployé | L’outil n’accepte par défaut que les origines du serveur de développement | Relancez-le avec --origin=<l’adresse du jeu>
|
| LiveSplit ne bouge pas | Son serveur WebSocket n’est pas démarré | LiveSplit › Control › Start WebSocket Server |
| Le run ne démarre pas | La catégorie n’a pas pu démarrer (le message dit pourquoi) | Lisez le message ; signalez-le à l’auteur du jeu |
Dans le navigateur : les morceaux du run et vos records dans IndexedDB (web-scumm-runs). Sur le disque : le
.wsrun que vous exportez, le .lss qu’écrit export. Les outils ne gardent rien.
Abandonner le run termine une tentative (comptée comme abandon). Un run repris après un plantage continue depuis son dernier morceau ; un run ne peut pas être repris dans un autre monde ni avec une autre preuve. Un run envoyé à un classement sur un Bridge se supprime avec le jeton donné par le Bridge à l’envoi (Confidentialité).
Limite ·
integrity-not-authenticityLa chaîne prouve qu’un fichier n’a pas été modifié après son scellement, pas que le joueur était honnête : pauses, menus, sauvegardes, temps réel et entrées utilisées sont la parole du joueur. Un run dont un script a choisi les entrées se rejoue comme valide ; seul un témoin ou un modérateur l’écarte.
Limite ·
livesplit-obs-not-triedOBS et LiveSplit ne sont testés que par des machines. Une vraie session par une personne, c’est la passelivesplit-obs, ouverte (#81) à la 4.4.0.
- Speedrun pour les auteurs : catégories, chronométrage, vérification, classements, niveaux de confiance.
- Accessibilité : les options qui ne comptent jamais comme triche.
- Conception : ADR 0016 (l’horloge, le générateur à graine, la preuve chaînée), ADR 0017 (verdicts et confiance).
- Le code :
tools/speedrun/overlay.mjs,tools/speedrun/livesplit.mjs,tools/speedrun/local.mjs.
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