Integrative Project 2 - Polytechnique Montréal (2025)

This project is a tactical RPG web platform developed using TypeScript, Angular, and NestJS, enabling players to engage in turn-based combat on customizable grid maps. The platform supports multiplayer sessions (using socket.io), includes an algorithm-driven virtual player system, features real-time chat, and game state management for an immersive gameplay experience.

Home page of the game

Here is the home screen of the website.

List of maps

Here is the list view of all the visible maps (some maps can be hidden). If you choose to "Administrer les jeux" from the previous screen, you can create a new map or edit an existing one, delete a map, or change its visibility.

View of map editing

Theres a map editor, which allows users to create and customize their own maps for gameplay. There are specific rules for the map which are enforced client and server side. Also maps can be 3 different sizes.

View of character creation

So once you select a map (or join a game) you can create your character. You can choose a name, a character image, and some perks. Using sockets we can also ensure that no players have the same character image and when an image is selected, it is broadcasted to all players in the character creation.

View of waiting screen

Once you choose a map and character, you enter the waiting screen where you can see other players and chat with them. Other players can join the waiting room using the codde and the hosts decides when the game starts. The host can also instead choose to play with virtual players which can either have a more defensive or aggressive play-style.

Main view of the game

This image demonstrates movement using Dijkstra's algorithm to calculate the shortest path while avoiding obstacles. Players can't move through walls, must open doors (once per turn), and can't occupy the same tile as another player. Movement points are determined by a dice roll: ice tiles cost 0, ground tiles cost 1, while water tiles cost 2.

Gameplay of combat

Here you can see combat in action. The combat system is turn-based and time-limited. Players can choose between attacking, or trying to escape. The success of an attack or escape is based on dice rolls.

In addition to the core gameplay, the project features detailed player statistics, a Capture the Flag mode, and a comprehensive event log that records every in-game action. Developed by a six-member team, we had to follow Agile practices (including sprint planning, weekly meetings, and sprint retrospectives) which fostered effective collaboration, continuous feedback, and incremental improvements throughout the development cycle. The main challenge was correctly planning how much time we needed to implement each feature as well as ensuring the code was well structured and modular to allow for easy integration of new features. The project was a great learning experience in both technical and team collaboration skills.