Cela fait un moment que je n’ai pas posté de nouvelles pour le Défi 2025.
Et non, je n’ai pas abandonné l’idée de faire mon RPG !
Ce projet est particulier, pas seulement parce que c’est mon premier RPG, mais surtout parce que son gameplay se démarque clairement des autres jeux du genre.
----------------------------------------------------------
Le concept du jeu
Dans One Life, vous ne contrôlez qu’un seul personnage, de sa naissance jusqu’à sa mort.
Impossible d’en changer tant qu’il est en vie !
Chaque action, depuis l’enfance jusqu’à la fin, a un impact direct et permanent sur son destin.
Le jeu est découpé en trois grandes phases :
-
Enfance : courte mais cruciale, vos choix conditionnent votre avenir.
-
Adolescence : une phase intermédiaire où vous commencez à choisir une orientation.
-
Adulte : plus lente, où vous définissez votre profession et agissez librement.
Bien sûr, je garde quelques surprises sous le coude… certaines agréables, d’autres peut-être moins. 😉
----------------------------------------------------------
Côté technique : architecture du projet
Depuis quelque temps, je me concentre surtout sur la structure technique du jeu.
Mon idée initiale était de découper le jeu en zones (village, tour, etc.), chacune avec ses propres scènes.
Je voulais aussi préparer le terrain pour de futures mises à jour sans avoir à faire retélécharger tout le jeu.
La solution : utiliser plusieurs DLL.
Chaque DLL contient une partie du jeu (personnage, zones, etc.).
Si je modifie une zone, seule la DLL correspondante doit être mise à jour → gain de temps et flexibilité.
----------------------------------------------------------
Gestion des ressources (MonoGame & ContentManager)
Un point technique important : chaque scène doit charger ses propres ressources (images, sons, polices, etc.).
Si on accumule tout en mémoire, on risque de saturer.
Problème : avec MonoGame, le ContentManager ne permet pas de libérer une ressource précise… c’est tout ou rien.
Mon idée : un ContentManager par zone.
Mais ça posait vite des soucis avec les sous-scènes et le HUD (qui doit rester affiché en permanence).
----------------------------------------------------------
La Factory, c'est la vie !
Pendant longtemps, j’ai cherché une architecture qui soit à la fois claire, extensible et surtout sans références circulaires (le cauchemar 🤯🤯🤯).
Les IA m’ont proposé plein de solutions (héritage, ZoneManager, etc.), mais aucune ne réglait vraiment le problème.
C’est là qu’est arrivée l’idée de la Factory. Et ça a tout changé.
Pourquoi la Factory ?
La Factory par zone est devenue le cœur de mon système.
Elle est responsable de tout ce qui touche à sa zone :
-
Créer les scènes de la zone (sans polluer les autres).
-
Gérer son propre ContentManager (chaque zone a son indépendance).
-
Libérer proprement les ressources quand on quitte la zone.
Résultat : plus de dépendances foireuses, plus de ressources rechargées inutilement. Chaque zone est autonome, modulaire et facile à maintenir.
Le petit bonus
J’ai aussi ajouté une sous-classe SubScene, dont héritent toutes les scènes de jeu.
Elle contient le ZoneManager (infos centralisées, transitions de zones/scènes, etc.), ce qui rend le système encore plus fluide.
👉 En clair : la Factory est devenue l’élément clé qui a transformé mon SceneManager en un système robuste, flexible et enfin agréable à utiliser.
----------------------------------------------------------
Le petit détail qui change tout
Grâce à ce système, chaque projet de zone a son propre Content, bien isolé et centralisé dans la Factory.
Il suffit juste de nommer correctement les répertoires, par exemple :
[NomProjet]Content/[NomProjet]Content.mgcb
Résultat : tout est bien organisé, et aucune ressource n’écrase les autres.
----------------------------------------------------------
Conclusion
Aujourd’hui, j’ai une base simple, robuste et évolutive pour gérer toutes les zones du jeu.
Il reste encore beaucoup à faire, mais les fondations sont désormais solides.
Merci d’avoir lu jusqu’ici !
Et si vous avez des questions, n’hésitez pas à les poser sur le forum :
👉 dinaforum.lacombedominique.com