Communauté

Roguelike : Apprent...
 
Notifications
Retirer tout

Roguelike : Apprentissage, perfectionnement, challenges

12 Posts
3 Utilisateurs
2 Reactions
593 Vu
(@nighthollow)
Active Member
Inscription: Il y a 7 ans
Posts: 9
Début du sujet  

D'habitude, je ne présente pas les projets sur lesquels je bosse. Pourquoi ? J'en sais rien. Peut-être parce que je fais plus des prototypes de gameplay que des jeux aboutis. Cette fois, c'est différent.

Outre GC, je suis plusieurs chaînes Youtube consacrées au dev en général, comme Coding Train, et aux jeux. Parmi celles-là, il y en a deux qui sont essentiellement tournées vers les Roguelikes, un type de jeu que j'aime beaucoup en tant que joueur, avec les Hack & Slash et les RPG. 

Sur ces chaînes (GDC et Roguelike Celebrations), on peut voir des conférences données par des devs où ils parlent de leurs jeux, mais où ils donnent également des conseils, des méthodologies, etc... Il y a aussi des formats courts plein d'infos. Bref ...

En  regardant une de ces confs avec le créateur de Cogmind, un roguelike en ascii art, où il expliquait comment se lancer, où trouver des ressources, des conseils, des infos, je me suis dit, pourquoi je n'essayerais pas. Je suis aller sur son site, et je suis tombé sur un article parlant de 2 challenges sur les RL, ayant lieu une fois par an.

Le premier, The Complete Roguelike Tutorial, se passe en juillet-août sur 8 semaines et est organisé par la commu RoguelikeDev sur Reddit depuis 2017, je crois. Le but est de faire un RL de A à Z, en suivant une sorte de tuto. Chaque semaine, il y a 2 parties abordant une ou plusieurs problématiques du dev de roguelike. Le tuto est basé sur celui qu'on peut trouver sur RogueBasin (un wiki très complet), mais remis à jour. Ils utilisent le langage Python ainsi qu'une lib spécifique au RL, mais on peut utiliser le langage qu'on veut. On peut discuter avec la communauté, poser des questions à des créateurs pros, partager ses progrès, etc. Au bout de 8 semaines, on peut partager le résultat final, un RL complet, avec un donjon sur plusieurs niveaux, des monstres, des items, un système d'XP et de levelling, la gestion de l'équipement, l'interface, etc... C'est mon premier challenge.

Le deuxième event, c'est le 7DRL (pour 7 days for a roguelike). C'est une gamejam, le but est de faire un jeu complet en 7 jours. Elle se passe sur itchio, et on peut trouver les infos sur RogueBasin. Celui là a lieu en mars, depuis 2005. J'aurais bien tenter le coup cette année, mais franchement, j'ai pas encore le niveau. Donc, je vais m'entraîner pour celui de 2024 (en espérant qu'il existe encore). 

Pour commencer mon apprentissage, je vais suivre le tuto de The complete roguelike tutorial de l'année dernière, qu'on peut facilement trouver, puisqu'ils sont disponibles sur le site rogueliketutorials.com, et également sur Reddit. J'ai déjà commencer en fait. Le but est d'être au point pour fin juin.

Terminé pour la présentation du projet. Place au code. Je posterais mon avancée au fur et à mesure.

 


   
Citation
Étiquettes du sujet
(@david)
Membre Admin
Inscription: Il y a 9 ans
Posts: 153
 

Merci du partage !


   
RépondreCitation
(@david)
Membre Admin
Inscription: Il y a 9 ans
Posts: 153
 

Des liens seraient bienvenus.


   
RépondreCitation
(@nighthollow)
Active Member
Inscription: Il y a 7 ans
Posts: 9
Début du sujet  

Avant de parler de mon avancée sur ce projet, et pour répondre à la demande de David, voici les liens des chaînes YT et des sites dont je parle dans le post précédent.

Roguelike Celebration : chaîne YT

GDC (Game Developers Conference) : chaîne YT

roguelike  development sur Reddit 

Complete Roguelike Tutorial avec accès aux archives des challenges passés

Grid Sage Game (le site de Josh Ge aka Kyzrati, développeur de Cogmind)

Rogue Basin 

Le serveur sur lequel se trouve Rogue Basin étant souvent en rade, qqun a regroupé les articles principaux sur github.io. 

7DRL Challenge

Un lien vers les jeux produits pendant les challenges

7DRL 2023

Lien vers la page itchio du dernier challenge en date (2023)


   
RépondreCitation
(@nighthollow)
Active Member
Inscription: Il y a 7 ans
Posts: 9
Début du sujet  

