Making-of – Écrire un jeu d’énigmes

Publié le 10 septembre 2021 par Gee dans Superflu
Retrouvez ce making-of sur le blog du jeu

Pour ce nouveau making-of, je vais commencer par vous rappeler (ou par vous apprendre, peut-être) plusieurs caractéristiques de Superflu Riteurnz :

  • c’est (ce sera) un jeu vidéo qui consistera principalement en une succession d’énigmes plus ou moins tordues : prendre tel objet, l’utiliser ailleurs, parler avec tel personnage, trouver des indices, résoudre des codes, déverrouiller des cadenas, etc. Rien de bien novateur, on reste dans la grande tradition des point’n’click.

  • le joueur ou la joueuse évoluera dans un monde ouvert. Attention, n’allez pas imaginer quelque chose aussi immense que Breath of the Wild ! Le nombre de lieux à visiter sera bien plus modeste, mais vous aurez la possibilité d’aller et venir à votre guise dans le petit village de Fochougny (même si certains lieux devront être débloqués), bref, il ne s’agira pas d’une succession de pièces bien séparées (à part pour l’introduction)

  • il sera impossible de perdre ou d’être coincé : si vous avez oublié de ramasser un objet, alors il sera toujours possible de le récupérer au moment où il faudra l’utiliser (vous n’aurez jamais besoin de charger une sauvegarde plus ancienne pour vous débloquer). Aucune action ne mènera non plus à la mort ou à une impasse qui vous forcerait à recharger une autre sauvegarde. La seule difficulté viendra de la résolution des énigmes et du temps qu’il vous faudra pour les comprendre et les résoudre 🙂

La soluce et le graphe

Ces trois aspects en tête, je me suis pas mal demandé comment écrire ce jeu : au départ, j’ai simplement commencé par faire des listes d’objets pour chaque pièce et par écrire, eh bien… la soluce, tout simplement 🙂

Je me suis vite rendu compte que ça allait vite devenir compliqué de m’y retrouver, de ne pas dupliquer des choses, etc. Je suis donc parti sur l’idée de représenter tout ça par un graphe orienté : après tout, même si on écrit toujours une soluce de façon linéaire, l’intérêt du monde ouvert est que vous n’avez pas à résoudre les énigmes dans un ordre précis, plusieurs « branches » peuvent être parcoures en parallèle.

Un graphe présente l’avantage de donner une représentation visuelle du déroulement du jeu, avec la possibilité de représenter les différentes pièces par des sous-graphes. Ça permet aussi de détecter certains problèmes : par exemple, une boucle dans le graphe sera le signe d’une énigme impossible (un objet A nécessaire pour débloquer la pièce P dans laquelle on trouve un objet B nécessaire pour avoir l’objet A).

Les nœuds du graphe

Pour ce que soit lisible, on va distinguer plusieurs types de nœuds :

  • les objets : toutes les choses avec lesquelles on peut interagir à l’écran (ça comprend aussi les personnages – oui, ce sont des objets :p), représentés par des ellipses roses ;

  • les objets d’inventaire : toutes les choses qui apparaissent à un moment ou à un autre dans notre inventaire, représentées par des ellipses jaunes. Notez que ces objets sont distincts des objets normaux : un objet normal peut ne pas être pris, et inversement, un objet d’inventaire peut ne pas correspondre à un objet normal (par exemple, dans l’intro, si vous prenez le tisonnier, vous récupérez également de la cendre qui n’est pas un objet qui apparaît dans la scène autrement) ;

  • les informations : représentées par des hexagones oranges. Ce sont tous les indices, les codes à noter, etc.  ;

  • les actions : représentées par des rectangles blancs. Prendre un objet, en déplacer un, utiliser un objet sur un autre, etc., ;

Les arêtes n’ont pas d’étiquette, elles permettent juste de noter quel objet/information/etc. permet d’atteindre quel objet/information/etc.

Imaginons par exemple la série d’action suivantes :

  1. Je regarde un post-it sur laquelle se trouve un code

  2. Je tape le code sur le clavier d’un coffre, ce qui le déverrouille et laisse apparaître un portefeuille

  3. Je prends le portefeuille (et je récupère aussi l’argent qui est un objet d’inventaire séparé)

  4. Je donne l’argent à un personnage qui me donne un indice en retour

