Après vous avoir partagé mes idées initiales, voici un compte rendu de ma première semaine de développement.
Création du Personnage Jouable
Le personnage principal est maintenant en place. J’ai implémenté les bases du mouvement avec Godot, en utilisant un CharacterBody2D pour gérer les déplacements et les collisions avec l’environnement. Le personnage dispose également de deux animations principales : une pour le déplacement et une pour l’état d’inactivité. Le design vient pour l’instant d’un pack d’asset acheté il y a quelques années.
La mise en place avec Godot s’est déroulée sans difficulté particulière.
Création d’un système de génération de carte
La carte se génère automatiquement grâce à une génération automatique du terrain qui se base sur un bruit de type Perlin. Ce bruit est ensuite transformé en différents types de terrain (sol, mur) selon une valeur seuil. Ce terrain est ensuite interprété par un système de tilemap, qui gère les transitions pour créer une carte visuellement cohérente.
J’ai dû consulter quelques tutoriels pour maîtriser la gestion des tilemaps et la génération de bruit dans Godot, mais globalement, le processus s’est avéré assez simple. C’est à ce moment que j’ai switch entre le GDScript et le C# pour être plus à l’aise dans le dev.
Système d’Armes et de Projectiles
J’ai commencé le développement d’un ensemble de composants permettant de gérer les armes et les projectiles. Chaque arme a ses caractéristiques et ses projectiles. Pour l’instant j’ai 3 armes différentes : un orbe de feu tirant des boules de feu sur l’ennemis le plus proche, un orbe d’eau tirant des projectiles qui entourent le personnage et un pistolet laser qui suit l’ennemi le plus proche. Les projectiles peuvent infliger des dégâts aux ennemis, et j’ai également mis en place des systèmes pour gérer les collisions avec l’environnement.
Là, les choses sont devenus plus complexe. C’est ici que les différences avec Unity ont vraiment commencé à se faire sentir, en particulier en ce qui concerne le système de Nodes de Godot. Par exemple, contrairement à un gameobject dans Unity, un Node ne peut avoir qu’un seul script. La solution pour gérer la composition ? Placer un sous-node pour chaque composant, avec son propre script associé. J’ai pu aussi tester les Resources à la place des ScriptableObject.
Petit bémol avec Godot en C#, qui ne reconnaît pas correctement les Resources créées via C# dans son interface. Cela fonctionne tout de même, mais il est nécessaire de créer une Resource vide avant de lui associer le script approprié.
Managers et Système Global
Pour structurer le projet, j’ai créé plusieurs managers qui sont chargés en singleton via l’autoload de Godot :
- GameManager : Gère l’état global du jeu et les interactions principales comme l’enregistrement du joueur.
- InputManager : Gère les entrées du joueur et déclenche les actions correspondantes.
- SceneManager : Gère le chargement des scènes et la génération de la carte. Cela inclut un écran de chargement dynamique pour une meilleure immersion.
L’autoload est facile à mettre en place une fois qu’on sait qu’il existe 🙂
Composants Clés
Plusieurs composants essentiels sont maintenant en place :
- HealthComponent : Gère la santé des entités et déclenche des événements lorsqu’elles subissent des dégâts ou meurent.
- DommageableComponent : Permet à une entité de recevoir des dégâts.
- ClosestTargetLocatorComponent : Localise la cible la plus proche pour les armes et projectiles.
Thème Graphique de l’UI
J’ai commencé à travailler sur le thème graphique de l’interface utilisateur (UI) du jeu. Cette phase m’a prise pas mal de temps entre la recherche dans mes pack d’assets et la compréhension du système d’UI de Godot.
Ici grosse complication avec Godot pour comprendre le système d’UI. J’ai perdu beaucoup de temps dessus pour juste mettre en place le TitleScreen. J’aime bien l’idée d’avoir une gestion de Thèmes mais par contre les alignements de composant et leurs tailles etc… C’était vraiment galère…
Démo
Prochaines Étapes
Le test de Godot avance bien mais il reste encore beaucoup à faire ! Voici ce que j’ai prévu pour les prochaines étapes :
- Gestion de composant: Travailler sur sa mise en place avec Godot pour la création la plus simple de système modulaire.
- Réflexion sur le gameplay souhaité
- Création de nouveau ennemis : Implémenter des nouveaux ennemis pour augmenter la diversité dans le jeu et continuer à mettre en place les composants me permettant de gérer tous les types d’ennemis
- Nouvelles armes : Pour suivre la même voie que pour les ennemis, le système d’armes et projectiles est encore très rudimentaire, du coup j’ai bien envie de voir les possibilités d’armes que je peux mettre en place avec et le faire évoluer au besoin
- Système de compétences : Mettre en place un système basique de compétences pour personnaliser davantage le gameplay.
Je suis vraiment enthousiaste après cette première semaine de travail sur ‘Forge Keepers’ et mes premiers pas avec Godot. Je suis bien conscient que ça va me ralentir au début puisque je n’aurais pas l’expérience que j’ai avec Unity, mais le fait d’avoir choisi de coder en C# plutôt qu’en GDScript devrait me faciliter la transition. Restez à l’écoute pour plus de mises à jour, et merci de suivre cette aventure de développement !
À bientôt pour le prochain devblog !