Voilà comment se présente cette phase d'apprentissage. C'est plus ou moins ce qu'enseigne David sur GC. Faire une base simple mais fonctionnelle, et ajouter des choses par la suite. Le tuto se compose de 14 étapes, chacune intégrant une ou plusieurs mécaniques de base d'un jeu de type Roguelike.

Dans l'ordre :

  1. Setting : installation de python et de la librairie de fonctions spécifiques
  2. Afficher un symbole et le déplacer
  3. Créer une classe Entités générique, des fonctions de rendu, essais de collision avec des murs
  4. Génération procédurale de donjon
  5. Le Field Of View, et le Fog Of War
  6. Ajout des ennemis et premiers combats
  7. Gestions des dommages sur les monstres et sur le perso
  8. Création d'une interface
  9. Items et inventaire
  10. Ajout de parchemins magiques et ciblage à distance
  11. Save / Load
  12. Ajout de niveaux au donjon (escaliers)
  13. Augmenter la difficulté (puissance des monstres et des items)
  14. Gérer l'équipement

Pour ma part, je suis passé directement à l'étape 2 puisque j'utilise Love2D et aucune librairie, ce qui m'oblige à coder l'intégralité du jeu (tout en suivant à peu près le tuto). C'est surtout cela qui m'intéresse dans ce projet. J'utilise des algos relativement basique, dans un premier temps.

Pour la 2e phase, j'utiliserais un langage objet, et des méthodes de genpro plus complexes. Et surtout, j'ajouterais des mécaniques de jeu comme la magie, des skills, du craft, une IA et peut-être des NPC et des quêtes.

Bon, je m'emballe un peu, mais c'est l'idée. Débuter simple et complexifier ensuite.


   
RépondreCitation
(@nighthollow)
Active Member
Inscription: Il y a 7 ans
Posts: 9
Début du sujet  

Etape 1

Pas d'étape 1 pour moi, puisque je n'ai rien à installer. Mais voilà ce qu'on obtient (plus ou moins) en suivant le tuto pas à pas

 et en poussant un peu le principe

 Ce ne sont que des exemples. je suis aller voir le boulot d'anciens participants sur Reddit, il y a des trucs sympas, même en cases hexagonales. Je ne suis pas un fan des jeux en ASCII art, mais j'avoue que comme placeholder, ca fait le job. C'est pas cher, facile à implémenter et relativement simple à remplacer par des tiles et des sprites par la suite. Mais pour l'instant, l'objectif est de mettre en place ce qu'on appelle Core Mechanics, la base du jeu. Ensuite, on améliore au fur et à mesure.

 

 


   
RépondreCitation
(@nighthollow)
Active Member
Inscription: Il y a 7 ans
Posts: 9
Début du sujet  

Etapes 2 et 3

Je regroupe ces 2 étapes parce que en fait, elles se complètent. Je n'utilise pas les métatables pour faire de la POO, mais une méthode hybride qui s'en rapproche. Cette méthode, (comme toutes les techniques que j'utiliserais sur ce projet ou presque), on la trouve sur Gamecodeur.

  1. Création d'une pseudo-classe qui gère l'ensemble des objets du jeu (perso, monstres, items, etc). 
  2. Création d'un gestionnaire d'événements pour gérer l'ensemble des actions (déplacement, utilisation d'un objet, etc...)
  3. Création d'une fonction d'affichage utilisant les canvas.
  4. Tester la création et le déplacement du personnage, ainsi qu'un système basique de collision avec les murs. 


   
RépondreCitation
Samy_the_grappler
(@samy_the_grappler)
Active Member
Inscription: Il y a 2 ans
Posts: 10
 

Salut @nighthollow,

 

Merci d'avoir partagé le process, c'est vraiment intéressant, hâte de voir la suite.😉

 


   
RépondreCitation
(@nighthollow)
Active Member
Inscription: Il y a 7 ans
Posts: 9
Début du sujet  

Etape 3 - Suite

Juste une précision. Le losange bleu sur le Gif représente une entité qui n'est pas le personnage. Actuellement, elle sert juste à vérifier que chaque entité est bien autonome.

Ce message a été modifié Il y a 1 an 3 fois parNighthollow

   
RépondreCitation
(@nighthollow)
Active Member
Inscription: Il y a 7 ans
Posts: 9
Début du sujet  

Etape 4

