Starvin' Marvin is a 3D swimming experience of a famished clown fish eating everything in their path.
The theme for the 2024 GMTK Jam was Built to Scale.
I was the programmer for a team of 6, and also set up some production spaces for us to brainstorm and plan. Altogether we were two 3D artists, two musicians and one illustrator.
Game Page: https://socknot.itch.io/starvinmarvin
Engine | Unity 2021 Team Size | 6 Dev Time | 4 Days
Engine: Unity 2021
Created a movement system focused on simplicity
Implemented a progression system to tie in with jam theme
Created a vertex shader for fish animation to reduce artist workload
Optimized a fish management system to have hundreds of fish swimming in game
Worked closely with composers to create a music layering system
The player controls were designed to be incredibly simple: swim forward automatically in the direction of the camera, and dash in new directions. The camera rotates around the player character by using the mouse.
The goal for this game is to eat other fish and grow larger, which ties in with the jam's theme Built to Scale. Collision is detected in the fish management system. If that fish's distance to the player is below a limit, then it is eaten. This allowed us to avoid using Unity's collision detection and have more fish on screen as a result.
All fish have an animated swim cycle through a vertex shader. This was important since we could avoid using any rigs. It allowed the 3D artists to focus more on environment art and creating the scenes to swim around in.
All fish, other than the player, have their data stored in multiple arrays in a single script and are rendered using Unity’s Graphics.DrawMesh function. Animation is done through material property blocks in the vertex shader. Reducing the Update calls down to a single call as well as rendering with this method allows for many more fish to exist in the scene.
The composers in our team wanted to experiment with layering music throughout progression, with two distinct styles. After brainstorming, we decided to play all music layers of one style at the same time, and interpolate the volume of the next layer in stages. We’d then swap to the other style after the first had been cycled through. We felt like we succeeded because all tracks are kept in sync and both composers had the freedom to experiment together.
This is the final state of our preproduction process.
The only controls would be controlling the camera direction and a dash mechanic. As the project's only programmer, we had to keep our project incredibly simple. I had enough prior experience in programming 3D controllers and shaders that I was confident we could accomplish this within the jam's deadline.