Fundamental
In 2023 I finally had time to participate in the GGJ (Global Game Jam), the goal of which is to make a game in a certain theme in about 48 hours. I had wanted to get more comfortable in Unity and learn a basic level of game development for a while, and being given a 2 day deadline to finish something fits nicely with how I motivate myself to get things done. The resulting game was Fundamental, which can be played here. The git repository is here.
Development
The theme for the jam was "roots". I decided to make a piece of software where you could create a tree-like structure of partials, all stemming from a "root" note (In computer science terms, this is just a tree. The root note is the root, and a partial is just some non-root node in that tree). I was inspired by a visualization I saw of an FFT which showed partials as orbiting each other, not as lines on a graph. I had the idea to take that visualization and translated it into 3 dimensions, so higher partials would be higher in space. This would make something that looks somewhat like an upside down tree.The initial MVP would have partials that could be added or removed. The sound of each partial is a single sample, which would be pitched up to match the pitch of that partial. The visual component of each partials would move counter-clockwise around a circle with its parent at the center, triggering the sample when the angle of rotation is 0 radians relative to the parent. Finally, the camera would hover over the "current" partial (so the most recently made, or the parent of the last deleted partial).
Whilst I fairly quickly came up with the rest of the features that were in the final version, I disciplined myself to always do the bare minimum and focus on one feature at a time. I thought than even an MVP could give me some interactive thing that I would enjoy. Most of the code would just be adding and removing items from a tree- a common programming task- meaning that it should be easy to implement in any tool I would choose to work with. This also meant I didn't have to worry about the impact new features would have on the overall system, as modifying a tree is well-understood. In the end, I was able to implement everything I wanted to with time to spare.