Cub3D est le second projet graphique de l'école 42. Le but cette fois est d'implémenter un algorithme de raycasting pour faire un rendu 3D d'une carte en 2D, comme dans Wolfenstein3D. Pour ce projet, j'étais accompagne de Nathan Locussol, un autre élève de 42 (linkedIn)
image du jeu Wolfenstein3D
Le principe du raycasting est assez simple: un rayon va être envoyé depuis la position du joueur jusqu'à ce qu'il croise un mur. En fonction de la distance parcourue, on affichera plus ou moins loin le mur. On répètera cette opération pour chaque colonne de pixels de notre fenêtre. Malgré tout, la simplicité de cette algorithme créée certaines limitations. Par exemple, les niveaux sont obligatoirement composés d'un seul étage, avec des pièces rectangulaires et avec des murs épais.
explication simple du raycast. En vert, le joueur; en rouge le rayon; les cases blanches sont des espaces vides et les cases bleues des murs
Le programme, développé en C, se lance avec comme paramètre un fichier .cub, contenant les textures de chaque orientation de mur (Nord, Sud, Est, Ouest), la couleur du sol et du plafond et bien sûr, la carte composé de 0 (espace vide) et de 1 (mur) ainsi que la position du joueur.
exemple de fichier .cub classique
Comme pour So_long, 42 se focalise principalement sur le rendu plutôt que sur le gameplay dans ce genre de projets. C'est pourquoi encore une fois, le joueur peut seulement se déplacer, et, dans la partie obligatoire, il n'y a même pas de collisions à gérer. Nous avons donc décidé de pousser le projet plus loin en faisant d'abord les bonus proposés, comme les collisions, une minimap ou encore une porte, mais aussi nos propres bonus. Vous pouvez donc par exemple taggez les murs et les effacer, il vous faut une carte pour ouvrir une porte et vous pouvez jouer à la gameboy, ce qui lance mon so long.
Toutes les actions possibles