It has an offline and an online mode, and servers are available to download and modify to create you own custom server. It was developed using Construct 2 and the servers are made using Node.js and uses the Websocket technology. The game is pretty simple mechanic-wise but you can really get to a high level and have intense matches !
I programmed the game and its backend, I made internal endpoints for the art team to help them implement animations and input dependent stuff. I'm very proud of the block generation, the input system, the online room system and the overall gameplay experience it created.
The game is separated into 2 screens, player 1 on the left and player 2 on the right, even before the game starts you can feel the tension !
Inside the Construct 2 editor, variables are clearly indicated and documented, and variables that shouldn't be touched are clearly indicated and intentionally kept undocumented.
The code is clearly separated, each player having its own category, then the additionnal global systems that aren't player-dependant are listed afterwards.
Block generation is player-independent and before block lines are displayed, meaning both players get the same blocks on the grid and the generation is done on the client when playing offline. The generated block lines are added to the players' respective block line pools before they are displayed on the grid...
... but when playing online the server does the block generation with the same algorithm. The result is calculated before one of the clients runs out of lines to display, then it's sent to both client's line pool.
Each player has a 'virtual controller' used to hook various inputs onto, depending on the device and on the gamemode.
The online mode is overriding the 2nd player's input to use its virtual controller to directly control the canon. It made the implementation of the online mode way easier than if it wasn't there. A 'VS AI' mode was planned but scrapped, some remnants of it can be found and it would've also used the virtual controller to register inputs. When implementing the online gameplay, I knew I wouldn't need a 100% accurate state representation of the other player's screen, so it sends inputs when a button is pressed then regularly sends the player's gamestate (grid, player position, joker gauge level, next blocks to send, etc...) to correct potential inaccuracies.
The game was made in a semester at ICAN Design by 3 people :
François JOURDAIN
(lead game design, lead game art, lead redaction)
Benjamin DANESE
(game design, sound design, composing and arrangement, redaction)
Sébastien PAUTOT
(lead technical game design, game design, lead programming, lead composer and arrangement)
Don't forget to send feedbacks !