Aller au contenu
quest'n'click

JouerGuidePour joueursS'applique de 4.1.14

Speedrun pour les joueurs : LiveSplit et OBS

This page in EnglishCette page sur le wiki GitHub

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.

Ce que vous obtenez

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).

Contexte et versions

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.

Prérequis

  • 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.

Où lancer les commandes

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/).

Étapes

  1. 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.
  1. 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).
  1. À 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.
  1. 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.

Diffusion : OBS et LiveSplit

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.

  1. OBS : lancez l’incrustation, puis ajoutez dans OBS une Source navigateur sur http://127.0.0.1:7777/?mode=full (ou compact : 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.io

    Puis ouvrez le jeu à https://…/?speedrunTool=7777. Mettez l’adresse de votre jeu dans --origin.

  1. 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.

  1. Des temps LiveSplit depuis un run : écrire un fichier LiveSplit .lss avec 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.

Résultat attendu, et comment le vérifier

  • 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.

Erreurs fréquentes

SymptômeCauseCorrection
Pas de ligne Speedrun dans le menu de pauseLe jeu ne déclare aucune catégorieRien à 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 portRechargez 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éveloppementRelancez-le avec --origin=<l’adresse du jeu>
LiveSplit ne bouge pasSon serveur WebSocket n’est pas démarréLiveSplit › Control › Start WebSocket Server
Le run ne démarre pasLa catégorie n’a pas pu démarrer (le message dit pourquoi)Lisez le message ; signalez-le à l’auteur du jeu

Fichiers ou données modifiés

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.

Reprise ou retour arrière

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é).

Limites

Références