Alka est un projet réalisé par l'UQAC, en collaboration avec l'école NAD UQAC et l'Université de Montréal. Alka est un jeu de tir coopératif à la première personne, programmé en C++ dans le moteur de jeu Unreal Engine. J'ai été invité dans ce projet par mon professeur et lors de la production, j'ai occupé le rôle de programmeur réseau, Gameplay et UI. Le projet a été terminé le 28 avril 2023.
À l'automne 2022, j'ai été invité à rejoindre le projet. Alka était déjà en production depuis un an, donc il y avait déjà un prototype sur lequel se baser pour continuer la production. Après plusieurs rencontres d'explication du projet, nous avons entamé la préproduction afin d'ajouter du contenu au jeu durant la session d'hiver 2023.
Notre tâche au départ consistait surtout à se familiariser avec le code du prototype et de comprendre l'interaction réseau et la réplication pour pouvoir ensuite rajouter du contenu. Nous avons planifié le contenu que nous souhaitions rajouter durant la préproduction, soit un système de revive pour les joueurs, une monnaie pour acheter des améliorations, des optimisations sur les intelligences artificielles et un systèmes d'habiletés.
De mon côté, j'ai commencé par programmer un système permettant de ressusciter un joueur allié. Ensuite, j'ai programmé une interface pour "l'Alchemy Lab", l'endroit où le joueur pourra acheter des améliorations et revivre ses coéquipiers. Finalement, j'ai programmé un système d'habiletés génériques permettant aux joueurs de s'entraider avec des buffs temporaires. Le tout est répliqué et fonctionnel en ligne.
Notre mandat pour la production était d'ajouter un nouveau niveau de jeu, d'étendre le système d'habiletés pour l'intégrer au gameplay et d'ajouter un nouveau type d'ennemi: le tank.
Au début de la production, j'ai continué mon travail entamé en préproduction sur l'Alchemy Lab. J'ai dû rendre le système de résurrection beaucoup plus robuste, et supporter différents cas problématiques rencontrés en testant le jeu. J'ai ensuite commencé le travail sur les habiletés que le joueur peut acheter pour améliorer ses capacités. Premièrement, il y a le LAN Fusion, qui augmente les dégâts du joueur et de ses amis proches pendant un certain temps:
On a ensuite le Sonic Boost, qui augmente la vitesse du joueur:
Et en dernier on a le Void Magazine, qui donne une infinité de munitions au joueur pendant un certain temps:
Une fois que ces améliorations ont été programmées, j'ai programmé un système pour acheter différentes armes dans l'Alchemy Lab. Le tout étant modulaire et Data-Driven, il est facile pour un designer d'ajouter de nouvelles armes sans avoir besoin de programmer quoi que ce soit:
Maintenant que les designers pouvaient faire les nouvelles armes, j'ai du temps pour travailler sur le code legacy. Il y avait beaucoup d'irritants dans le code de l'ancienne équipe, et certaines parties du code ne fonctionnaient juste pas (comme l'indicateur de dégâts), donc j'ai passé environ 3 semaines à nettoyer le plus possible le code legacy tout en rendant le projet au complet plus robuste et efficace. Au final, j'ai modifié presque tous les systèmes du jeu, et réglé plusieurs bugs au passage. Cette initiative a été très appréciée des autres programmeurs, qui étaient parfois bloqués par la complexité inutile du code existant, et nous a permis d'améliorer notre vélocité.
Une fois le code legacy nettoyé, les artistes ont livré les éléments graphiques pour l'interface de l'Alchemy Lab, donc je me suis mis au boulot de construire l'interface dans Unreal Engine:
Finalement, vers la fin du projet, les musiciens de l'UdeM nous ont rejoint pour faire de la musique et des effets sonores. Je les ai donc beaucoup aidés à implémenter les sons dans le projet. C'était ma première expérience avec le moteur sonore Wwise et j'ai beaucoup appris sur son fonctionnement.
Durant les dernières semaines, nous avons fait le plus de polish possible, et nous avons finalement réussi à terminer Alka 2023. Nous sommes tous très fiers du résultat final et j'ai appris plein de nouveaux trucs en réalisant le projet.
Programmer un jeu Online
Je n'ai jamais programmé de jeu multijoueur en ligne. Sachant que tous les aspects du développement de jeux sont plus difficiles en réseau, il a été un très bon défi pour moi d'apprendre comment faire et de comprendre la logique et la structure derrière la création d'un jeu réseau. Heureusement, j'ai suivi un cours à ce sujet, ce qui m'a beaucoup aidé. J'ai appris comment faire du code en réseau et toutes les nouvelles difficultés que l'internet amène dans un projet de jeu comme celui-ci.
Collaboration inter-universitaire
Alka est un jeu développé en collaboration à 3 universités. Cette collaboration amène son lot de défis, tels que la distance physique (5 heures de route entre Montréal et Saguenay) et la communication. En effet, Il a fallu apprendre à communiquer efficacement et utiliser des outils de travail d'équipe comme Microsoft Teams pour assurer une bonne cohésion au sein de la grande équipe que nous formons. En somme, je crois que la communication a été un de nos plus grands points forts dans le projet.
Travailler avec du code legacy
Il est toujours plus facile de partir d'un projet vide que de commencer avec du code déjà écrit par d'autres, qui semble très complexe au départ. Comprendre le code déjà en place à un niveau suffisant pour être capable de faire des modifications à celui-ci sans tout briser a été un grand défi pour moi. Je suis fier d'avoir réussi à comprendre le code et je connais maintenant le code du projet comme le fond de ma poche! J'ai beaucoup appris sur la façon de naviguer dans du code inconnu pour en apprendre son utilité rapidement, ce qui est une compétence très utile que je suis content d'avoir acquis.
Professeurs
Programmeurs (DIM)
|
Artistes (NAD)
Musiciens (UdeM)
Yannick Francillette
Kevin Lavigne-Bourque
Pierre Tousignant
Thomas Bergeron
Minh-Quan Bui
Ann-Laurie Lapointe
Patrick McRea-Desjardins
Pierre-Jean Morel
Hugo Babin
Laurence Cloutier
Karîm Désir
Vincent Dupéron
Félix Lemonde-Champagne
William Van Herck
Evan Burman
David Caron-Proulx
Eliazer Kramer
Frédérique Le Duc-Moreau
Antoine Lussier
Rémi Sève