Evo\Wave


Dans le cadre de notre projet de fin de bac en création de jeux vidéo à l’UQAT, nous avons travaillé avec Hansoft et Perforce pour gérer notre pipeline de production. Notion a servie pour la bible du projet. Le projet a été développé dans Unreal Engine et les réunions se passaient sur Discord plusieurs heures par semaine. Le tout entièrement à distance dans un contexte de pandémie.

Le jeu est Evo/Wave, un collectathon 3D rendant hommage à l’histoire des jeux vidéo. Il est disponible sur Steam depuis le 12 mars 2021: https://store.steampowered.com/app/1532180/EvoWave/

Mon rôle dans ce projet était concepteur de niveaux.

Pour commencer, j’ai présenté Figma à mes collègues. Il s’agit de mon outil de prédilection. C’est une application web destiné au design graphique que j’ai découvert dans le cadre mon DEC en techniques d’intégration multimédia. L’outil nous a permis de faciliter nos présentation et de travailler en collaboration sur les cartes en simultané.

Mise en situation

Vous incarnez LAI-6, un intelligence artificiel qui a pour mission de réparer le monde que Magnavex ramena aux années rétro. Chaque niveaux contient un morceaux de la console qui permet de rétablir peu-à-peu les graphiques du monde.
Nous nous retrouvons alors dans un jeu aux assets évolutif dont chaque niveau représente une console différente.

Niveau style PS1/N64

Intentions et conception

Le niveau 2 se déroule dans un parc au style graphique de la Nintendo 64. Dans ce niveau LAI-6 débloque l’habileté de planer suite à une «tournade aérienne» [jump + spin]. La seule mécanique qu’il possède est donc un double saut au début de ce niveau.
Nous avons donc conçue ce niveau de manière à ce que le joueur voit progressivement ses objectifs.

Voici la première itération du plan:

Première itération du plan du niveau 2

Premièrement le joueur voit la fontaine au milieu du niveau. Bien qu’imposante, celle-ci n’est pas activée; les NPCs lui font part que le courant doit être rétabli avant tout. Le deuxième objectif est alors le pylône électrique au sommet de la montagne, qui se trouve au milieu du lac, toujours inaccessible sans la mécanique de planage. C’est donc après la section de montagne qu’on retrouve une section de plateforming et que le joueur obtient son nouveau pouvoir. Il peut dorénavant accéder à la montagne, rétablir le courant, activer la fontaine et accéder à la fin du niveau.

Niveau 3

Intentions et conception

On voulait pour le niveau une thématique Miami dans les années 80 pour aller de paire avec le style synthwave du jeu. Le niveau se déroule alors sur une plage et une partie de ville.
Avec la recherche de plusieurs références, j’ai commencé par une première carte, que j’ai rediviser en zones. Par la suite, nous avons réitéré avec en prenant en compte les bonnes idées des membres de l’équipe pour finalement créer plusieurs itérations de cartes. En voici quelques unes.

Première itération de la carte
Les différents sous-niveaux ainsi que les idées qui les composent (Boardwalk, quai et plage)
Plan finale de la carte du niveau 3

Le niveau est créé avec des props modulaires. Nous avons donc placer nos BSP Unreal aux endroits, en respectant les bonnes métriques ainsi que la grille que nous nous étions imposé afin que les points de pivots soient parfait dès que les artistes poussent leurs assets.

Boss fight

Pour neutraliser Magnavex, le joueur doit survivre durant ses 4 phases.

Durant la première phase, le joueur doit éviter des ennemis et attaquer l’antagoniste. Magnavex tire à répétition 3 missiles dont 1 à tête chercheuse. Dans cette phase j’ai été responsable de programmer les missiles.
La programmation s’est fait en nodes blueprints et comporte 4 fonctions principales.
La première est de s’autodétruire après 5 secondes, ce qui est assez facilement réalisable avec un delay et un destroyActor juste après avoir fait apparaître les effets visuels d’explosion.

La deuxième partie du blueprint est de se détruire lors d’une collision. Je vérifie également si l’objet de la collision est le joueur. Si c’est le cas, on applique des dégâts.

La troisième fonction est de s’assurer que le missile suit le joueur. Ce n’est pas trop difficile puisqu’on part d’une classe projectile native d’Unreal. Il y a moyen de faire agir le projectile de sorte à ce qu’il suive une trajectoire; on lui passe donc comme cible le joueur.

Finalement, on règle la magnitude de l’accélération qui définit à quel point le missile répond aux mouvements du joueur.
La dernière fonction se passe sur l’event tick, c’est la fonction où on indique au missile de toujours regarder le joueur. Cette fonction s’est malheureusement avérée obsolète puisque la direction artistiques à misé sur des missiles ronds et que je l’avais créé ayant comme modèle un «bullet bill» présent dans nos plateformers préférés!
Le tout suivant un standards de nomenclature préétablies par l’équipe.

Apprentissages/Erreurs

  • Toujours offrir le choix au joueur malgré l’intention du critical path.
  • Les espaces vastes (déplacements «longue-distance») rendent le joueur perdu et désintéressé
  • Réitérations, playtest, réitérations, playtest