EN

À propos / ContactAbout / Contact

David Dias

Programmeur de jeux vidéo Video game programmer

V

Mes jeux My games

Tales of War est un jeu multijoueur médiéval où le but est de capturer tous les drapeaux ennemis pour gagner. Avec 40+ personnages au choix pour aller au combat. En production depuis février 2020: je n'ai pas travaillé sur ce projet pendant mes travaux à l'université (2021-2023). Tales of War is a medieval multiplayer game where the goal is to capture all enemy flags to win. With 40+ characters to choose to go into battle. In production since February 2020: I did not work on this project during university (2021-2023).

VoirSee
SteamSteam

Le projet NovaScience se compose de trois jeux VR pour les étudiants. Il s'agit de jeux de simulation qui permettent aux élèves d'apprendre en se plongeant dans l'action des matières qu'ils ont apprises à l'école. Il y a un jeu de biologie dans une cellule, de chimie dans une machine à voyager dans le temps et physique dans dans un vaisseau spatial. Project NovaScience consists of three VR games for students. These are simulator games that allow students to learn by immersing themselves in the action of the subjects they have learned in school. There's a game of biology in a cell, chemistry in a time machine and physics in a spaceship.

VoirSee

The Obscura Experiment est un jeu d'horreur auquel on joue une scientifique qui doit s'enfuir d'un monstre matière noire. Pour éviter la matière noire, il faut fermer des portes ou activer de l'énergie pour distraire le monstre. The Obscura Experiment is a horror game in which we play as a scientist who must escape from a dark matter monster. To avoid the dark matter, you must close doors or activate energy to distract the monster.

VoirSee
SteamSteam

Zolik est un jeu développé avec la restriction d'avoir le gameplay de Sonic et le thème d'Indiana Jones. Donc, rapidité et précaution. Zolik is a game developed with the restriction of having Sonic gameplay and Indiana Jones theme. So speed and caution.

VoirSee
TéléchargerDownload

BackStealth VR est un jeu d'infiltration multijoueur en ligne où l'infiltrateur joue en VR, les gardes jouent sur l'ordinateur, et l'assistant de l'infiltrateur peut jouer sur un ordinateur ou un téléphone. L'assistant aide l'infiltrateur en disant où sont les gardes et les diamants. L'infiltrateur doit sortir avec un diamant pour gagner. BackStealth VR is an online multiplayer stealth game where the infiltrator plays in VR, the guards play on the computer, and the infiltrator's assistant can play on a computer or a phone. The assistant helps the infiltrator by saying where the guards and the diamonds are. The infiltrator must leave with a diamond to win.

VoirSee
Jouer/Téléch...Play

Jeu de tir, 1 vs 1, multijoueur 2D avec plein d'habiletés. Les joueurs peuvent choisir entre 4 différents personnages pour combattre. Shooter, 1 vs 1, 2D multiplayer with lots of abilities. Players can choose between 4 different characters to fight.

VoirSee
JouerPlay

Un tower defense où on peut entrer dans les tours et en prendre contrôle. 4 niveaux, 4 tours et 4 types d'ennemis. Le joueur peut améliorer ses tours pendant et avant une partie. A tower defense where you can enter towers and take control of them. 4 levels, 4 towers and 4 types of enemies. The player can improve his towers during and before a game.

VoirSee
JouerPlay

Autres jeuxOther games

AfficherExpand

Un Game Jam fait en 24h en mai 2022. En équipe de 3, j'ai fait le rendering, le modelage et du soutien constant en programmation pour mes deux coéquipiers. Fait avec Unity. C'est mon premier et seul projet où mon rôle était Artiste. A Game Jam done in 24 hours in May 2022. In a team of 3, I did the rendering, modeling and continuous programming support for my two teammates. Made with Unity. This is my first and only project where my role was Artist.

VoirSee
TéléchargerDownload

Jeu d'horreur où l’on joue le rôle d'un enfant qui a perdu ses amis dans une maison abandonnée. Il va devoir les retrouver à l'intérieur de la maison. Les enfants, lorsqu'ils ont peur dans le noir, ont tendance à imaginer que tout est un monstre. Donc, le but du jeu est de retrouver ses amis et d'éviter de regarder les meubles sous peur de devoir les affronter. Horror game where you play as a kid who has lost his friends in an abandoned house. He will have to find them inside the house. Kids, when scared in the dark, tend to imagine that everything is a monster. So the goal is to find your friends and avoid looking at furnitures or else you'll have to confront them.

VoirSee
TéléchargerDownload

Un jeu Rail shooter où il faut tirer sur des cibles, des mineraux et des chauves-souris pour avoir le plus grand score. Avec des graphismes à la Game Boy. A Rail shooter game where you have to shoot targets, minerals and bats to get the highest score. With Game Boy-like graphics.

VoirSee
TéléchargerDownload

Un jeu de tir de 2 à 4 joueurs, multijoueur, 2D, avec des jetpacks. Les joueurs peuvent choisir entre 10 différents personnages pour combattre. A 2-4 player game, multiplayer, 2D shooter with jetpacks. Players can choose between 10 different characters to fight.

VoirSee
JouerPlay

C'est un petit RPG avec du combat très simple, un petit terrain et 2 magasins. Le joueur a un inventaire et des statistiques sur son personnage. It's a small RPG with very simple combat, a small terrain and 2 shops. The player has an inventory and statistics on his character.

VoirSee
TéléchargerDownload

