Comment les niveaux aléatoires d’un jeu sont créés ? Le développeur de Road Not Taken nous dit tout

0 0
Comment les niveaux aléatoires d’un jeu sont créés ? Le développeur de Road Not Taken nous dit tout

Hasard et surprises de développement

Nous avions déjà parlé dans les précédents articles des niveaux de Road Not Taken générés aléatoirement. À chaque promenade en forêt, c’est donc une expérience entièrement nouvelle qui s’offre à vous. Pour des jeux comme Bioshock ou God of War, les concepteurs décident manuellement de l’emplacement de tous les couloirs, objets et ennemis du jeu. Pour Road Not Taken, rien de tout cela n’est fait manuellement. Nous avons préféré consacrer notre temps à créer des objets et des ennemis originaux et à définir soigneusement les probabilités qui détermineront où et quand vous les rencontrerez.

rnt_blog_mapgen_title

Cette façon de faire me rappelle beaucoup le tableau de Duchamp : Nu descendant un escalier n°2. Pendant des milliers d’années, l’humanité s’est contentée de ne peindre qu’un instant figé dans le temps. Duchamp, inspiré par les avancées du cinéma, a décidé de peindre dans un seul et même tableau toutes les étapes d’une femme descendant un escalier. Je trouve cela assez similaire à la création d’un rogue-like. Au lieu de concevoir un seul niveau, nous utilisons des algorithmes qui définiront tous les niveaux possibles.

Comment générer un niveau, passe par passe
Le système de génération aléatoire construit chaque niveau en combinant différentes passes qui apportent chacune plus de détails. Chaque passe modifie l’équilibre général du niveau et le rapproche peu à peu de ce que le joueur découvrira dans le jeu. Les niveaux de Road Not Taken sont générés en cinq passes distinctes.

rnt_blog_mapgen_pass1

Première passe : définir les zones
Dans Road Not Taken, les forêts que vous explorez sont en fait une succession de grilles. Par exemple, un niveau peut être composé d’une grille de trois zones sur quatre, chaque zone étant constituée de six carrés sur huit à l’écran. La zone située en haut à gauche est désignée comme point de départ.

Ensuite, nous définissons un certain nombre de contraintes, comme le nombre d’enfants à sauver et le nombre minimum de parents sur la carte, ainsi que la difficulté souhaitée. Ces éléments déterminent à quoi ressemblera le reste de la carte.

Cela paraît simple, mais trouver les bons chiffres demande beaucoup de temps et de rigueur. Nous devons trouver toutes les valeurs qui génèrent des niveaux injouables (ou ennuyeux). Je passe donc une bonne partie de mon temps à paramétrer des valeurs très élevées ou très basses et à tester les niveaux ainsi générés. Procéder par élimination m’apprend certaines choses au passage, notamment que devoir retrouver 100 enfants est une vraie corvée. Mais n’en récupérer qu’un seul est ennuyeux. Y a-t-il une solution intermédiaire ? Petit à petit, une expérience de jeu divertissante et plaisante se dessine.

Ce qui est le plus intéressant quand on travaille sur des mécaniques de jeu originales et aléatoires, c’est que personne (moi y compris) ne sait à l’avance quelles contraintes vont être amusantes. Je suis parfois surpris par les résultats, c’est pourquoi j’essaie de ne rien présumer. Je me lance et je crée des centaines de niveaux horribles que j’explore dans l’espoir de tomber sur quelque chose d’agréablement surprenant.

11243299194_b544f38462_o

Deuxième passe : ajouter des obstacles
Chaque zone comporte des blocs qui bloquent une issue. Pour dégager la voie, le joueur doit récupérer un groupe d’objets prédéfinis. Par exemple, vous devrez peut-être trouver et regrouper cinq arbres d’un certain type pour libérer le passage. En théorie, n’importe quel objet du jeu (peu importe la quantité), peut devenir la clé de ces passages, mais certains sont plus amusants que d’autres.

Nous prenons donc en considération la difficulté souhaitée pour le niveau, puis nous regardons quels objets sont disponibles et nous en choisissons un pour ouvrir le passage. Ces objets-clés sont placés dans la même zone que l’issue. Nous répétons ces étapes jusqu’à ce que tous les chemins de la forêt soient bloqués.

Après l’ajout de cette étape durant la phase de prototype, le jeu est devenu nettement moins amusant, et nous avons pratiquement cessé de travailler dessus. Débloquer les chemins était divertissant, mais il manquait un petit quelque chose. Ce n’était pas assez intéressant.

RNT_Blog_MapGen_Pass3

Troisième passe : déplacer certains objets hors de la zone
Cristian Soulos, notre développeur principal, a trouvé comment pimenter les choses. Il s’est rendu compte que Road Not Taken serait bien plus amusant si toutes les pièces nécessaires à la résolution d’une énigme ne se trouvaient pas sous le nez du joueur. Il a donc disséminé tous les objets nécessaires pour dégager les issues dans différentes pièces. Vous serez donc obligé d’explorer la forêt pour les trouver si jamais vous voulez débloquer tous les passages et sauver tous les enfants (j’imagine toujours les « gloussements » diaboliques de l’ordinateur pendant cette étape).

