Aller au contenu
← Tous les projets
JEUUnitypuzzlemobilegénération de niveauxIA

Diamond Realm

Un puzzle mobile à réaction en chaîne : tape sur un joyau, il éclate et projette des éclats dans quatre directions. Né en 2015 sous le nom de Pyro Poppers, intégré en 2017 à notre chaîne de production de jeux free-to-play, avec un algorithme qui génère et résout les niveaux, puis remis à jour en 2023.

Une grille de joyaux, un nombre de taps limité, et une seule question : par où commencer ? Dans Diamond Realm, chaque joyau a jusqu’à six points de vie. Chaque tap lui en retire un ; quand il n’en a plus, il éclate et envoie quatre éclats, vers le haut, le bas, la gauche et la droite. Chaque éclat qui atteint un autre joyau l’abîme à son tour, et un seul tap bien placé peut vider la moitié du plateau.

Les niveaux sont fabriqués par une « IA » au sens de l’époque : un algorithme déterministe construit sur un arbre de décision, avec un peu de pseudo-aléatoire. On est loin des LLM, du big data et des IA d’aujourd’hui.

De Pyro Poppers à Diamond Realm

Le projet démarre au printemps 2015 chez Equilibre Games sous le nom de Pyro Poppers : un premier prototype, confié à Wladimir Dassonville, alors stagiaire au studio, puis tout l’été pour en faire un jeu complet, avec ses portes qui s’ouvrent sur chaque monde, un tutoriel, la localisation, les sons et les succès Google Play Games.

Début 2017, on intègre le jeu dans notre workflow de jeux, avec les mécaniques des free-to-play : récompenses, paliers à débloquer, gestion des vies. À l’époque, c’est Candy Crush Saga qui mène la danse. Le jeu change aussi de peau et de nom : les pétards deviennent des joyaux et des cristaux, et Diamond Realm gagne un nouveau menu, des animations de victoire et de défaite, des éclats qui volent en morceaux et un effet de bloom sur les joyaux.

C’est l’un des succès du projet : Diamond Realm fait partie des jeux qui nous ont permis d’assembler toutes les briques de ce qui devient Brand Your Game, l’industrialisation de jeux vidéo bien conçus pour nos clients.

Une direction artistique qui change l’ambiance

Ce que je retiens surtout, c’est la direction artistique, choisie par Alisson, dans un tout autre genre que ce qu’on faisait à l’époque : on passe de jeux vidéo de « bros » à quelque chose de plus chic et de plus féminin. Tout le monde y a pris goût, et ça a mis une très bonne ambiance dans l’équipe. J’aime ça !

Ce changement a eu un autre effet : pour l’adopter, on a dû séparer les graphismes du code. Diamond Realm est ainsi devenu un vrai jeu reskinnable, prêt à rejoindre le catalogue proposé à nos clients.

Pour un prospect, un célèbre fabricant de glaces, nous avons par exemple proposé deux habillages du même jeu : les joyaux deviennent des cornets dans l’un, des bâtonnets glacés au chocolat dans l’autre. Ma préférée reste la version chocolat.

Diamond Realm habillé en jeu de cornets de glace
Diamond Realm habillé en jeu de bâtonnets glacés au chocolat

Un algorithme pour fabriquer les niveaux

Le gros chantier de 2017, c’est la génération des niveaux. Plutôt que de dessiner chaque grille à la main, le jeu fabrique chaque niveau en trois temps.

  1. Un budget. Selon le niveau de difficulté où se trouve le joueur, l’algorithme tire au hasard la taille de la grille (jusqu’à 7 cases sur 6) et un nombre total de points de vie à répartir entre les joyaux.
  2. Des motifs qui s’enchaînent. Un premier joyau est posé sur une case au hasard. Ensuite, un arbre de décision construit avec NodeCanvas choisit, selon des probabilités, le motif suivant : une ligne (depuis le dernier joyau, une direction où il reste des cases libres, et un ou deux joyaux posés plus loin sur cette ligne) ou un carré de joyaux autour du point de départ. Comme les éclats partent en ligne droite, chaque joyau posé sur la trajectoire d’un autre crée une réaction en chaîne possible. Poser un joyau sur une case déjà occupée lui ajoute un point de vie, jusqu’à six. On recommence jusqu’à épuiser le budget.
  3. Un solveur. Le jeu rejoue ensuite la grille, éclat par éclat, en essayant les suites de taps possibles, jusqu’à 15. Il commence par les joyaux les plus faibles, ceux qui déclenchent le plus souvent une réaction en chaîne, et abandonne toute piste qui ne peut plus battre la meilleure solution trouvée. Il en sort le nombre minimum de taps qui vide la grille.

Le niveau donne enfin au joueur ce minimum, avec une marge qui fond au fil du jeu : une fois sur deux, de un à trois taps de bonus avant le niveau 15, un ou deux jusqu’au niveau 30, un seul jusqu’au niveau 50, puis plus aucun : il faut trouver la solution parfaite.

Pour que ce solveur tourne assez vite sur mobile, il a fallu l’optimiser sérieusement : structures plutôt que classes pour la grille, listes chaînées pour ajouter et retirer des cases sans arrêt, et beaucoup moins d’allocations pour soulager le « ramasse-miettes ».

En plus de la direction du studio et des décisions sur ce que devait devenir le projet, j’ai choisi de passer du temps sur cet algorithme. C’est Benoit qui y a travaillé principalement, et je l’ai aidé à en résoudre les problèmes. Ce n’était pas simple : on est dans la fameuse famille des problèmes « NP-complets ». Il a fallu découper et tordre ce que nous avions défini au début pour aboutir à un algorithme optimisé, mais qui reste intéressant à jouer, avec une progression non linéaire d’un niveau à l’autre.

Remis à jour en 2023

En novembre 2023, j’ai repris le projet pour le faire passer de Unity 5.5 à Unity 2021.3, et remplacer l’ancien système de traduction par mon package open source Simple Localization, jusqu’à obtenir à nouveau une version qui se compile et se lance.