Link to the GitHub repository (code only)
In Ready, Set, Jam !, use your musical prowess and rhythmic skills to answer requests from a difficult crowd ! Equipped with your DJ mixer in real life instead of a usual controller, modulate the flow of your sound and create some sick jams ! Experiment and freestyle or try and match the pace for an awesome rhythm game experience !
Game created on Unity, in 3 months by a team of 5 people as a Master 1 Project
We wanted to create a unique experienced centered around an alternative controller: a physical, custom made DJ Mixing Controller.
Walkthrough
As the sole programmer, I did all the programming and assisted with many IT and integration related tasks, but the most interesting tasks I had to do were the custom level editor, the NPC crowd system, and the building and integration of the controller.
Our game designer had to be able to iterate quickly, to easily understand what he's doing and how the level is playing as well as to be able to collaborate with our sound designer.
I had to design and program a custom level editor that would allow that. I used UI toolkit to have complete control over everything without relying on external non-free plugins like Odin.
Each level is a music with thousands of beats. On each beats, the level designer can trigger special events (like dialogues), or add requests that the player will have to fulfill.
When you open the level file, you can see and set the parameters of the level and see a list of all the beats. If the editor is opened while the game is running, the current beat will be highlighted and if the person using the editor needs it, it will automatically scroll to it.
Because making a musical level is a collaboration between a level designer and a sound designer, we needed to have a way for them to communicate: when you open a level asset, you see all the beats and the sound designer is able to add comments on beats that the LD will be able to quickly find back.
Clicking on the button of a beat open a beat editor where the level designer can add special events (like dialogues), but most importantly interactions. Because the player is free to do what he wants with the music as long as there's no request that contradicts it, we had to implement a system that automatically add request to "put the player back on the path", as well as a system that allow certain interactions to only be requested in specific conditions.
Each interaction represent an NPC asking to do tweak the values of the music using an "entry" (input) of the controller.
Those controller entries defined in the level file because initially, we considered each levels changing what the controls of the controller does.
Ultimately we decided to use the same controls for the same effects for the entire game.
The game use the SOAP (Scriptable Object Architecture Pattern) implementation of Unity Atoms. Instead of a Singleton Game Manager, all global events, variables etc. Are represented by Scriptable Objects. This allowed the Level Editor to quickly integrate new features late in production:
For exemple the dialog system was very easy to implement since the editor allowed the level designer to add calls to global string events.
We wanted to have a crowd that seemed huge and alive, and varied.
For the appearance of the NPCs we use a mix and match system, where multiple textures and meshes are done for clothing and each NPC choose one a each randomly.
Their behavior is inspired by boids: multiple forces influence their movement, they want to keep a distance from each other, while moving close to one of the scenes (depending on your performances as a player).
To avoid shaky looking NPCs, their position is smoothed based on their position in the last 10 iterations of the system.
This behavior is computed using Unity Jobs System to get better performances by taking advantages of multi-threading.
The controller was built around an Arduino and interact with the game through the Ardity library.