top of page
12.png

Impulse Shooter

Projet

Objectif:

Impulse Shooter est un projet Solo réalisé dans le cadre d'un cours de programmation. Ce projet avait deux objectifs. Le premier était de créer un jeu simple mais avec une  mécanique de gameplay originale. Le second d'inclure de la génération procédurale.

Période:

4 mois / Mars - Juin 2023

Jeu :

Concept

Impulse Shooter est à la fois un FPS et un TPS. Lorsque le joueur tire, il change de point de vue et voit l’arrière de son projectile pendant sa course. Il peut alors regarder aux alentours et viser pour lui donner une seconde impulsion. Le niveau représente un champ de tir qui génère de manière procédurale des cibles, murs et boosters. Ces derniers permettant de donner une impulsion supplémentaire au projectile.

Génération Procédurale

Pour faire apparaître les objets, j'ai codé 3 types de Spawners avec des algorithmes différents.

 

Le premier Spawner génère une grille horizontale ou verticale, où chaque carré de la grille a une chance de faire apparaître une cible.

Le second Spawner génère plusieurs grilles, qui empilés les unes sur les autres, forment une grande figure cubique. Chaque carré de la grille aura une chance de faire apparaître le troisième et dernier type de Spawner.

 

Le troisième Spawner est une plus petite accumulation de grilles formant un cube. Ce cube est divisé en 3 parties, chacune faisant apparaître un seul des trois objets. La face du cube qui est la plus proche du joueur fait apparaitre les boosters. Au milieu du cube apparaissent les murs. Enfin, les cibles apparaissent au niveau de la face du cube la plus éloignée du joueur.

Pour chaque Spawner, j'ai pu faire varier la probabilité qu'un objet apparaisse pour chacun des carrés rouges qui les composent. De plus, j'ai également pu plafonner le nombre d'objets qu'ils font apparaître pour éviter d'avoir des amalgames d'objets côte à côte.

Imp1.png
Imp2.png

Concept

Impulse Shooter est un jeu de tir qui est à la fois un FPS et un TPS. Chaque fois que le joueur tire, la perspective bascule de la vue du tireur à l’arrière du projectile. Le joueur a ensuite la capacité de donner une seconde impulsion au projectile dans la direction de son choix.

Le niveau de jeu se déroule dans un vaste couloir dont les cibles, murs transparents  et boosters, sont générés de manière procédurale. Les boosters sont des objets qui, au contact du projectile du joueur, lui permettent une impulsion supplémentaire.

Dans Impulse Shooter, les joueurs doivent faire preuve de précision et de stratégie pour éliminer toutes les cibles avec un nombre d’impulsion imparti.

Développement

Intentions:

Impulse Shooter est mon second projet de programmation sur Unity. Au départ, j'avais l'intention de réaliser un champ de tir avec un projectile qui se divise sur commande une fois tiré. Je n'étais pas complétement satisfait de cette idée et j'ai donc repensé mon projet jusqu’à en venir à la mécanique d'impulsion actuelle.

Level Design:

En plus d'avoir un gameplay plus intéressant, la mécanique d'impulsion a facilité le level design du jeu. Il est plus facile de designer un niveau autour d'un projectile avec un type de déplacement limité, qu'autour d'un projectile qui va en créer plusieurs dans des directions relativement aléatoires. L'impulsion donne au joueur plus de contrôle dans son gameplay ce qui rend les murs gênants mais toujours contournables.

 

Ajout de Gameplay:

Pour rendre le gameplay plus intéressant, j'ai ajouté les boosters qui réinitialisent l'impulsion du projectile. Bien que les boosters soient nécessaires pour toucher les cibles du fond, ils permettent aussi un rapide changement de direction pour toucher les cibles plus proches.

 

La Technique:

La plus grande difficulté de ce projet a été de coder la génération procédurale des objets via les Spawners. Pour simplifier, j'ai créé un groupe composé de plusieurs listes de valeurs. Les listes étant empilées les unes sur les autres et ayant le même nombre de valeurs aléatoires, elles forment une grille en deux dimensions dont chaque valeur est une case. En fonction de la valeur de la case, on peut faire apparaître un objet ou non. Pour créer une grille en trois dimensions, il faut que chaque valeur de la grille en deux dimensions soit une liste de valeurs. Une fois ce concept maîtrisé, j'ai beaucoup itéré sur la taille des grilles et la probabilité d'apparition des objets en fonction des valeurs.

bottom of page