
___________________
Pr0t0t1pe
___________________
Le jeu :
Concept :
Pr0t0t1pe est roguelike inspiré de Hades avec une histoire complexe se voulant proche d’un Metroid Brainia.
Chaque partie se joue à travers plusieurs environnements générés procéduralement ayant chacuns leurs ennemis, pièges et salles spéciales. Le joueur peut jouer plusieurs armes et construit son build à travers la run en assemblant plusieurs objets qui synergisent entre eux.
Pitch :
Un robot est envoyé sur une planète extraterrestre pour retrouver une base abandonnée construite dans le passé par une équipe d’astronautes humains. L’objectif est alors de traverser plusieurs environnements afin de réparer une balise permettant ensuite à d’autres équipes de venir intervenir.
Equipe :
- Louis Deprez : Game Designer - Second Programmeur
- Anatole Lesur : Game Designer - Programmeur
Mon role :
- Game Design
- Programmation des core mécaniques et éléments de gameplay
Temps de production :
2 mois
Contexte :
Pr0t0t1pe était au départ un projet très ambitieux lancé avec un amis. Nous voulions faire un rogue like avec des mécaniques simples et originale. Mais surtout, une intention forte, mettre en scène des révélations proche de Outer Wild, dans lesquels le joueur découvre comment faire quelque chose qu'il pouvait déjà faire depuis le départ.
C'est en cours de programmation, lorsque notre professeur nous a demandé de réaliser un petit projet en 2 mois, que nous avons pris la décision de réaliser un morceau de Pr0t0t1pe. Une vertical slice, reprenant un morceau très précis du jeu et en essayant de le réaliser comme il serait dans le jeu final.
Le cours restait cependant de la programmation et n'ayant pas énormément de temps, nous nous sommes concentrés sur la réalisation concrètes des mécaniques, laissant de côté les intentions de twist. De plus, les assets utilisés dans le projet furent trouvés gratuitement en ligne et ne sont donc pas entièrement cohérent avec l'univers du jeu.
Game Design :
Pr0t0t1pe est un roguelike dans lequel le joueur doit affronter des monstres dans des environnements procéduraux afin de battre des boss et avancer. Tous les éléments centraux du jeu tournent autour d'une système de 5 types/5 couleurs représentant chacun un concept. Dans cette vertical slice, seul 3 couleurs sont présente. Le 2 autres arrivent dans la suite du jeu.
- Le vert représente la vitalité
- Le jaune représente la mobilité
- Le rouge représente la létalité
Chaque ennemi et chaque amélioration du jeu fait partie d'une de ces couleurs et possède donc une cohérence.
Primals & mutations :
Primals et mutations :
Afin de rivaliser avec la difficulté du jeu, le joueur va devoir gagner en puissance. Pour cela, les joueurs a 2 options :
- Les primals
- Les mutations
Les primals :
Les primals sont des collectibles lâchés par les monstres à leur mort. Il existe 3 types de monstres (rouge, vert et jaune) qui lachent chacun un type de primal différent.
Lorsque le joueur ramasse un primal, il est ajouté à son inventaire à l’emplacement associé et augmente une stat associé :
-
Le vert augmente la vie
-
Le jaune augmente la vitesse de déplacement
-
Le rouge augmente les dégâts
Ces primals peuvent aussi être utilisées dans des shops afin d’être échangées avec d’autres tribus contre des avantages (d’autres primals ou alors des mutations).

UI primals

Exemple mutation :
Nom : Armure d'épine
Type : Vert
Effet :
-
Projette 6 épines lorsque le joueur subit des dégâts
Les mutations :
Les mutations sont les objets les plus importants du jeu. Elles offrent chacune un fort avantage au joueur, un pouvoir qui s’active lorsqu’il réalise les bonnes actions.
De la même manière que les primals, les mutations possède chacune une couleur vert, rouge ou jaune.
Le joueur doit choisir intelligemment les mutations qu'il équipe puisqu'il n'a qu'un nombre d'emplacement limité dépendant de son arme.



Vidéo de la mutation explosion

Exemple mutation :
Nom : Explosion
Type : Rouge
Effet :
-
Les projectiles du joueur explosent à l'impact, infligeant des dégâts de zone.

