top of page
MainAxis.png

Synos

Synos_Vignette.png

Un jeu roguelite en 3D en vue TPS, où le but est de construire un hameau de tranquillité dans un univers solarpunk imaginé par le personnage principal.
Ce dernier a en réalité une vie rude, qu'il adoucit au travers de la fabrication d'une maquette de son monde idéal :
Synos.
On y contrôle donc son
avatar imaginaire, plongé dans cette maquette qu'il construit peu à peu.

Genre

Action / Roguelite

Support

PC / Unreal Engine 4

Date

Janvier 2022 - Juin 2022

6 mois

Rôles

Game Designer,
Level Designer,

Script Blueprint,
Intégration,

Modélisation,
Game Tester

Contexte

Synos est mon projet de 4ème année d'études, avec sujet libre.

Puisque nous connaissions les forces et faiblesses de chacun et que nous nous complétions bien, mon groupe et moi avons décidé de travailler de nouveau ensemble cette année.
Ce projet était censé durer 2 ans, et nous avons pris plus de temps pour la préproduction pour tout préparer. Néanmoins, durant la production, il a été décidé que nous allions boucler la production en fin d'année, pour pouvoir réaliser un nouveau projet depuis le départ et dans de meilleures conditions l'année suivante. Cela dit, nous tenions à ce que Synos soit déjà bien plus professionnel dans son développement que le jeu précédant.
Le rendu final est donc une démonstration des mécaniques principales que nous voulions mettre en place.

Sur ce projet, j'ai été responsable du Game Design, de la totalité du scripting du jeu, d'un peu de modélisation et de la majeure partie de l'intégration des assets. 

Téléchargement

Vous trouverez ici un lien de téléchargement pour jouer au jeu !

itch-io-icon-512x512-wwio9bi8.png

Synos_Demo_Build
(Archive .zip
)

Walkthrough

Voici ci-dessous un walkthrough de la démo en vidéo.

Tutoriel

Notre démo représente la totalité du tutoriel prévu initialement pour Synos. Voici une section qui lui est consacrée.

Un bon tutoriel se doit de montrer au joueur toutes les options dont il dispose pour interagir avec le jeu. Nous avons donc décidé d'en faire autant, étape par étape, afin de s'assurer que le joueur ait pratiqué tout ce qu'il a besoin de savoir pour pouvoir jouer confortablement par la suite.

​

Le hub étant grand, nous avons fait en sorte de concentrer les éléments du tutoriel sur l'axe principal afin de ne pas perdre le joueur.

Maquette - Hub plan.png

Plan du hub complet (Imaginaire), Concept Art par Loeiz Legrand

Légende :

​

Start : Le joueur démarre dans le campement, qui est un endroit confiné où il apprend les bases du déplacement.

​

1 : Pour sortir du campement, le joueur doit sauter par dessus une barrière abaissée. Le bouton correspondant est indiqué. Ainsi, nous nous assurons que le joueur sait se déplacer.

​

2 : Enfin libre d'explorer, le joueur va apprendre à interagir avec le monde. Il doit maintenant pratiquer le gameplay principal qui consiste à récupérer des matériaux sur les points de récolte (points verts) et en vainquant les monstres (points violets). Il doit alors tout récupérer. Ces objectifs lui sont rappelés en haut à droite via une interface d'objectif, ainsi que par des flèches mouvantes directement au dessus de ses objectifs.

L'emplacement du chiffre 2 représente un obstacle qui met à l'épreuve la compétence de déplacement du joueur, qui par la suite serait mise régulièrement à l'épreuve dans les niveaux générés procéduralement.

​

3 : Le joueur doit maintenant apprendre à reconstruire un bâtiment, et les matériaux de l'étape précédant seront mis à profit. En interagissant avec le panneau de construction, le joueur fera sa première rencontre avec l'interface de construction et pourra constater qu'il peut reconstruire l'atelier.

​

4 : Une fois l'atelier reconstruit, nous allons montrer au joueur qu'il peut également interagir avec des éléments du décor, tel qu'un générateur. En l'activant, il remettra en route le monte-charge central, qui est le point de départ des parties.

​

5 : Il reste à s'assurer que le joueur sait qu'il peut utiliser un mode de visée pour atteindre les ennemis lointain plus facilement avec ses attaques à distance. C'est pourquoi, pour finir d'activer le monte-charge, il devra utiliser ce mode pour tirer une fois dans le moteur du monte-charge et le débloquer.

​

6 : Enfin, il ne lui reste qu'à utiliser le monte charge pour démarrer sa première partie dans un environnement généré procéduralement.

Game Concept

Vous trouverez dans cette section une version très abrégée mais plus digeste du game design prévu pour le jeu Synos, pour donner une idée du jeu initialement voulu. Vous pourrez retrouver le game concept document en détails dans la section "Suppléments" en bas de page.

Comme expliqué plus tôt, nous avions préparé un développement de 2 ans, qui s'est finalement stoppé au bout d'un seul. Cela a conduit à une baisse énorme du contenu final, mais du game design a bien eu lieu pour préparer du contenu. Vous le découvrirez plus bas dans cette section !

