Statut: Terminé
Contexte: Cours universitaire de premier cycle
Festicare est un jeu sérieux développé dans le cadre du cours 8GIF225 (Atelier de production de jeu vidéo I) à l’université du Québec à Chicoutimi (UQAC). Le but du projet était de développer un jeu qui permet de sensibiliser aux effets de la consommation de drogues dans l’accord avec le slogan du GRIP “si tu choisis de consommer, choisis aussi de t’informer”. Il s’adresse donc aux jeunes adultes susceptibles de consommer de la drogue, et ce, principalement dans des festivals.
Le joueur incarne un intervenant du groupe “Festicare” (représentant des organismes tels que le GRIP) au cours d’un festival. Des festivaliers viennent voir le joueur pour obtenir des renseignements ou faire tester des substances. Le joueur dispose donc de différentes stations permettant de répondre aux besoins des festivaliers. Par exemple, une station permettant de tester un échantillon que le joueur doit ensuite identifier à l'aide des connaissances acquises en jeu. Il doit aussi gérer son temps efficacement pour éviter que les festivaliers s’impatientent dans l’optique d’obtenir le meilleur score possible.
Moteur: Unreal Engine 4.27
Langage: C++ (utilisation de Blueprint pour le level design et les interfaces utilisateur)
Durée: Total de 20 semaines (2 semaines de prototypage, 3 semaines de développement pour une tranche verticale et 15 semaines pour la version finale)
Équipe: 4 programmeurs et 9 artistes pour le prototype et la tranche verticale, 3 programmeurs et 9 artistes visuels et 5 artistes sonores pour la version finale
Autres contraintes:
Collaboration à distance entre les programmeurs (UQAC, Saguenay) et les artistes (NAD-UQAC, Montréal et UdeM, Montréal)
Taille du build final ne dépassant pas 1 Go
J’ai participé à l’idéation pour intégrer le test de connaissance tout en se différenciant d’un simple quizz. Le principal défi ici fût d’intégrer l’apprentissage sur les drogues et leurs effets sans en donner un point de vue négatif et en s’assurant que le jeu pouvait avoir un gameplay intéressant. Il fallait s'éloigner du format quizz classique et facilement ennuyant afin de captiver le joueur et d'avoir un impact positif. Toutefois, l'information contenue dans le jeu se devait d'être véridique et neutre pour ne pas nuire à la mission d'informer ni repousser de potentiels joueurs auxquels le jeu s'adresse. Cela a permis de développer mes compétences en conception de jeu.
J'ai effectué beaucoup de gestion d’équipe en mode agile dans un contexte qui m'a poussé à réaliser à la fois des tâches de scrum master, de product owner et de développeur. Le fait d’être en distanciel avec toute l’équipe d’artistes était un obstacle dans la gestion d’équipe qui a toutefois apporté le développement de compétences spécifiques à la situation. Cela m'a permis de développer mes compétences en leadership, en maîtrise de la méthode agile ainsi qu’en gestion. Cela m'a donne aussi une bonne maîtrise des outils de gestion utilisés tels que MS Planner, MS Teams, tableau Kanban, Perforce, etc.
J’ai développé le système permettant aux joueurs d’interagir avec les différentes stations indispensables au gameplay. Lorsque le joueur se déplace, les objets avec lesquels il peut interagir sont détectés puis la position et l'orientation du joueur sont analysés afin de savoir quel objet est ciblé par le joueur. L’objet ciblé est alors mis en surbrillance. Un objet sélectionné réagit aux entrées du joueur afin d’effectuer l'action qui y est associée. Par exemple, cela peut permettre de récupérer et poser un objet ou encore à rediriger l'interaction vers un autre objet dans le monde de jeu. Le développement de ce système m’a surtout fait réfléchir à la meilleure manière de l’implémenter pour avoir un système facilement étendable et polyvalent, pratiquant ainsi ma capacité de prévision ainsi que mes notions de programmation orienté objet.
J’ai développé un système d’inventaire simple permettant de tenir un seul objet à la fois et de le positionner dans le monde de jeu afin qu’il soit logiquement placé par rapport à son porteur. Par exemple, si un joueur possède un objet, il sera placé dans ses mains et pourra être animé avec le reste du joueur, mais si une table possède un objet, il sera placé sur sa surface. Ce système est aussi au coeur du jeu et permet de compléter adéquatement des demandes des festivaliers. En effet, il possède des fonctions pour s’accorder avec un système d’objectifs ayant été développé par quelqu’un d’autre. Cela permet entre autres de vérifier si un objet répond à certains critères avant de le détruire pour compléter l’objectif ou encore à échanger deux objets. Bien que je n’aie pas eu de défi considérable pour cette tâche, elle m’a permis de développer ma compréhension des composants sur Unreal Engine afin d'être en mesure de développer des systèmes réutilisables et polyvalents.
Ayant développé le système d’interaction et le système d’inventaire, j’ai aussi développé trois stations au coeur du gameplay.
La première, la station “boîte à brochure” permet de sélectionner un type de brochure à partir d’un widget (composant d'interface utilisateur). Les types de brochure présents sont basés sur les informations contenues dans le mode de jeu afin de correspondre automatiquement aux demandes possibles par les festivaliers. Pour ajouter du défi, l’ordre des brochures n’est jamais le même. De plus, pour éviter que le joueur soit malchanceux et doive chercher longtemps la brochure qui correspond à ce qu’il cherche, l’aléatoire est contrôlé de sorte à toujours lui donner l’ensemble des types de brochures possibles avant de retourner au premier type rencontré.
La seconde, la station “table” sert simplement à déposer un objet pour le reprendre plus tard. Cette station est une simple combinaison du système d’interaction et du système d’inventaire permettant donc d’interragir pour déposer ou échanger son objet et de voir l’objet posé sur la table.
La troisième, la station "écran" permet au joueur de visualiser l'information sur les différentes substances afin de les apprendre et d'utiliser ces connaissances dans le jeu pour les acquérir et ensuite pouvoir les transposer dans la vraie vie.
Étant donnée la manière dont les systèmes ont été construits, aucune des implémentations n'a représenté un véritable défi. Le principal a été d'organiser le fonctionnalités dès le début afin de pouvoir facilement construire à partir des morceaux créés préalablement. Comme tout s'est bien passé, je suis convaincu que le développement de ce jeu m'a permis de bien comprendre comment organiser des fonctionnalités de manière efficace lors de la réalisation d'un jeu, plus spécifiquement lors de l'utilisation du moteur Unreal Engine.
J’ai participé à l’élaboration d’un système de tutoriel flexible basé sur les objectifs que nous avions utilisé pour définir les commandes des festivaliers. Ce système permet la déclaration d’un tutoriel en arbre (un point d'entrée et une progression linéaire pouvant se diviser en plusieurs branches) basé sur des objectifs de toutes sortes. Mon travail sur cette fonctionnalité a principalement été dans la conception et la programmation des objectifs. En effet, nous avons fait face à un bon problème lorsque nous avons commencé ce système désirant obtenir un système polyvalent et puissant, mais aussi facile à utiliser pour quelqu'un qui n'est pas programmeur. De plus, il fallait le développer rapidement pour avoir le temps de l'intégrer et de tester avec suffisamment de gens pour bien le peaufiner. En analysant le problème et le code que nous avions déjà, j’en ai convenu qu’utiliser notre système d’objectifs et définir de nouveaux objectifs adaptés au tutoriel serait la meilleure solution. Ainsi, j’ai créé les différents objectifs par héritage en adaptant aux différents besoins (interaction, obtention d’un objet, interaction avec un widget, etc.). Bien que le développement de ce système ne m’ait rien appris de nouveau, il m’a permis d’améliorer mes compétences de résolution de problème.
Exemple de déclaration de tutoriel via Blueprint
J'ai élaboré un système permettant de facilement configurer les différents niveaux. Ce système permet entre autres de définir quelles substances sont présentes dans chacun des niveaux afin de faire correspondre les commandes et les stations automatiquement. Il permet également de configurer quels festivaliers sont disponibles dans le niveau. Cela a permis de créer des variantes de chaque personnage pour le niveau hivernal afin de les faire correspondre à l'ambiance générale du niveau comme on peut l'observer ci-dessous. Aucun défi n'a été rencontré pendant cette partie, mais l'implémentation m'a permis de mieux comprendre l'utilité du framework Unreal avec la séparation entre le GameMode, le GameState et le PlayerState.
Afin de faire correspondre la difficulté des actions avec la récompense associée, j'ai créer un système permettant d'associer un score spécifique pour chaque type d'objectif automatiquement. Le score est ensuite affiché au joueur de manière claire avec tous les détails pour lui faire comprendre comment il peut s'améliorer. Le principal défi ici a été de réfléchir aux différents besoins du système. Comme chaque niveau peut être configuré de manière à rendre différentes actions plus difficiles, le score est associé par niveau ce qui permet une grande flexibilité aux concepteurs de jeu.
Le projet n'ayant pas été publié au grand public encore, aucun impact concret n’a pu être mesuré jusqu’à présent, mais la majorité des retours reçus ont été positifs. Si le projet est suffisamment apprécié par notre cliente dans le cadre du cours, il pourrait être utilisé par le GRIP dans ses campagnes de prévention.
Selon l'intérêt de l'équipe, une nouvelle phase de développement pourrait être entreprise afin d'ajouter d’autres objets permettant d’assister les festivaliers dans des situations que le joueur devra deviner à travers l’état d’un festivalier (déshydratation, malaise, etc.) comme des bouteilles d’eau à distribuer ou des lits sur lesquels apporter les festivaliers qui en ont besoin. Dans ces systèmes, je pourrai donc m’occuper de concevoir une manière de représenter l’état du festivalier ainsi que de programmer le transport des festivaliers vers les lits. De plus, un mode de jeu sans fin pourrait être ajouté assez facilement grâce aux différents systèmes en place. L'avenir du projet dépendra donc de l'intérêt de l'équipe et des retours reçus par ceux qui testeront le jeu dans les prochains temps.