Programmation des mutations :
D’un point de vue programmation, ce qui importe pour chaque mutation est leur condition d’activation.
Ainsi, le code utilise des events. Chaque action du jeu ou du joueur active un event différent.
Ensuite, pour appeler les actions des mutations, le programme utilise de l'héritage. Chaque mutation hérite donc d'un script MutationCore
Chaque mutation possède donc 3 fonctions précises identique à toutes :
-
Equiper : permet de relier la mutation à l'event associé du jeu
-
Desequiper : permet de retirer la mutation de l'event associé
-
Action : ce que fait la mutation lorsqu'elle est appelée par un event. Certaines mutations ont plusieurs fonction Action


Armure d'épine :
Equiper : Relie la mutation à l'event "prendre des dégâts"
Deséquiper : Retire la mutation de l'event "prendre des dégâts"
Action : invoque 6 projectiles d'épine
Les armes :
Dans le jeu, le joueur choisis à chaque partie quelle arme il souhaite jouer. Pour cette vertical slice, nous avons réalisé 2 armes et le jeu choisi aléatoirement l'arme jouée.
D’un point de vue GD les différentes armes présentent 2 grandes différences :
-
La manière d’attaquer : chaque arme possède sa manière de lancer les projectiles
-
Les emplacements de mutations : chaque arme possède le même nombre d'emplacement mais pas le même nombre de secteurs.

Vidéo d'équipement de mutations

Vidéo du comportement de l'arme 2 du jeu
Emplacements de mutations :
Chaque arme présente des emplacements de mutations différents permettant au joueur d'équiper des mutations. Les emplacements sont répartis par secteur. Un emplacement peut accueillir n’importe quelle mutation mais toutes les mutations d’un secteurs doivent être du même type.
Les ennemis :
Dans cette vertical slice, le joueur affronte 3 ennemis différents de 3 couleurs différentes. Ces ennemis lâchent, à leur mort, des primals de leur couleur.
Le comportement des ennemis est cohérent avec leur couleur, ainsi :
- Les verts sont lents et résistants
- Les rouges sont dangereux et attaquent à distance
- Les verts courent vite et sautent sur le joueur.
Programmation des ennemis :
Chaque ennemi utilise un algorithme A* pour calculer le chemin le plus rapide vers le joueur. Ensuite, il utilise une state machine pour alterner d'état entre suivre, attaquer et attendre. Tant que l'ennemi n'a pas vu le joueur il attend, lorsqu'il est assez proche il le suit et dès qu'il est à porté, il attaque.

Vidéo d'une salle du jeu avec les 3 ennemis différents

Certains ennemis ont des comportements plus complexe. L'ennemi rouge par exemple va s'éloigner du joueur s'il est trop proche afin de l'attaquer à distance.
Level Design :
Génération environnement :
Durant le jeu, le joueur va explorer plusieurs environnements générés procéduralement.
La vertical slice ne présente qu’un seul environnement, simple mais généré procéduralement.
L’objectif est d’avoir une map carré présentant un nombre de salles impair (par exemple 3x3 ou 5x5) et incorporant plusieurs salles spéciales obligatoire à des endroits précis (salle de boss, salle de départ, salle d’objet et salle de shop).
Programmation étape 1 :
La génération se fait en 2 étapes.
Tout d'abord, un programme s'occupe de créer un tableau de int indiquant les positions des salles spéciales avec des valeur au dessus de 1, les salles classique avec des 1 et l’absence de salle avec un 0.
Pour générer ce tableau de numéros, le programme commence par placer la salle numéro 3 aléatoirement sur la ligne la plus haute puis la salle numéro aléatoirement sur la ligne la plus basse.
Il génère ensuite le chemin le plus court possible pour aller du 2 au 3 et le note avec des 1.
Ensuite, il place aléatoirement le numéro 4 sur la colonne de gauche ou de droite puis le numéro 5 sur l’autre colonne.
Si un numéro spécial est généré là où s’en trouve déjà un autre, l’emplacement est choisi à nouveau jusqu’à trouver un emplacement valide.
Enfin, il relie ces 2 numéros avec des 1.
On obtient ainsi un donjon aléatoire avec 4 salles spéciales. La taille du donjon peut être modifiée mais le jeu ne génère que des donjons en 5x5 dans cette vertical slice.


exemple de tableau généré par l'étape 1

Exemple d'environnement vu de dessus
Programmation étape 2 :
Ensuite, un second programme utilise ce tableau pour générer les salles dans le monde du jeu et placer des portes permettant au joueur de passer d’une salle à l’autre.
Chaque salle générée dans le monde est prise au hasard dans la liste de type de salle associée. Par exemple, si le tableau indique qu’une salle 1 doit être placée, le jeu choisit une salle 1 aléatoire parmi toutes les salles 1 possible.
Ensuite, le programme génère des portes entre les salles adjacentes.