Ça donnerait le graphe suivant :

Le graphe indique, de haut en bas : « post-it ; regarder post-it ; code du coffre ». Puis « code du coffre » se combine avec « coffre » pour mener vers « ouvrir coffre ; portefeuille ; prendre portefeuille ». Ce dernier point vers « argent » et « portefeuille ». « Personnage » se combine avec « argent » vers « donner argent à personnage ; indice ».

Le langage DOT

Pour réaliser ces graphes, j’avais commencé par utiliser le logiciel graphique Dia, mais il m’est vite apparu que placer les nœuds et arêtes à la main risquait de devenir très fastidieux lorsque le graphe allait grossir.

Je me suis donc penché sur le logiciel en ligne de commande Graphviz : il a l’avantage de séparer l’information (le graphe en lui-même, qu’on peut simplement représenter textuellement comme une liste de nœuds et une liste d’arêtes) et sa représentation. En l’occurrence, il se charge lui-même de générer une disposition la plus lisible possible selon le graphe représenté, et je n’ai plus qu’à écrire la description du graphe sans me soucier d’où placer tel ou tel nœud.

Le fichier texte ayant servi à produire l’exemple ci-dessus est le suivant :

Un fichier « dot » détaillant chaque nœud et chaque arête du graphe

J’ai fait le choix de définir toutes les arêtes à la fin, mais ça n’est pas obligatoire, ça peut être fait au milieu aussi : l’avantage, c’est que la lecture de ces arêtes se fait comme la lecture d’une soluce 🙂

Résultat

J’ai terminé l’écriture du jeu il y a quelques semaines. Enfin, il est possible que j’ajoute encore des énigmes ici ou là, mais le gros du déroulement est écrit. J’avais déjà posté cette image sur les rézozozios à ce moment-là, mais voici une vue éloignée (pour ne pas vous révéler la solution, justement) du graphe complet, chaque couleur représentant une partie différente (intro + 3 parties) du jeu :

Un très large graphe représentant les énigmes de l'intro

Alors en réalité, il y a pas mal d’endroits où c’est assez peu lisible (notamment parce que pas mal d’arêtes traversent le graphe de bout en bout et finissent pas être mélangées). Mais le gros avantage du format texte, c’est que je peux facilement extraire des sous-ensemble du graphe pour mieux voir ce qui se passe. La séparation en pièces permet aussi d’identifier quelles sont les pièces les moins utilisées (où il y a peu d’objets/informations), car c’est là que je risque d’ajouter des choses en priorité, pour équilibrer tout ça.

ATTENTION SPOILER : pour finir, je vous montre le zoom sur les deux premières pièces qui constituent la démo du jeu que j’ai publiée le jour de Noël l’année dernière. Si vous n’avez pas encore joué à cette démo et que vous ne souhaitez pas vous faire divulgâcher la solution, ne regardez pas, bien entendu 🙂

Zoom sur les parties du graphe représentant l'intro (désolé, un peu compliqué à décrire en texte)

Note : il est également fort possible que cette intro soit modifiée dans la version finale du jeu. J’ai eu un certain nombre de retours sur le fait que l’énigme du code hexadécimal était assez ardue et avait bloqué pas mal de monde. Je pense la garder mais la déplacer bien plus loin dans le jeu, et de la remplacer par quelque chose de plus simple (ça n’est que la première pièce du jeu, la difficulté devrait aller crescendo).

Publié le 10 septembre 2021 par Gee dans Superflu

🛈 Si vous avez aimé ce making-of, vous pouvez le retrouvez avec d'autres sur le blog du jeu.

Soutenir

Ce blog est publié sous licence libre, il est librement copiable, partageable, modifiable et réutilisable. Il est gratuit car financé principalement par vos dons. Sans inscription, vous pouvez très simplement me soutenir :

Pour l'année 2023-2024, 8388 € ont pour l'instant été collectés sur un objectif annuel de 21 000 € (SMIC brut), soit 40 % de l'objectif :

Sources de revenu

L'année étant entamée à 58 %, il y a actuellement un retard de 3792 € sur l'objectif.

Avancement de l'année

Vous pouvez également, si vous le souhaitez, passer par une plateforme de financement participatif :