Un jeu où le but n’est que de trouver les monstres et les tuer. À chaque vague les monstres sont plus nombreux et plus forts. Il y a un magasin pour acheter des potions et de meilleures armes. Fait en hiver 2019 avec Unity et en équipe de 2. J’ai programmé le personnage, le magasin, les ennemis et assemblé la moitié du terrain (des prefabs d'Unity Asset Store). A game where the objective is simply to find the monsters and kill them. With each wave the number of monsters is increased and they become stronger. There is a store to buy potions and better weapons. Made in winter 2019 with Unity and in a team of 2. I programmed the character, the store, the enemies and assembled half of the terrain (prefabs from Unity Asset Store).

VoirSee
TéléchargerDownload

Un jeu stratégique à tour par tour multijoueur local. Le joueur peut contrôler ses trois soldats et attaquer ceux de l’autre joueur avec une des 4 armes et une quantité d'action limitée. Fait en hiver 2018 avec Unity 2D, sans équipe. C'est mon tout premier jeu. J'ai tout fait sauf l'audio et les sprites qui ont été faits par un ami qui voulait m’aider. A local multiplayer turn-based strategy game. The player can control his 3 soldiers and attack those of the other player with one of the 4 weapons and a limited amount of action. Made in winters 2018 with Unity 2D, without a team. This is my very first game. I did everything except the audio and the sprites which were made by a friend who wanted to help me.

VoirSee
JouerPlay

Autres projetsOther projects

AfficherExpand

Projets 3D3D projects

AfficherExpand

Hiver 2020. C'est les modèles 3Ds de mon jeu SmolRPG. J'ai fait tous les modèles 3Ds avant de programmer le jeu. C'était la première fois que j'essayai un style cute et low poly. Fait avec Maya. Winters 2020. This is the 3D models from my game: SmolRPG. I made all the 3D models before programming the game. It was the first time I tried a cute and low poly style. Made with Maya.

VoirSee

Automne 2019. Une scène 3D avec un personnage de mon jeu Elementaris. Je n'ai pas fait la tourelle et le personnage. J'ai fait le décor et la balle qui perce la glace. Fait avec Maya. Fall 2019. A 3D scene with a character from my Elementaris game. I didn't make the turret and the character. I made the scenery and the ball that pierces the ice. Made with Maya.

VoirSee

Hiver 2019. Un personnage créé en cours de design par moi et mon équipe. J'ai modelé le personnage selon le croquis que mon ami a fait. Fait avec Maya. Winters 2019. A character created in design class by me and my team. I modeled the character according to the sketch my friend made. Made with Maya.

VoirSee

Automne 2018. En cours de 3D, je devais modeler un moyen de transport. J'ai modelé un sous-marin train avec l'aspect d'un ornithorynque. Fait avec Maya. Fall 2018. In 3D class, I had to model a vehicle. I modeled a train submarine with the appearance of a platypus. Made with Maya.

VoirSee

Automne 2018. Mon tout premier TP en cours de 3D. Le travail était de modeler un objet. Comme premier TP, je trouve que c'est très bon. Fait avec Maya. Fall 2018. My very first 3D project. I had to model an object. As a first TP, I think it's very good. Made with Maya.

VoirSee

Projets vidéosVideo projects

AfficherExpand

Hiver 2019. Une animatique de mon cours de scénarisation. J'ai créé l'histoire, et fait le montage. Mon ami a fait les dessins. Les plans ont été faits à deux. Winters 2019. An animatic from my scenarisation class. I created the story, and did the editing. My friend made the drawings. The plans were made together.

VoirSee

Automne 2018. Une bande-annonce pour un faux film. Fait en équipe de 2. J'ai fait le montage et mon ami a filmé. L'histoire et les plans ont été faits à deux. Fall 2018. A trailer for a fake movie. Made with a team of 2. I did the editing and my friend filmed. The story and the shots were made together.

VoirSee

Automne 2018. Cours de vidéo. Fait avec mon ami. Le but était de choisir un sujet et à l'aide d'une caméra, faire plusieurs plans/axes différents qui étaient listés dans le devis. Fall 2018. Video class. Made with my friend. The goal was to choose a subject and with a camera, make several different shots that were listed in the things to do.

VoirSee

Automne 2017. TP d'animation où il fallait créer l'intro d'un jeu vidéo juste avant le menu titre. Je me suis inspiré de l'intro d'Advance Wars 2 Black Hole Rising. Fall 2017. Animation project where I had to create the intro of a video game just before the title menu. I was inspired by the intro of Advance Wars 2 Black Hole Rising.

VoirSee

Projets graphiquesGraphic projects

AfficherExpand

Une fausse couverture de jeu que j'ai fait pour fun. A fake game cover I made for fun.

VoirSee

Un personnage que j'ai modifié pour représenter un personnage d'une partie de GURPS (c'est comme D&D). Donc, j'ai ajouté le nom du personnage, un sniper et remplacer son pistolet par un toutou. A character that I modified to represent a character from a game of GURPS (it's like D&D). So, I added the character's name, a sniper, and replaced her gun with a plushie.

VoirSee

Automne 2017. J'ai pris une photo d'une rivière au Portugal et j'ai décidé de le modifier en changeant le temps de la journée et ajouter Fox et son vaisseau dans l'image. Fall 2017. I took a photo of a river in Portugal and decided to edit it by changing the time of the day and by adding Fox and his ship into the image.

VoirSee

MusiquesMusics

AfficherExpand

Discovery of Gravitation sur l'accordéon. Ça vient du jeu Gravity Rush, mon jeu préféré. Discovery of Gravitation on the accordion. It's from Gravity Rush, my favorite game.

VoirSee

LEVEL 5-judgelight sur l'accordéon. Ça vient de l'anime To Aru Kagaku no Railgun. LEVEL 5-judgelight on the accordion. It's from the anime To Aru Kagaku no Railgun.

VoirSee

Lobby de Pokémon Unite sur l'accordéon. Pokémon Unite Lobby on the accordion.

VoirSee

L'ending de l'anime Erased sur l'accordéon. The ending of the anime Erased on the accordion.

VoirSee

Snowbelle City sur l'accordéon. Ça vient du jeu Pokémon X Y. Snowbelle City on the accordion. It's from Pokemon X Y.

VoirSee

Twilight of the Gods sur l'accordéon. Ça vient du jeu Fire Emblem Gaiden et Fire Emblem Shadow of Valentia. Twilight of the Gods on the accordion. It's from Fire Emblem Gaiden and Fire Emblem Shadow of Valentia.

VoirSee

Projet NovaScience

Contrat chez NovaScience Contract with NovaScience

Fait avec Unity en 2022. Je suis programmeur/intégrateur dans une équipe constituée d’un artiste et d’un designer. Made with Unity in 2022. I am a programmer/integrator in a team made up of an artist and a designer.

Téléportation et grab Teleportation and grab

J'ai programmé la téléportation et le grab manuellement, car le code qu'Unity offre de base vient avec trop de bugs. Tout est fait avec des raycasts. I manually programmed the teleport and the grab, because the code Unity provides comes with too many bugs. Everything is done with raycasts.

Boutons Buttons

Les boutons fonctionnent avec des raycasts et sont réutilisables et ajustables dans l'inspecteur d'Unity. Buttons work with raycasts and are reusable and adjustable in Unity's inspector.

Système de placement/vérification Placement/verification system

J'ai programmé une architecture réutilisable qui détecte les placements des objets snapables et vérifie si chacun de ces objets est placé aux bons endroits. Si la réponse est correcte le script joue un Unity Event qui permet de continuer la programmation en dehor du script. Tout est fait avec des raycasts. I programmed a reusable architecture which detects the placements of snapable objects and checks if each of these objects are placed in the right places. If the answer is correct, the script plays a Unity Event which allows me to continue programming outside the script. Detections are done with raycasts.

Outils Tools

J'ai programmé plusieurs outils pour faciliter la production pour les futurs projets VR NovaScience: I programmed several tools to facilitate the production for future NovaScience VR projects:

Équipe Team

David Dias - Programmeur/Intégrateur David Dias - Programmer/Integrator

Philippe Beauchemin - Designer Philippe Beauchemin - Designer

Olivier - Artiste Olivier - Artist

The Obscura Experiment

Projet final à l'UQAT Final project at UQAT

En tant que directeur technique de 6 programmeurs et d'une équipe de 26 élèves, j'ai review et planifié le code que les programmeurs devaient faire. La confiance de mes aptitudes en programmations était importante pour tout le monde de mon équipe, car il fallait que je prédise le temps, la qualité et la quantité de produits que je pouvais livrer. Pour cela, on a toujours fait des scrum meetings a chaque début de journée. As technical director of 6 programmers and a team of 26 students, I reviewed and planned the code that the programmers had to do. Confidence in my programming skills was important to everyone on my team, because I had to predict time, quality and the quantity of products I could deliver. For this, we always did scrum meetings at the start of each day.

Des réunions hebdomadaires avec les autres directeurs étaient impératives pour communiquer de nos avancements. Préparer les taches et organiser le Notion était le plus important, car c'est là que tout le monde accède pour voir les tâches à venir. Pour finir, pendant toute la production du projet, j’étais toujours le plus à jour de tout ce que mes programmeurs faisaient. J’était toujours en voice chat sur Discord, toujours prêt à aider et répondre aux questions pendant que je multitaskai. Weekly meetings with other directors were imperative to communicate our progress. Preparing the tasks and organizing the Notion was the most important, because its is where everyone went to see the upcoming tasks. Finally, throughout the production of the project, I was always the most up to date with everything my programmers did. I was always in voice chat on Discord, always ready to help and answer questions while multitasking.

Je m'occupais aussi des dépôts, les Steamworks Settings et toute programmation en lien avec Steam, car j'avais déjà des années d'expérience avec Steamworks. J'ai programmé/intégré tout les sons, car j'était en contact constant avec le lead sonore et tout mes programmeurs avaient les mains pleines. I also took care of the repositories, the Steamworks Settings and all programming related to Steam, because I already had years of experience with Steamworks. I coded/integrated all the sounds, because I was always in contact with the sound leader and because all my programmers were already full.

Gameplay Gameplay

Équipe Team

David Dias - Directeur Technique, Lead Programmeur, intégrateur son, support technique Steamworks et programmeur Steam David Dias - Technical Director, Lead Programmer, sound integrator, Steamworks technical support and Steam programmer


Adib Benchekroun - Programmeur UI Adib Benchekroun - UI Programmer

Antoine Turgeon - Programmeur de jouabilité, UI Programmer Antoine Turgeon - Gameplay Programmer, UI Programmer

Alain Pham - Programmeur de jouabilité, UI Programmer Alain Pham - Gameplay Programmer, UI Programmer

Antonin Doucet - Lead Programmeur Antonin Doucet - Lead Programmer

Isaac Roy - Programmeur AI, Programmeur de jouabilité Isaac Roy - AI Programmer, Gameplay Programmer

Jean-Philippe Filiatrault - Programmeur AI Jean-Philippe Filiatrault - AI Programmer


Maude Martel - Productrice Maude Martel - Producer

Marianne Champagne-Hamel - Directrice artistique Marianne Champagne-Hamel - Art Director

Charles Gaudet - Directeur Sonore et Creatif Charles Gaudet - Creative and Audio Director

Child's Mind

Cours: Prototypage et expérimentation Class: Prototyping and Experimentation

Fait avec Unity en automne 2021, à l'UQAT en équipe de 3. Mon rôle était programmeur, artiste VFX et SFX. J'ai fait le rendering, les interfaces, les qte (quick time event), les sons et les animations. Made with Unity in fall 2021 in a team of 3. My role was programmer, SFX and VFX artist. I did the rendering, the interfaces, the qte (quick time event), the sound effects and the animations.

VFX, QTE et Jumpscare VFX, QTE and Jumpscare

Quand le joueur regarde un monstre (un meuble), la saturation, le grain, le fov, l'exposure et le brouillard change. Ensuite, un qte apparait (le qte simule la respiration) et il faut cliquer au bon moment plusieurs fois jusqu'à tant que le personnage se calme. Si le joueur rate, le meuble qui ressemble à un monstre saute vers la caméra. When the player looks at a monster (a furniture), saturation, grain, fov, exposure and the fog changes. Then, a qte appears (the qte simulates breathing) and you have to click at the right time, several times, until the character calms down. If the player misses, the furniture that looks like a monster jumps towards the camera.

Déclencheurs d'événements Event Triggers

J'ai programmé un déclencheur d'événement qui était principalement utilisé pour les déclencher des sons, mais il fonctionne aussi pour toutes les actions que le joueur peut faire dans l'environnement comme prendre une clé, ouvrir une porte, quitter le tutoriel, etc. Il y a des paramètres pour quand le déclencheur peut être réutilisé, des fonctions ajustables et la possibilité de glisser la quantité de sons voulus: les sons sont aléatoires s'il y en a plus qu'un dans un déclencheur. I programmed an event trigger which was mainly used to trigger sound effects, but it also works for all the actions the player can do in the environment like taking a key, opening a door, exiting the tutorial, etc. There are settings for when the trigger can be reused, adjustable functions and the possibility of dragging the quantity of desired sounds: the sounds are random if there is more than one in a trigger.

Gameplay Gameplay

Équipe Team

David Dias - Programmeur, artiste VFX et SFX David Dias - Programmer, SFX and VFX artist

Jean-Philippe Filiatrault - Programmeur Jean-Philippe Filiatrault - Programmer

Sodana Yen - Directeur artistique, Modelage 3D Sodana Yen - Art Director, 3D Modeling

Zolik

Cours: Projet Commun Class: Common Project

Fait avec Unreal Engine 4 en hiver 2022 en équipe de 10. Mon rôle était programmeur des caméras et des slopes/loops. Made with Unreal Engine 4 in winter 2022 in a team of 10. My role was camera and slope/loop programmer.

Slopes, caméra contrôlable et caméra de hauteur Slopes, controllable camera and height camera

Dans ce gif, on peut voir que j'ai programmé les physiques de slope/loops. Le personnage perd sa gravité de base, soritente vers le point de collision et gagne de la gravité vers cette direction. On peut voir que quand Zolik monte en hauteur très rapidement, la caméra détecte cette vélocité et anticipe sa position pour permettre au joueur de voir où il va. Ce code fonctionne aussi pour quand Zolik tombe très rapidement. Pour terminer, à la fin du gif, comme dans Sonic, on peut regarder en haut et en bas pour voir les chemins possibles du niveau. Aussi, quand on saute, la caméra ne se décolle pas du sol. In this gif, we can see that I programmed the slope/loops physics. The character loses its base gravity, rotates towards the point of collision and gains gravity towards that direction. We can see that when Zolik moves in height very quickly, the camera detects this velocity and anticipates its position to allow the player to see where they're going. This code also works for when Zolik falls very quickly. Finally, at the end of the gif, just like in Sonic, we can look up and down to see the possible paths of the level. Also, when jumping, the camera doesn't detach from the ground.

Loop, caméra cinématique et caméra de vitesse Loop, cinematic camera and speed camera

Dans ce gif, on peut voir que j'ai programmé des caméras cinématiques comme dans Sonic Heroes: un point fixe et regarde la position du joueur. Le code des loops sont les mêmes que les slopes du gif précédent. Ensuite, quand le joueur va trop vite, la caméra dezoom, pour permettre au joueur de voir où il va. In this gif, we can see that I programmed cinematic cameras like in Sonic Heroes: a fixed point that looks at the position of the player. The code for the loops are the same as the slopes in the previous gif. Then, when the player is going too fast, the camera zooms out, to allow the player to see where he is going.

Gameplay Gameplay

Équipe Team

David Dias - Programmation des caméras, slopes et loops David Dias - Camera, slopes and loops programmer

Alexandre Séguin - Desginer de niveau Alexandre Séguin - Level Designer

Antoine Kwey-Du Sablon - VFX, Art environement Antoine Kwey-Du Sablon - VFX, Environment Art

Antoine Turgeon - Programmation des pièges et des pouvoirs Antoine Turgeon - traps and powers programmer

Isaac Roy - Programmation du character controller et des pouvoirs Isaac Roy - Character controller and powers programmer

Kimberly Victoria - Éclairage Kimberly Victoria - Lighting

Renée-Claude Séguin - Modelling du personnage Renée-Claude Séguin - Character modeling

Sofia Deshaies - Art environement Sofia Deshaies - Environment Art

Sophie Bauer - Rigging et Art environement Sophie Bauer - Rigging and Environment art

William Bordeleau - Props William Bordeleau - Props

BackStealth VR

Cours: Spécialisation: Ateliers Dirigés Class: Specialization: Directed Projects

Projet solo fait en 14 jours avec Unity et Photon PUN en automne 2021, à l'UQAT. Solo project made in 14 days with Unity and Photon PUN in fall 2021, at UQAT.

Character Controller Character Controller

Le character controller du joueur en VR doit permettre l'accroupissement, pouvoir se coucher et pouvoir jeter des coups d'oeils en inclinant son corps. Puisqu’il faut que le joueur puisse s'incliner, il faut que le pivot soit dans les pieds et que le corps s'oriente vers la tête. Mais il faut aussi savoir où le corps doit se positionner pour ensuite s'incliner. D'abord le corps ne s'incline que si le joueur s'éloigne de son corps et qu’il est debout. Ensuite, je mesure la hauteur de la tête par rapport au sol et détermine alors où les pieds devraient être situés pour que le corps n'entre pas dans la tête du joueur. The character controller of the VR player has to allow crouching, being able to lie down and being able to peek while tilting his body. Since the player must be able to tilt, the pivot must be in the feet and the body must be oriented towards the head. But we also need to know where the body should be positioned to then tilt. First the body only bows if the player steps away from their body and they are standing. Then I measure the height of the head from the ground and then decide where the feet should be located so that the body does not enter the player's head.

Pour prévenir la triche, si la tête du joueur entre dans un mur, il ne peut plus rien voir. La détection est faite avec une boule physicalisée (la tête visible par les autres joueurs) qui suit la vraie tête du joueur et il détecte la distance entre lui et la tête pour savoir si le joueur a traversé un mur/plafond ou pas. Si oui, la boule restera là où elle a colisioné et la tête du joueur devrait se rapprocher de cette position pour reprendre la vision. To prevent cheating, if the player's head enters a wall, he can no longer see anything. The detection is done with a physicalized ball (the head visible by other players) which follows the real head of the player and it detects the distance between him and the head to know if the player has crossed a wall/ceiling or not. If so, the ball will stay where it collided and the player's head will have to move closer to that position to regain vision.

Vision des joueurs Players' visions

L'infiltrateur (le joueur en VR) a une vision nocturne. Il peut voir partout: The infiltrator (the player in VR) has night vision. He can see everything:

Les gardes (le joueur sur l'ordinateur) ont une vision très limitée, car ce n'est pas un robot qui joue le garde, un joueur peut bouger la souris de façon très imprédictible et serait donc trop difficile pour les autres joueurs d'éviter le garde. The guards (the player on the computer) have very limited vision, because it's not an npc that plays the guard, a player can move the mouse very unpredictably and would therefore be too difficult for other players to avoid the guard.

L'assistant de l'infiltrateur a 5 visions: 4 caméras de 4 coins du terrain et une vue aérienne qui montre la vision et position des gardes, les diamants et l'infiltrateur. The infiltrator's assistant has 5 visions: 4 cameras from 4 corners of the map and an top down view which shows the vision and position of the guards, the diamonds and the infiltrator.

Pouvoirs Power-Ups

Les pouvoirs sont des objets placables pour les gardes. C'est une distraction, car le garde veut sortir de son poste pour avoir un pouvoir et un avantage, car le garde veut trouver l'infiltrateur plus facilement. Le premier est un mur: l'infiltrateur ne peut pas le traverser à moins qu'il frappe le mur trois fois pour le détruire. Frapper le mur fait du bruit. La caméra permet aux gardes d'avoir une deuxième vision. La vision nocturne n'est pas un objet placable: le garde gagne simplement la vision nocturne pendant 5 secondes. Le laser détecte l'infiltrateur s'il passe devant. La détection déclenche l'alerte qui ouvre toutes les lumières du terrain. Pour finir, la lumière se place dans le plafond et éclaircit un endroit. Powers are placeable items for guards. It's a distraction, because the guard wants to get out of his guarding spot to have power and its an advantage, because the guard wants to find the infiltrator more easily. The first one is a wall: the infiltrator cannot cross it unless he hits the wall three times to destroy it. Hitting the wall makes noise. The camera allows the guards to have a second vision. Night vision is not a placeable item: the guard simply gains night vision for 5 seconds. The laser detects the infiltrator if they pass by. The detection triggers the alert which opens all the lights in the field. Finally, the light is placed in the ceiling and lights a spot.

Gameplay Gameplay

Équipe Team

David Dias - J'ai tout fait sauf SFX et Musique David Dias - I did everything except SFX and Music

Archibald Ducher - Musique Archibald Ducher - Music

Rail-O-Vania

Game Jam fait maison avec mes amis Homemade Game Jam with my friends

Fait avec Unity en août 2021 en équipe de 3. Réalisé en un total de 24 heures. Mon rôle était chef d'équipe, programmeur, animateur et artiste VFX. Made with Unity in August 2021 in a team of 3. Completed in a total of 24 hours. My role was team leader, programmer, animator and VFX artist.

Railles, tirs, points Rails, Shoot, Points

Le wagon suit les raille en collisionant avec eux. A chaque colision avec une raille change la direction du wagon vers la prochaine raille. J'ai intégré la possibilité de changer la vitesse du wagon dépendament de quelle raille on touche. Le joueur peut tirer sur des cibles, des mineraux et des chauves-souris pour avoir des points. The minecart follows the rails by colliding with them. Each collision with a rail changes the direction of the minecart towards the next rail. I integrated the possibility of changing the speed of the minecart depending on which rail you touch. The player can shoot at targets, minerals and bats for points.

Animations et pont Animations and Bridge

Beaucoup d'animations ont un du rebonds pour simuler l’effet cartoon. Pour faire descendre le pont, il faut tirer sur le levier sinon le wagon va tomber dans la lave. Many animations have a bit of bounce to simulate the cartoon effect. To lower the bridge, you have to pull the lever otherwise the minecart will fall into the lava.

Gameplay Gameplay

Équipe Team

David Dias - Programmeur, artiste VFX et SFX David Dias - Programmer, SFX and VFX artist

Adib Benchekroun - Modelage 3D et design de niveau Adib Benchekroun - 3D Modeling and level designer

Frederick Poliquin - Musique et sons Frederick Poliquin - Music and SFX

Child's Mind

Cours: Prototypage et expérimentation Class: Prototyping and Experimentation

Fait avec Unity en automne 2021, à l'UQAT en équipe de 3. Mon rôle était programmeur, artiste VFX et SFX. J'ai fait le rendering, les interfaces, les qte (quick time event), les sons et les animations. Made with Unity in fall 2021 in a team of 3. My role was programmer, SFX and VFX artist. I did the rendering, the interfaces, the qte (quick time event), the sound effects and the animations.

VFX, QTE et Jumpscare VFX, QTE and Jumpscare

Quand le joueur regarde un monstre (un meuble), la saturation, le grain, le fov, l'exposure et le brouillard change. Ensuite, un qte apparait (le qte simule la respiration) et il faut cliquer au bon moment plusieurs fois jusqu'à tant que le personnage se calme. Si le joueur rate, le meuble qui ressemble à un monstre saute vers la caméra. When the player looks at a monster (a furniture), saturation, grain, fov, exposure and the fog changes. Then, a qte appears (the qte simulates breathing) and you have to click at the right time, several times, until the character calms down. If the player misses, the furniture that looks like a monster jumps towards the camera.

Déclencheurs d'événements Event Triggers

J'ai programmé un déclencheur d'événement qui était principalement utilisé pour les déclencher des sons, mais il fonctionne aussi pour toutes les actions que le joueur peut faire dans l'environnement comme prendre une clé, ouvrir une porte, quitter le tutoriel, etc. Il y a des paramètres pour quand le déclencheur peut être réutilisé, des fonctions ajustables et la possibilité de glisser la quantité de sons voulus: les sons sont aléatoires s'il y en a plus qu'un dans un déclencheur. I programmed an event trigger which was mainly used to trigger sound effects, but it also works for all the actions the player can do in the environment like taking a key, opening a door, exiting the tutorial, etc. There are settings for when the trigger can be reused, adjustable functions and the possibility of dragging the quantity of desired sounds: the sounds are random if there is more than one in a trigger.

Gameplay Gameplay

Équipe Team

David Dias - Programmeur, artiste VFX et SFX David Dias - Programmer, SFX and VFX artist

Jean-Philippe Filiatrault - Programmeur Jean-Philippe Filiatrault - Programmer

Sodana Yen - Directeur artistique, Modelage 3D Sodana Yen - Art Director, 3D Modeling

Warriors' Arena

Cours: Spécialisation: recherche dirigée Class: Specialization: directed research

Fait avec Unity et Photon PUN en automne 2021, à l'UQAT en équipe de 4. Un Game Jam où le jeu a été réalisé en 4 jours. Mon rôle était chef d'équipe, programmeur multijoueur et designer audio. L'objectif était de faire un jeu avec une équipe limitée par nos spécialisations. Made with Unity and Photon PUN in fall 2021 in a team of 4. A Game Jam where the game was made in 4 days. My role was team leader and multiplayer programmer and sound designer. The goal was to make a game with a team limited by our specializations.

J'ai tout converti le code du programmeur gameplay pour fonctionner en multijoueur. J'ai aussi programmé le hook, l'effet de stun, l'invisibilité et les effets de potions aléatoires. I converted all the gameplay programmer's code to work in multiplayer. I also programmed the hook, the stun effect, the invisibility and the random potion effects.

Gameplay Gameplay

Équipe Team

David Dias - Chef d'équipe, Programmeur multijoueur et gameplay, designer audio David Dias - Team leader, network and gameplay programmer, audio designer

Adib Benchekroun - Directeur artistique, Artiste personnage/environnement Adib Benchekroun - Art Director, Character/Environment Artist

Alain Pham - Designer UX/UI Alain Pham - UI/UX Designer

Antoine Turgeon - Programmeur gameplay, Équilibrage du jeux Antoine Turgeon - Gameplay Programmer, Game Balancing

Tales of War

Projet personnel volontaire pour une petite communauté Voluntary personal project for a small community

Projet solo fait avec Unity et Netcode for GameObjects. Un projet avec aide récente de quelques personnes (voir équipe tout en bas). Pour une communauté de plus de 1000 personnes qui attend impatiemment le "revival" du serveur Minecraft (The Battle For Conwy Castle). Sauf que ce "revival" est indépendant de Minecraft. Solo project made with Unity and Netcode for GameObjects. A project made with recent help from a few people (see the team all the way below). For a community of more than 1000 people who are eagerly awaiting the revival of their Minecraft server (The Battle For Conwy Castle). Except this revival is independent from Minecraft.

AIs AIs

Le jeu peut run 100 AIs fluidement. Ils sont très designer friendly. L'un peut simplement créer un nouveau ScriptableObject AI et commencer à définir comment son AI va se comporter dans le jeu: The game can smoothly run 100 AIs. They are very customizable. Very desginer friendly. One can simply create a new ScriptableObject AI and start to create how his AI will behave in the game:

Voici à quoi ressemble le code. Ce n'est pas du visual scripting, les scripts sont écrits en c# en tant que behaviours dans des Animator States. Here is how the code looks. This is not visual scripting, the scripts are written in c# as a behaviour inside Animator States.

Génération de terrain Map generation

J'ai développé une génération de terrain qui créer et stock tout les meshes générées dans un adressable asset group. Le but était de générer en chunk, car dans Unity, chaque mesh ne peut recevoir que 4 lumières et, car je devais stocker les données des voxels sous terre. Plus tard je vais développer des catapultes qui vont détruire et révéler les voxels cachés. I developed a map generation that creates and stores all generated meshes in an addressable asset group. The goal was to generate in chunks, because in Unity, each mesh can only receive 4 lights. I also wanted to store voxel data hidden underground: I will later develop catapults that will destroy and reveal those hidden voxels.

Une fois le terrain généré, mon code ne fait que charger les chunks nécessaires au joueur. Un joueur n’aura jamais besoin de générer un terrain en entier. Il a seulement besoin de charger ce dont il a besoin de voir. Once a map has generated, all my code does now is load the chunks that are needed for the player to see. A player will never have to generate a whole map. They only need to load what they need to see.

Pour load une scene plus rapidement et occuper moin d'espace dans la mémoire, tous les meshes sont stockés sous forme d'adressable assets: To have faster loadings and occupy less space on the memory, all meshes are stored as adressable assets:

Ajouter un nouveau terrain jouable dans Tales of War est aussi simple que de drag n drop un fichier de données de voxel(dans lequel contient des données de positions de voxel), générer les meshes une fois, placer manuellement au moins 2 drapeaux de couleurs différentes et les ajouter aux terrains jouables/votables. Mon code ajustera automatiquement la position et la fonctionnalité des drapeaux UI sur la carte et la mini-map. Adding a new playable terrain in Tales of War is as simple as drag and dropping a voxel data file, in which contains data of voxel positions, generating the meshes once, manually placing at least 2 flags of different colors and adding it to the playable/votable maps. My code will automatically adjust the position and functionality of the UI flags in the map and the minimap.

Le mesh du AI pathfinding est automatiquement baked du côté du serveur dès qu'un chunk est rendu. The AI pathfinding mesh is automatically baked on the server side as soon as a chunk has been rendered.

Personnages Characters

Il y a un seul character controller pour 40 personnages (Je peut créer de nouveaux personnages en créant un nouveau ScriptableObject de personnage). Le but est de répliquer un pvp similaire à Minecraft mais plus dynamique et personnalisable, car la communauté préfère les combats rapides et qui nécessitent des compétences de visée. There's only one character controller for 40 characters (I can create new characters by creating a new character ScriptableObject). The goal is to replicate a Minecraft-like pvp but more dynamic and customizable, as the community prefers fast-paced combat that requires aiming skills.

Armes Weapons

Les armes et les personnages sont des ScriptableObjects. Un personnage contient des armes (la barre UI des armes est automatisée et très flexible) et les armes contiennent des clics de souris (clics gauche et droit). Un clic contient un comportement d'arme. Il peut s'agir d'une attaque melee, d'une attaque projectile, d'un objet plaçable ou d'un objet utilisable. Je peux donc facilement créer une épée dans laquelle son clic gauche sert à poser l'épée au sol et le clic droit à lancer l'épée. Voici des exemples : Weapons and Characters are ScriptableObjects. A character contains weapons (hotbar UI is automated and very flexible), and weapons contain mouse clicks, left and right click. A click contains a weapon behaviour. It could be a melee attack, a projectile attack, a placable object or a useable object. So I can easily create a sword in which its left click is to place the sword on the ground and the right click to throw the sword. Here are examples:

Regles du jeu / Gameplay Gamerules / Gameplay

Le jeu permet au joueur d'apparaitre dans un drapeau de sa couleur (les cercles dans la carte). Il y a un timer et une condition de victoire qui est de capturer tous les drapeaux et à la fin d'une partie, les joueurs peuvent voter pour le prochain terrain. The game allows the player to spawn in a flag of his color (the circles in the map). There's a timer and a win condition: to capture all flags. At the end of a game players can vote for the next map.

Les joueurs peuvent aussi jouer au gamemode ARENA, dans lequel ils peuvent s'affronter en duel ou en équipe. Il y a 4 arènes et chaque arène a un terrain aléatoire sélectionnée automatiquement. Le premier joueur à rejoindre une arène peut choisir le nombre de joueurs qu'il veut à l'intérieur. La règle : éliminer l’équipe ennemie sous un. Des règles plus amusantes seront ajoutées pour équilibrer le mode de jeu. Players can also play the ARENA gamemode, in which they can duel or team battle anyone they want in the server. There's 4 arenas and each arena has a random map automatically selected. The first player to join an arena gets to choose how many players they wants inside. The rule: eliminate the enemy team under a time limit. More fun rules will be added to balance the gamemode.

Le jeu prend compte de tous les dégat et kills des joueurs. Cette fonctionnalité est nécessaire pour avoir le système d'assist ou pour les statistiques Steam. The game takes into account all damage and kills from players. This feature is necessary to have things like the assist system and to store Steam statistics.

Serveurs Servers

Grâce à Steam Lobbies, les joueurs peuvent héberger leurs propre serveur Tales of War avec plein de paramêtres. L'adresse IP, le nombre de joueurs et la région est sauvegragé comme information visible d'un lobby. Thanks to Steam Lobbies, players can host their own Tales of War server with many settings. The IP address, number of players and region are saved as visible lobby information.

Gameplay Gameplay

Équipe Team

David Dias - Chef, Programmeur, Intégrateur, UI, SFX, VFX, Marketing, Modelisation/Animation personages et armes David Dias - Leader, Programmer, Integrator, UI, SFX, VFX, Marketing, Character and Weapons Modeling/Animation

Jean-Philippe Filiatrault - Programmeur de jouabilité Jean-Philippe Filiatrault - Gameplay programmer

Christian Kobayashi - Musique Christian Kobayashi - Music

Archibald Ducher - SFX, Modelisation de personages/Arena Maps Archibald Ducher - SFX, Character Modeling, Arena Maps Modeling

Arnaud Léveillé - Écrivain du mode histoire Arnaud Léveillé - Story mode writer

Adib Benchekroun - Animations des personnages Adib Benchekroun - Character Animations

La communauté - Modelisation des terrains du mode Siege The community - Siege Maps Modeling

JETPACK PISTOLATOR

Game Jam fait maison avec mes amis Homemade Game Jam with my friends

Fait avec Unity et Photon PUN en janvier 2021 en équipe de 2. Réalisé en un total de 24 heures. Mon rôle était programmeur. L'objectif était de faire un jeu dans les airs. Made with Unity and Photon PUN in January 2021 in a team of 2. Completed in a total of 24 hours. My role was programmer. The goal was to make a game in the air.

Menu Menu

Il y a 10 personnages jouables, chacun ayant des donnés différentes qui seront synchronisés en multijoueur quand le joueur entrera dans un salon. Pour entrer dans un salon, simplement entrer le nom du salon. Si le salon n'existe pas, il sera créé. There are 10 playable characters, each with different stats which will sync in multiplayer when the player enters a room. To enter a room, simply enter the name of the room. If the room does not exist, it will be created.

Jetpack et balles Jetpack and bullets

Étant le seul programmeur dans l'équipe, le gameplay devait être très simple à coder, car j'ai aussi la tâche de rendre tout le code fonctionnel en multijoueur. La direction et la vélocité des tirs, les animations (marche et feu du jetpack), la position du joueur et son état (points de vie/mort ou vivant/spectateur ou pas,etc.) ont été synchronisés de façon à favoriser un gameplay rapide et réactif. Being the only programmer in the team, the gameplay had to be very simple to code, as I also have the task of making all the code work in multiplayer. The direction and the velocity of the shots, the animations (walking and the fire of the jetpack), the position of the player and his state (hit points/dead or alive/spectator or not, etc.) have been synchronized to promote fast and responsive gameplay.

Gameplay Gameplay

Équipe Team

David Dias - Programmeur David Dias - Programmer

Frederick Poliquin - Musique, sons et images Frederick Poliquin - Music, SFX and sprites

SmolRPG

Cours: Projet de fin d'études Class: Graduation Project

Fait avec Unity en hiver 2020, au Collège de Maisonneuve. L'objectif était d'apprendre quelque chose de nouveau. J'ai choisi de faire un jeu mobile pour Android. (Apprendre à mettre des publicités et compter le temps hors jeux). Tout est fait par moi, sauf pour la musique. Made with Unity in winter 2020, at Collège de Maisonneuve. The goal was to learn something new. I chose to make a mobile game for Android. (Learning how to put advertisements and count the time when the game is closed). Everything is done by me, except for the music.

Mobile Mobile

Les ennemis réapparaissent à chaque heure. L'heure est calculée en sauvegardant la date/heure/minutes/secondes de la dernière sauvegarde du joueur (il y a des sauvegardes automatiques) et sera ensuite comparée avec la date présente pour savoir si les ennemis peuvent réapparaitre ou combien de temps il reste avant que les ennemis puissent réapparaitre. Aussi, si le joueur veut se guérir sans acheter de la nourriture, il peut regarder une publicité en cliquant sur le bouton + ou simplement attendre, car le joueur récupère un point de vie à chaque 10 minutes, même quand le jeu est fermé. Enemies respawn every hour. The time is calculated by saving the date/hour/minutes/seconds of the player's last save (there are automatic saves) and will then be compared with the current date to know if enemies can respawn or how many time is left before enemies can respawn. Also, if the player wants to heal himself without buying food, he can watch an ad by clicking on the + button or by simply waiting, because the player recovers 1 hp every 10 minutes, even when the game is closed.

Combat Combat

Le combat est très simple, il suffit de cliquer sur un ennemi et le personnage va pointer son épée vers l'ennemi. Si le joueur ne bouge pas, il aura son bouclier devant lui. Bloquer des coups réduit les dégâts reçus. Le but est d'attaquer sans trop s'approcher de l'ennemi. The combat is very simple, just click on an enemy and the character will point his sword towards the enemy. If the player does not move, he will have his shield in front of him. Blocking hits reduces incoming damage. The goal is to attack without getting too close to the enemy.

Magasins et inventaire Shops and inventory

Le joueur peut acheter de la nourriture et l'utiliser pour se guérir. Il peut aussi acheter et équiper des armures, des boucliers et des épées. L'inventaire fonctionne avec des collisions en 2D pour détecter l'emplacement que l'objet sélectionné aura. Le joueur peut glisser un objet à l'extérieur de l'inventaire s'il ne le veut plus. L'objet va flotter comme dans Minecraft et peut être récupéré en s'y saprochant. The player can buy food and use it to heal. He can also buy and equip armor, shields and swords. The inventory works with 2D collisions to detect the location that the selected object will have. The player can drag an item out of the inventory if they no longer want it. The object will float like in Minecraft and can be picked up by approaching it.

Gameplay Gameplay

Elementaris

Cours: Programmation d'animation III (Unity) Class: Animation programming III (Unity)

Fait avec Unity en automne 2019, au Collège de Maisonneuve en équipe de 5. Mon rôle était chef d'équipe, programmeur et compositeur. Je devais programmer les contrôles en première personne des quatre tourelles, modeler et animer les deux monstres de feu et les deux monstres de vent, programmer la caméra du terrain et créer les vagues d'ennemis. J'ai aussi fait beaucoup de tâches hors de mon rôle en extra (réparer plein de bugs et programmer la tourelle de pierre). Made with Unity in fall 2019, at Collège de Maisonneuve in a team of 5. My role was team leader, programmer and composer. I had to program the first person controls of the four turrets, model and animate the two fire monsters and the two wind monsters, program the terrain camera and create the waves of enemies. I also did a lot of extra work outside of my role (fixing lots of bugs and programming the stone turret).

La tour de vent Wind tower

Quand le joueur prend contrôle de la tour de vent, il attaque plus vite. Il peut aussi se déplacer à l'intérieur pour avoir de meilleurs angles. Il peut aussi attaquer à une distance infinie. Il faut bien donner des raisons pour perdre la vue de haut et contrôler une tour qui faisait déjà sa job. There has to be a reasons for the player to lose his top view and control a tower that was already doing its job so when the player takes control of the wind tower, he attacks faster. He can move inside to get better angles and can also attack to an infinite distance.

La tour de pierre Stone tower

Quand le joueur prend contrôle de la tour de pierre, il attaque plus vite et plus fort. Malheureusement, il n'y a pas la possibilité de contrôler la caméra ou où il peut tirer. Le but de cette tour c'est qu'elle ne puisse attaquer que devant elle. When the player takes control of the stone tower, he attacks faster and stronger. Unfortunately, there is no possibility to control the camera or where he can shoot. The purpose of this tower is that it can only attack in front of it.

La tour de feu Fire tower

Quand le joueur prend contrôle de la tour de feu, il attaque plus vite et plus fort. La caméra peut tourner dans tous les directions et le canon suivra cette direction. Il peut aussi attaquer à une distance infinie, mais le projectile lourd est affecté par la gravité. When the player takes control of the fire tower, he attacks faster and stronger. The camera can rotate in any direction and the cannon will follow that direction. It can also attack to an infinite distance, but the heavy projectile is affected by gravity.

La tour d'eau Water tower

Quand le joueur prend contrôle de la tour d'eau, il attaque plus vite, plus fort et ralentit encore plus les ennemis. La caméra peut tourner dans tous les directions, mais la tour ne suivra la caméra qu'en rotation horizontale. Là où le joueur clique, est là ou le ballon d'eau va tomber. When the player takes control of the water tower, he attacks faster, stronger and slows down enemies even more. The camera can rotate in any directions, but the tower will only follow the camera in an horizontal rotation. Where the player clicks is where the water balloon will fall.

Gameplay Gameplay

Équipe Team

David Dias - Chef d'équipe, programmeur, directeur sonore, compositeur David Dias - Team leader, programmer, sound director, composer

Djawad Taleb - Designer UX/UI Djawad Taleb - UI/UX designer

Julien Savoie - Directeur artistique, Modelage 3D Julien Savoie - Art Director, 3D Modeling

Thiago Ferreira - Représentant de l'équipe, Developpeur Web Thiago Ferreira - Team representative, Developpeur Web

Vincent Majeau - Directeur technique, programmeur Vincent Majeau - Technical director, programmer