Premier gros dossier, la génération d'un donjon. 2 possibilités pour cela : le faire à la main  ou faire appel à l'aléatoire et utiliser la génération procédurale. Chaque méthode a ses avantages et ses inconvénients. A la main, on sait d'avance que le résultat sera conforme à ce qu'on attend, mais suivant la taille du donjon (ou de la map), cela peut s'avérer long et fastidieux. La génération procédurale permet d'aller plus vite dans la création, mais on n'est pas certain d'obtenir ce qu'on recherche du premier coup.

C'est un choix qui dépend de beaucoup de facteurs et ce serait trop long à détailler. Donc, pour cet exercice, ce sera la génération procédurale. Il existe beaucoup d'algorithmes de génération : automate cellulaire, BSP Trees, Tunneling, Drunkard's walk, et plein d'autres plus ou moins complexes (Voir sur GC, David en présente quelques un). Mais pour le moment, j'utilise le plus simple comme sur le tuto. On part d'une zone avec que des murs, on définit un nombre maximal de salles à creuser (par ex 50), un paramètre min-max pour la taille des salles (largeur et hauteur), et une fonction pour creuser.

Cette  fonction est une boucle allant de 1 au nombre max de salles. Dans l'ordre :

  1. tirage aléatoire d'une largeur et d'une hauteur comprise entre les params min-max
  2. tirage aléatoire de la position x (entre 1 et la largeur de la map moins la largeur de la salle)
  3. tirage aléatoire de la position y (entre 1 et la hauteur de la map moins la hauteur de la salle)
  4. on créé la salle virtuellement et on calcule la position de son centre
  5. si c'est la première, on la valide et on l'ajoute à une liste des salles valides
  6. sinon, on compare sa position avec celles des salles déjà validées
  7. si elles ne se chevauchent pas, on la valide et on l'ajoute à la liste. 
  8. validée ou non, on repart au début de la boucle pour créé une nouvelle salle

Une fois la boucle terminée, on obtient quelque chose comme çà :


   
RépondreCitation
(@nighthollow)
Active Member
Inscription: Il y a 7 ans
Posts: 9
Début du sujet  

Etape 4 - Suite

Quelques infos : la map fait 80x50 cases, la taille des salles varie entre 7 et 13 cases (murs compris) et j'ai fait 30 tirages de salles. En jouant sur les paramètres, on peut obtenir plus ou moins de salles. Mais pour l'instant, 10 salles, c'est suffisant.

Une fois que les salles sont creusées, il faut bien sûr les connecter. Dans le tuto, ils connectent la nouvelle salle à la précédente avec un couloir, mais le résultat final m'a paru un peu fouillis. Du coup, j'ai codé ma propre fonction. Je passe les détails mais en gros, je relie le centre de chaque salle avec le centre de toutes les autres dans les 2 sens (par exemple 1-2 et 2-1) pour avoir les points d'intersection. Puis, je checke chaque intersection et je ne garde que celles qui sont en dehors d'une salle. Ensuite, je relie chaque intersection aux salles qui lui correspondent. Si en chemin, je rencontre un mur d'une autre salle, j'élimine l'intersection, sinon, je la valide ainsi que les couloirs. C'est peut-être pas très clair, mais au final, j'obtient ceci :

 


   
RépondreCitation
(@nighthollow)
Active Member
Inscription: Il y a 7 ans
Posts: 9
Début du sujet  

Etape 4 - Suite

Je n'ai plus qu'à placer le personnage au centre de la première salle. On voit que ma fonction laisse une salle non connectée (la 7). C'est parce que j'utilise des salles de tailles impaires pour que le centre soit bien centré 😉 . Mais ce n'est pas une obligation. Cela marche pareil avec des salles de tailles paires. Pour celle la, je pourrais la connecter avec un autre algo, mais je songe à en faire une salle spéciale, accessible autrement que par un couloir. Je pourrais aussi la supprimer complètement. Je verrais.

Autre petit bug, au niveau des virages des couloirs, il manque un mur dans le coin. C'est parce que je pars d'une map entièrement vierge, et que je rajoute les murs après coup. C'est facile à corriger, mais pour le moment, ce n'est pas gênant.

Voilà, un petit donjon bien laid, mais il est opérationnel et c'est tout ce que je lui demande. Je rappelle que je ne crée pas un jeu, mais que je suis une sorte de tuto basique. Il n'y a plus qu'à explorer :

 

Prochaine étape, justement, l'exploration.

Ce message a été modifié Il y a 1 an parNighthollow

   
RépondreCitation
Share:

Dialoguez avec les autres membres de la gamecodeur school.

Accédez maintenant à notre serveur Discord privé : Entraide, Game Jams, Partage de projets, etc.

Vous devez être membre de la Gamecodeur School Premium pour être autorisé à accéder au serveur.