Timeline
2017 - March
The birth of the idea. It happened during the thinking process of my final study project at HEAJ.
2017 - June
Final presentation in front of a jury. Was bugged, but somehow, managed to get a distinction grade and favor of the jury.
From December 2018 to February 2019
First tentative of refactoring, using Typescript. Mostly a refactoring of the menu part, not the 3D and game one. In my free time, aborted because no time in life.
2023 - July
Too bored by corporate jobs, too thirsty about creating something on my own and working for my dreams and not for somebody else's dream. Start to work on the game again, in my free time.
2023 - September
Quit an ongoing freelance mission and start to work on the game full time, while looking for another mission in my free time.
Achievements
Move to monorepo / npm workspaces.
Update dependencies to last version. Most notable change is updating Three.js from r85 to r156.
Reimplement and clean most of the graphic feature / shaders from the initial POC. Add some new animations.
Extracting everything that is physic related and everything that should be shared between the server and the client into a dedicated package CORE. The purpose was to run the same code back and front to have predictable physic.
Add automated deployment process docker based with CI/CD. Support dev and staging environment.
Discover and use Traefic in order to think from the very beginning about load balancing, stateless server, and multiple socket.io instances.
Discover and use Redis as a temporary storage system to own the game state, the inputs buffer etc on the server.
Following investigation about techniques to produce quality multiplayer games, such as the series of article from Gabriel Gambetta to name only one, I moved from my initial proof of concept, which was very naive and not scalable at all, with every kind of code mixed (inputs, net code, game logic, graphic code, etc.), to a more scalable architecture, with a clear separation of concerns. To summarize, clients synchronize their clock with the server, they predict inputs and sent them to the server. The server queue them, then process the same physic simulation and update all the clients at a specific network update rate. Then the clients reconciliate the state, using what can be describe as rollback net code. The server is authoritative and own the truth. This is also made to have in mind cheat protection at some point, to allow a clean leader board, as the game seems to be a good fit for speed runners.
- Fist level "Crack the door" restored and playable. Door opening mechanic restored.
2023 - October
Start a new freelance mission, try to keep working on the game in my free time.
Achievements
Add basic mobile support.
Improve client flow between menu and game to be able to stay in the same room with the guy you initially matched with and then continue to play multiple level together.
2023 - Mid December
Realize it's not gonna work, realize I have to force myself so much to work for that job I have no interest into, realize I'm not gonna be able to work on the game in my free time with a full time job load, realize I was much more productive working one month on Composite than 2 months on the freelance mission.
Realize I am not in the rush to find another mission in the next months, and go with the flow, following my energy and motivation. Start to work full time on multiple axis: building the project itself, building a community around, and generate as much content as I can about the game and the development process, trying to give visibility to the project.
Achievements
Start streaming project development consistently.
Create a new version of the initial bounce mechanic. Players can now enter platform of the same type and make them rotate, to influence the bounce of your team mate. Playing on the opposition between shadow and light.
New version of bounce skins.
Realizing that doing real time collision between players in multiplayer game is more challenging and the current experience is poor in the second level based on this mechanic. Start reading a lot of content about Rocket League's physic system, fighting / FPS games's net code, etc.
Second level "Learn to fly" remake, playable but not incredible. Bounce mechanic enabled but hard to deal with network inconsistencies.
Performance optimization, clean up shaders, usage of three-mesh-bvh was game changing.
2024 - January
Achievements
Add key bindings panel to support multiple keyboard layouts.
Open discord server.
Add contribution guide, ensure local development setup procedure is complete and working as expected. Tested with viewers on multiple OS.
Add google analytics.
Roadmap / timeline page.
Improve net code to manage better the latency and player to player collision. Move from 60Hz to 120Hz for the physic simulation.
Manage disconnect event while in game.
Invite a friend feature.
Remove a lot of code dedicated to the drawing of text with the canvas API to benefit for the now supported enough CSS property mix-blend-mode. Thank you to this website for the inspiration.
Add https support.
2024 - February
Achievements
Add graphic part of next element type: Black hole.
Start implementation of level editor
Refactor client game code to reach the modularity required.
Add base features such as add element in the scene, display the list of element in the scene.
Add properties panel to edit selected element.
Different camera management in level editor.
Add action to reset players position, to toggle between play / edit mode.
Add level table in DB. Add proper API controller and service associated. Add basic save feature.
2024 - March
Achievements
Add translation support for the app. (Even if not used everywhere atm.)
Add role based authentication front and back. Add restore session. Generate swagger spec based on API codebase.
Generate api-client package based on swagger spec.
Add pages forgot-password, sign-up-email-retry, new-password, login, register, and sign-up-email-activated + backend logic related.
Connected level created by author and stored in DB with game launcher (lobby), previously using hard coded level.
Add more improvement to level editor editor.
2024 - April
Achievements
Improve data structure in DB.
Various improvement and bug fixes to level editor.
Add feature lock element.
Add feature undo / redo.
Add feature drag and drop element in scene list.
Add keyboard shortcut
Login modal from level editor
Improve design of emails sent by the API.
Performance improvements in game and in level editor.
Various UX improvements.
Add Precision Level, first level ever made by a user with the level editor. Some say he was known as Legion.
Add new level the high sphere: part 1, first level ever made by the author with the level editor.
2024 - May
Achievements
New game launcher / lobby.
Add mobile support.
Add solo game mode.
On going...
Roadmap
2024 - Quarter 2
Objectives
Add landing page explaining the project.
Add view "Levels created by the community".
Add like feature for level.
Make the game "speed run" friendly, display an accurate timer for each game session. Should the leader board be stored in blockchain? Seems like a good fits to me, in order to be as transparent as possible.
Add some kind of level difficulty management with ranking from user and author.
Add black hole element physics and connect it with the already made graphic part.
Investigate and decide best hosting / setup option for the production environment.
2024 - Quarter 3
Objectives
Add scale management for all elements. So you can have super big door, or you can have small door like Evry lucarne.
Add unique ability for each player. Light could dash quickly in a direction for example, while shadow could go through wall for a small duration. To investigate.
Add some kind of communication between the players during the game, for example a system similar as the emotes on top of your player in LOL.
Electron app installable on desktop, with auto update, and register it on steam.
Many more levels
Many more languages / translations
Add incentive system to reward users for playing the game. I am very interested into Dapp, and connect the project to Solana, with smart contract rewarding the users directly when they play the game would be awesome for me.