AGAGAB - A Game About Growing A Bean

Présentation du jeu

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.

La page Itch.io du jeu !

Capture montrant des îles flottantes et une plante qui pousse.

Contenu du jeu

La map

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.

Screenshot des îles vues du sol.

La plante

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.

La plante au sol en cours de croissance.

Les échelles

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.

La plante arrivant au niveau d’une île avec une échelle placée.

La boutique

Une boutique permet au joueur d’acheter des consommables, tels que les échelles, les engrais ou des munitions.

La boutique où le joueur peut acheter des consommables.

Les ennemis

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.

Des espions en reconnaissance.

Sauvegarde

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.

image image image image

Capture des menus pour sauvegarder et charger.

Développement du jeu

La map

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 :

La plante

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.

Les objets

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.

La boutique

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.

Les ennemis

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.

Sauvegarde

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.

Détection d’objets

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.