Univers & Environnement

La dualité "Réalité dystopique / Imaginaire utopique" jouait un rôle important dans le jeu.

Notre jeu regroupait plus de niveaux : pour exprimer cette dualité, nous avions préparé un niveau dans la réalité, tandis que le hub, ainsi que les 3 biomes à explorer, faisaient partie de la maquette Synos.

​

La majeure partie du temps de jeu se serait déroulée dans les 3 biomes : les Plaines, le Désert et le Marais, qui se seraient débloqués au fur et à mesure de l'avancement de la construction du hub, et qui seraient devenus plus difficiles. L'appartement était conçu pour être un interlude narratif à chaque étape de l'avancement du jeu.

​

Le but ultime du jeu est d'aider le personnage principal à se réconcilier avec la réalité, à travers la construction de son hameau idéal.

Appartement (Réalité), Concept Art par Yaël Préjeant

Plan du hub complet (Imaginaire), Concept Art par Loeiz Legrand

Concept des Plaines (Imaginaire), Concept Art par Loeiz Legrand

Gameplay & Mécaniques

L'idée était de pousser à l'exploration dans nos biomes générés procéduralement pour récupérer des matériaux et reconstruire le hub avec. Les mécaniques voulues sont celles montrées dans la démonstration, de quoi permettre et mettre l'accent sur cette récolte, et par conséquent la reconstruction du hub.

​

Nous avions prévu des éléments de roguelite tels que de l'équipement (armes comme armures) conférant des bonus de statistiques et des capacités spéciales, afin de pimenter les parties.

​

Nos biomes se seraient divisés en plusieures "salles" mis bout à bout procéduralement, et le joueur aurait du débarrasser ces salles de ses monstres pour accéder au suivant. Au bout du 4ème se trouve un boss qu'il faut vaincre pour sortir du biome avec la totalité des matériaux ramassés. Cependant, avant cela, le joueur peut choisir de recommencer une série de 4 salles pour amasser plus de matériaux, avant d'être confronté à ce choix de nouveau. Il peut effectuer ce choix jusqu'à 4 fois, avant d'être contraint à affronter le boss, qui se sera renforcé en fonction du nombre de fois où le joueur aura recommencé sa traversée.

​

Le but de cette mécanique de jeu était d'amener le joueur à challenger ses compétences en augmentant le risque mais surtout les récompenses.

​

Enfin, si le joueur venait à mourir, il était prévu de "booster" une salle du biome fatal en la rendant plus difficile mais aussi plus récompensante lors de son prochain passage. L'idée derrière cette mécanique était que le personnage nourrissait sa propre maquette avec don de son corps, bien qu'imaginaire, et permet de rendre la mort plus intéressante.

Scripting

Voici quelques exemples de scripts réalisés pour Synos. Avec l'expérience accumulée, j'avais déjà commencé à planifier mon code pour qu'il soit flexible, commenté et optimisé. Le but était de pouvoir ajouter de nouvelles fonctions plus rapidement, plus tard dans le développement. Bien entendu, ce projet étant de plus grande envergure que le précédent, j'ai pu une fois encore gagner en expérience en scripting tout au long de l'année grâce aux nouveaux besoins de ce projet.

Je suis parti de la base d'un personnage de jeu à la troisième personne pour réaliser notre personnage entier. Aux contrôles de base, j'ai ajouté un système d'interaction pour l'environnement, un autre système de dash prenant en compte le relief, un mode d'attaque pouvant exécuter 4 attaques différentes, ainsi qu'un mode de visée pour les attaques à distance. Le mode attaque se désactive automatiquement en cas d'interaction ou si le joueur n'attaque plus pendant un moment. C'est également ici que se trouve l'activation du menu pause.

Autrement, on retrouve aussi dans ce script les réactions passives du personnage, telles que les feedbacks de prise de dégâts, de mort, le boost de vitesse avec les combos d'élimination de monstre, ou l'attraction automatique des matériaux.

Les ennemis du tutoriel sont contrôlés par intelligence artificielle réalisée par mes soins, et j'ai ainsi pu découvrir cette partie du script et apprendre à m'en servir. Cette IA est faite pour poursuivre le joueur s'il passe dans le champ de vision du monstre, et le cas échéant, elle erre dans une petite zone autour de son point de départ. L'ennemi accélère en cas de poursuite.

Puisqu'ils sont plutôt faibles dans leur concept, ces ennemis ne peuvent attaquer le joueur que si ce dernier est en contact avec eux, mais le joueur subira cependant un recul dû au coup. Ils restent simples à vaincre, surtout à distance.
Eux aussi peuvent réagir aux coups que le joueur leur donne, avec des feedback d'animation et sonores, et il en va de même pour les attaques infligées au joueur.

L'une de nos mécaniques principales consiste à reconstruire des bâtiments ruinés, moyennant des matériaux ramassés sur les points de récolte ou les monstres. Ces matériaux sont ajoutés à l'inventaire du  personnage, pour être utilisés plus tard dans ce script : la construction de bâtiment.

