Starpig


I made this project for my Game Dev class in 2020.


It was the first videogame I really finished, even if it's a pretty short one.
So it's a "Starfox like" space/rail shooter, that has Porco Rosso as theme.

It took me about a month to develop it from scratch.

I used Unity and it was the first time I used it to create a game, I am much more familiar with Unreal Engine 4.

Starpig


J'ai réalisé ce projet pour mon cours de Game Dev.


C'était le premier vrai jeu que j'ai terminé, même s'il est petit.
C'est une "Starfox like" space/rail shooter qui a Porco Rosso comme thème.

Il m'a pris un peu moins d'un mois à réaliser.

J'ai utilisé Unity et c'était la première fois que je l'utilisais pour un jeu, je suis bien plus habitué à Unreal Engine 4.

A gameplay video

Vidéo du Gameplay

If you want to watch :)

Si vous voulez regarder :)

A brief presentation

Présentation


Concept

So like I said it's a Starfox like, so the objective is to shoot enemies while the camera is moving, and try to catch as many coins as we can.

And to do so, we have two weapons, an infinite machinegun and rockets.


The player looses health points as he gets shot and if he has shield he looses shield points.
He looses when he looses all his HP's.

Comme je l'ai dit c'est un "Strafox like", l'objectif est de tirer sur les ennemis pendant que la camera va en avant, et récupérer autant de pièces que l'on peut.

Pour ce faire, Nous avons deux armes, une mitrailleuse infinie et des roquettes.


Le joueur perd points de vie quand il se fait tirer de dessus et s'il a des points de bouclier il les perd en priorité.
Il perd la partie quand il n'a plus d'HPs.

Health

Vie

A brief feature I added to the health bar is the picture of Marco (player's character).
This image changes depending on player's HP's (Yeah like in 1994's Aladdin).

Une feature que j'ai rajouté est la photo de Marco (le joueur).
Cette image change selon les HPs du joueur (Oui comme Aladdin de 1994).

HP > 70%
70% > HP > 30%
HP < 30%

Bonus

The player can get bonuses by taking them directly, like the X2 bonus that gives him a double machinegun for a few seconds, or the heart that gives him HP's.

Le joueur peut récupérer des bonus en les touchant, comme le bonus X2 qui lui donne une double mitrailleuse pendant quelques secondes, ou le coeur qui lui rend des HP.

Bonus box

Boites mystère

He can also have a random bonus by detroying a bonus box. Those boxes can contain :

- Health points.
- Shield points.
- Double machinegun.
- Rockets.
- Coins.

Il peut aussi récupérer des bonu en détruisant les boites mystère. Ces boites peuvent contenir :

- Des points de vie (HP).
- Des points de bouclier (SP).
- Double mitrailleuse (X2).
- Des roquettes.
- Des pièces.

Enemies

Ennemis


There are different kinds of enemies, but before that let's see how they spawn.

Spawn

Enemies spawn inside a 3x3 grid, when the player enters a trigger zone.

I used C#'s enum and Dictionnary to create this feature so that it simplifies enemies spawn.
Then I made the triggers that can spawn as many enemies as we want, by choosing their type and location.

Shooting

The shooting system is pretty simple, it doesn't use any physics, only code.
Enemies (like the player) shoot a projectile that damages the opponent in contact.

The damage scale depends on the enemy itself and the difficulty chosen by the player.
Enemies can shoot straight forward (or backward to be exact) or aim the player.

Straight shot :

Aim shot :

Movement

Enemies have different behaviors.

  • Static : Doesn't move at all.
  • Left Right : Moves continuously from left to right.
  • Follow player : Follows the player on X and Y axes.
  • Rafale : Follows the player while shooting, stops while he reloads.
  • Enemies Types

    Following plane

    This enemy follows the player on the X and Y axes and shoots straight.

    At level 1 and in easy mode he has 80 HP and shoots 6 times before reloading.

    Right to Left plane

    This enemy goes infinitely from right to left and vice versa. He shoots straight
    at level 1 but aims the player at level 2.

    At level 1 and in easy mode he has 80 HP and shoots 8 times before reloading.

    Static plane

    This enemy doesn't move from his place and shoots at the player.

    At level 1 and in easy mode he has 80 HP and shoots 5 times before reloading.

    Burst plane

    This enemy follows the player on the X and Y axes and stands on his place while reloading.
    He shoots only when he's moving and shoots straight.

    At level 1 and in easy mode he has 100 HP and shoots 5 times before reloading.


    Il y a différents types d'ennemis mais avant ça regardons comment ils apparaissent (spawn).

    Apparition (spawn)

    Les ennemis apparaissent dans une grille en 3x3 quand le joueur entre dans un trigger.

    J'ai utilisé les enum et Dictionnary de C# pour créer ça afin de simplifier le spawn.
    Ensuite j'ai créé les triggers qui peuvent spawn autant d'ennemis qu'on le veut, en choisissant le type et l'emplacement.

    Tir

    Le système de tir est assez simple, il n'utilise pas de physique, seulement du code.
    Les ennemis (comme le jour) tirent des projectiles qui endommagent l'adversaire (et disparaissent) au contact.

    Les dégats dépendent du type d'ennemi et de la difficulté choisie par le joueur.
    Les ennemis peuvent tirer droit ou viser le joueur.

    Tirs droits :

    Tir de visée :

    Mouvement

    Les ennemis ont plusieurs comportements.

  • Statique : ne bouge pas du tout (sur les axes X et Y).
  • Droite Gauche : Va de gauche à droite (comme un essuie glace).
  • Suiveur : Suit le joueur sur les axes X et Y.
  • Rafale : Suit le joueur quand il tire et s'arrête quand il recharge.
  • Types d'ennemis

    Avion suiveur

    Cet ennemi suit le joueur sur les axes X et Y et tire droit.

    Au niveau 1 en mode facile il a 80 HP et tire 6 fois avant de recharger.

    Gauche droite

    Cet ennemi passe infiniment de droite à gauche et vice versa. Il tire droit
    au niveau 1 mais vise le joueur au niveau 2.

    Au niveau 1 et en mode facile, il a 80 HP et tire 8 fois avant de recharger.

    Avions statiques

    Cet ennemi est immobile et tire en visant le joueur.

    Au niveau 1 et en mode facile, il a 80 HP et tire 5 fois avant de recharger.

    Rafale

    Cet ennemi suit le joueur sur les axes X et Y et reste immobile pendant qu'il recharge.
    Il ne tire que lorsqu'il est en mouvement et tire droit.

    Au niveau 1 et en mode facile, il a 100 HP et tire 5 fois avant de recharger.