AGAGAB est le premier jeu dont le développement est allé jusqu’à la publication. Il s’agit d’un jeu dans lequel le joueur a pour objectif de faire pousser un haricot jusqu’à atteindre sa maison, envolée sur une île flottante. Des agents gouvernementaux viendront lui mettre des bâtons dans les roues. AGAGAB a été développpé à l’aide de Unity, et a été publié sur Itch.io en mars 2026. Il continue d’être mis à jour régulièrement.
Des îles flottantes présentent dans le ciel composent l’environnement de jeu. Le joueur doit faire pousser son haricot depuis le plancher des vaches pour atteindre les îles sur lesquelles il pourra trouver des objets à débloquer lui permettant de rejoindre des îles de plus en plus haut jusqu’à rejoindre sa maison sur l’île la plus haute.
Le joueur fait pousser un haricot en l’arrosant, et en ajoutant de l’engrais. Il plante une graine dans le sol, sur une île flottante, ou sur une autre plante pour faire pousser un nouveau haricot. Le haricot produit des fruits de deux types, le premier sert de monnaie, le second, bien plus rare, sert de graine pour replanter.
Pour grimper sur les plantes verticales, le joueur doit placer des échelles sur ces dernières. En poussant, les plantes englobent les échelles, forçant le joueur à en placer de nouvelles.
Une boutique permet au joueur d’acheter des consommables, tels que les échelles, les engrais ou des munitions.
Des espions viennent d’abord en reconnaissance. S’ils restent en vie suffisament longtemps et qu’il effectuent suffisament de signalement, des soldats apparaitront et cibleront le joueur. Le joueur dispose d’armes pour se défendre, mais il doit d’abord les débloquer en trouvant les licences d’armes cachées sur les îles flottantes.
Le joueur a la possibilité de sauvegarder sa progression pour recharger sa partie plus tard. Pour cela, il doit se rendre à un point de sauvegarde (tente ou cabane) et interagir avec le bâtiment.

Les îles flottantes sont générées procéduralement. On part d’une sphère unitaire UV, puis on vient la transformer. D’abord une élongation est appliquée pour donner une forme plus elispoidale a notre île. Des bruits de Perlin désynchronisés (avec des offsets) sont utilisés pour déformer l’espace de coordonnée (Domain Warping) pour donner une forme plus organique. On déplace les points avec un Fractional Brownian Motion dont on contrôle la persitance et la fréquence pour donner plus ou moins de détails à l’île. Enfin, on applatit le dessus de l’île et on étire le bas. On applique un shader qui color l’île en fonction de l’altitude du triangle (marron en bas, vert en haut), on évite de devoir vraiment les texturer une par une.
On place ensuite des objets sur l’île :
Sur l’ile la plus haute, on place la maison (objectif finale);
Trie des objets de la liste par tag (plante, rocher, batiment...);
On sélectionne aléatoirement des triangles du maillage de la surface de l’île;
On filtre les triangles selon leur inclinaison, la distance aux autres triangles...;
On tire aléatoirement une catégorie et un item de la catégorie.
Les plantes sont générées procéduralement. Un Perlin Worm influencé est utilisé pour générer une forme de plante, qui est ensuite convertie en une série de segments. Chaque segment est composé d’un cylindre. En poussante, on agrandit les cylindres des segments, déplaçant les segments suivants. On active les segments une fois un certain diamètre atteint. Plusieurs méthodes de génération de plantes ont été testées, la méthode retenue consiste à générer une pool de plantes au lancement du jeu, qui sont placées dans la scène lorsque le joueur plante une graine.
Un gestionnaire d’objets gère l’état interne des différents objets initialisés (Verrouilé, Débloqué, Equipé, Sélectionné). Un RayCast réguilier vérifie la présence d’un objet à équiper ou à débloquer devant le joueur. Une classe objet définie les comportements et variables classiques des objets, et est héritée par les différents types d’objets (quantité, prix, description pour la boutique...). Les objets sont abonnés directement à certains inputs du joueur (action principale, secondaire, interaction). On peut ainsi ajouter facilement de nouveaux objets dans le jeu. Ces abonnements sont révoqués temporairement par exemple si le joueur est face à la boutique pour cliquer sans activer l’objet.
Les échelles sont issues d’un package de l’asset Store à peine modifié, puis exploité.
Les comportement des autres objets ont été créés de toute pièce.
Leur modèles 3D sont pour la plupart issus de l’asset store, quelques un ont été modélisés à l’aide de Blender.
La boutique est une UI sur un canvas en world space qui répond à un curseur virtuel placé au centre de l’écran. Régulièrement, on tire aléatoirement les objets qui seront vendus et un multiplicateur pour les prix. Un template d’UI d’objet est alors remplit avec ces informations. Une seconde fenêtre d’information affiche les détails de l’objet sélectionné. On utilise les Buttons, ScrollBar, Panel de Unity pour construire l’interface et détecter les interactions. Lorsque le joueur regarde la boutique, on révoque l’abonnement du gestionnaire d’objets à l’input de changement d’objet pour pouvoir scroller.
Une machine d’état détermine le comportement des espions et des soldats. Le déplacement des ennemis est assuré par un NavMeshAgent, qui leur permet de se déplacer sur le terrain qui est un NavMeshSurface. Des comportements spécifiques ont été créés pour les soldats tels que trouver un objet pour se protéger. Les animations sont gérées par un Animator, qui reçoit des paramètres de la machine d’état pour faire correspondre les animations au comportement de l’ennemi.
Un système de sauvegarde basé sur la sérialisation JSON a été mis en place. Une classe de sauvegarde contient les variables à sauvegarder, et est sérialisée en JSON pour être écrite dans un fichier. Pour éviter de surcharger le fichier de sauvegarde, on garde uniquement les Seeds des éléments procéduraux (map, plantes). On économise ainsi énormément de stockage. On enregistre aussi l’état des objets (débloqué, équipé, leurs quantités...) ainsi que le point de départ et d’arrivée de chaque échelle placée par le joueur. Lors du chargement, le fichier est désérialisé pour récupérer les données de sauvegarde.
Le joueur à plusieurs systèmes de détection, pour les objets collectibles, on lance un raycast devant le joueur régulièrement et on assigne aux Prefabs des objets un layer. Selon de l’objet détecté par le Raycast, on déclence une méthode ou une autre. Dans le cas du sol ou des échelles, on utilise un trigger placé aux pieds ou devant le joueur.