Ce script, auquel on donne un nombre de matériaux nécessaire pour la construction, vérifie que le joueur possède suffisamment de matériaux pour l'autoriser à reconstruire le bâtiment. En cas de construction, les matériaux requis sont retirés de l'inventaire du joueur.

Toutes ces informations sont montrées en jeu via l'interface de construction que ce script affiche, afin que le joueur puisse connaitre les quantités exactes de matériaux requises.

Voici l'un des outils de level building que j'ai conçu pour le reste de l'équipe. Il s'agit d'un générateur aléatoire d'objets le long d'une courbe, ou spline, afin de faciliter la pose d'objets et d'augmenter le réalisme de chaines d'objets comme les chemins ci-dessus. J'ai ajouté à cela une option pour activer ou désactiver la collision des objets, une autre pour rendre leur rotation aléatoire, et enfin une autre pour décentrer les objets par rapport à la spline, afin de rendre les chaines plus éparses. Ces deux dernières options sont paramétrables dans leur intensité.

Ce script est un autre outil de level building, au nom proche de l'ancien mais différent dans son fonctionnement. Il utilise des splinemeshs, autrement dit des objets déformables, qui s'adapteront à la spline. On obtient alors des chaines d'objets cohérentes avec un seul objet déformé de multiples manières, comme le tuyau montré ci-dessus.

Il s'agit ici d'un autre type de script qui gère les animations d'un squelette de manière à les rendre fluide et cohérente en jeu. Dans le cas montré au dessus, j'utilise des variables d'état de mon personnage pour changer d'animation quand il saute, par exemple.

Mais ce script peut également servir à blend des animations, c'est-à-dire les mélanger. Cela est surtout utile quand on veut que le personnage utilise une animation pour les bras et que ses jambes continuent d'être en mouvement, comme lors d'attaques ou d'interactions en marche ou course.
Ainsi, j'ai créé une séparation au milieu du corps de notre personnage afin de pouvoir blend proprement ses animations ponctuelles avec ses animations plus constantes de déplacement.

Ce script existe pour la gestion des évènements du tutoriel, en l'occurence l'apparition de flèches d'indication et des messages d'objectifs en haut à droite de l'écran, afin de guider le joueur dans ses premiers instants sur le jeu. Chaque mécanique principale est présentée afin de s'assurer que le joueur est prêt à affronter un environnement hostile.

Evidemment, nous ne voulions pas que cela reste une fois le tutoriel fini, c'est pourquoi il n'est présent que dans le niveau où nous voulons faire jouer le tutoriel et ne s'active qu'une fois.
J'ai également fait en sorte qu'on puisse passer ce tutoriel dans l'éditeur afin de gagner du temps sur les tests.

Les interfaces jouent un rôle crucial dans notre jeu, car elles affichent en permanence les informations essentielles au bon déroulement du jeu. Ces dernières se doivent de refléter toujours les informations les plus récentes, comme l'acquisition de matériaux, la baisse du niveau de vie, etc.

Il était nécessaire de créer plusieurs d'entre elles pour de multiples situations, c'est pourquoi il existe une interface d'exploration et une interface de construction, entre autres.

Chacune d'entre elle est dynamique et permet aux level designers de changer des valeurs, comme la vie maximale ou les matériaux requis, sans être obligé d'adapter l'interface eux-mêmes.

Voici un des matériaux réalisés pour notre jeu : l'herbe. Ce matériau fait en sorte que l'herbe soit aléatoirement colorée dans une échelle de couleur donnée, afin de donner de la variance de couleur au sol et de rendre le résultat plus nuancé.

J'ai utilisé pour cela un gradient basique s'appliquant à chaque brin d'herbe, combiné à une couleur de variation en world position qui s'applique plus ou moins sur les gradients existants en fonction d'une map de normale. De cette manière, sur toute la surface que l'herbe occupe, certains endroits seront plus affectés par la couleur de variation, donnant de la cohérence aux variations de couleur.

De plus, j'ai ajouté un effet de vent en World Position Offset afin de la rendre plus vivante.

Enfin, voici quelques exemples de scripts utilisés pour les sons du jeu.

Pour la musique, il s'agit d'une Sound Cue utilisant plusieurs petits morceaux de musique choisis au hasard, et qui se répète au bout d'un moment. Cela nous donne une ambiance musicale légère tandis que le joueur parcourt le hub du jeu, où nous voulions rendre une ambiance paisible.

Pour les sons spatialisés comme le vent dans les feuilles d'arbre, j'ai opté pour un son dont le pitch est légèrement aléatoire, afin de donner encore une fois de la variété dans les sons. Ces sons sont ensuite atténués en fonction de la distance qui sépare le personnage d'eux, de manière à ce que ceux-ci soient entendu plus ou moins forts selon la distance. Ce procédé a été utilisé pour tous les sons provenant d'objets du jeu, comme les ennemis, les impacts de tirs, la mer, etc. 

Suppléments

Vous trouverez ici les documents et liens relatifs à ce projet, si vous voulez plus de détails.

Game Concept Document

Partie
Rendus

Partie
Modélisation

bottom of page