Dès que nous avons intégré cet élément au système de génération de niveaux, Road Not Taken, qui était jusque-là amusant pendant 10 minutes, a réussi à nous distraire pendant des heures. Ce qu’il faut retenir, c’est que lorsque l’on travaille sur des mécaniques de jeu originales, on ne peut pas deviner à l’avance ce qui sera divertissant ou non.

RNT_Blog_MapGen_Pass4

Quatrième passe : ajouter des objectifs et un système de combinaison d’ingrédients
C’est à ce moment que nous avons ajouté les enfants, leurs parents et un système de combinaisons à certains endroits de la forêt. Votre objectif principal est de sauver ces enfants, ce sont eux qui font de Road Not Taken un jeu que vous pouvez terminer plutôt qu’un simple casse-tête rigolo. Vous augmenterez vos chances de succès en combinant des objets, qui, correctement utilisés, vous donneront davantage d’outils pour explorer efficacement la forêt et affronter les créatures hostiles.

RNT_Blog_MapGen_Pass5

Cinquième passe : ajouter un soupçon de difficulté
En plus des passages bloqués, certains éléments viendront corser le défi. Ils vous compliqueront la vie en vous attaquant, en vous barrant la route ou en semant le trouble en vous. Nous partons de la difficulté désirée, définie par un simple nombre qui augmente au fil du temps et au fur et à mesure que le joueur s’améliore. Ensuite, nous peuplons la zone d’objets et d’ennemis qui augmenteront la difficulté jusqu’à ce que le niveau souhaité soit atteint.

Chaque objet est associé à une difficulté donnée et obéit à des contraintes qui déterminent en combien d’exemplaires il peut apparaître dans un même niveau. Les objets sont également régis par des règles qui dictent à quels éléments ils peuvent être juxtaposés et dans quelles zones de la forêt ils apparaissent.

Tous les objets n’apparaissent pas forcément tout le temps, le joueur est donc obligé de varier sa stratégie. Vous aurez peut-être tendance à vous reposer sur la fabrication de potions, mais si vous tombez sur une carte dans laquelle les ingrédients nécessaires à ces potions ne sont pas présents, vous devrez utiliser une autre tactique. Dans la forêt, nombreux sont les objets qui ont plusieurs utilisations possibles, vous aurez donc bon nombre d’options à disposition, même s’il vous faudra peut-être expérimenter un peu pour toutes les découvrir.

Les avantages liés à notre système de génération aléatoire de niveaux
Un paramètre suffit pour régler la difficulté : configurer tout cela demande beaucoup de travail, mais une fois que c’est fait, nous pouvons générer des niveaux plus ou moins complexes en ne changeant qu’une seule valeur. Je peux vous assurer que certaines des forêts les plus difficiles de Road Not Taken sont incroyablement corsées, même pour moi, le développeur principal du jeu. Mais vous êtes d’autant plus satisfait lorsque vous en venez à bout !

rnt_blog_mapgen_robust

Le nouveau contenu s’intègre facilement : il y a quelques temps, nous avons ajouté 10 nouveaux objets et ennemis à Road Not Taken. S’il s’était agi d’un jeu plus traditionnel avec des niveaux entièrement faits à la main, un changement de cette ampleur aurait sans doute demandé des semaines supplémentaires pour rééquilibrer et retravailler les niveaux. Mais avec notre système de génération aléatoire, il a suffi de quelques ajustements mineurs pour que tout fonctionne. Cela permet donc une grande liberté pour tester de nouvelles idées sans perdre tout le travail déjà réalisé, et cela veut dire que nous pouvons ajouter des douzaines ou même des centaines d’ennemis et d’objets intéressants au jeu. Cela signifie aussi qu’avec un peu de chance, nous pourrons faire de nombreuses mises à jour pour enrichir Road Not Taken après sa sortie !

Les combinaisons possibles sont infinies : Road Not Taken peut générer des milliards de niveaux différents. Je découvre sans cesse de nouvelles situations que je n’aurais jamais pu prévoir. Que se passe-t-il si un raton laveur apparaît près de ces gros blocs de pierre ? Le chaos à l’état pur… rien que je n’eusse prévu, en tout cas.

Rendre le jeu amusant pour nous et pour vous
Les développeurs de jeux ont un secret dont ils parlent peu : nous nous lassons souvent de nos propres jeux à force d’y jouer encore et encore des mois (ou des années) avant leur sortie. Mais Road Not Taken continue à me surprendre, et je ne m’en suis pas encore lassé.

Nous venons de terminer une passe d’équilibrage, et le jeu prend vraiment forme. Nous avons sans doute déjà la plupart des objets et des ennemis qui figureront dans le jeu à sa sortie. Il reste à présent une bonne dose de peaufinage et de travail sur des fonctionnalités mineures. Avec un peu de chance, nous serons prêts à lancer le jeu au printemps ou cet été !

PS : au cas où vous ne l’auriez pas vu, nous avons récemment mis en ligne une nouvelle bande-annonce pour Road Not Taken. Découvrez-la sans plus attendre ! Notre rogue-like sortira prochainement sur PS4 & PS Vita. N’hésitez pas à regarder nos sublimes bandes-annonces ici.