Body Maintenance
Team Formation
I built Body Maintenance with a team during Global Game Jam in January 2020. I had been discussing an opportunity around this time at LAMO, LLC, with one of their engineers, Chris Parkinson who suggested doing a game jam as a sort of "working interview". This sounded like a lot of fun to me, and a great chance to show off my skills. I had considered asking Chris to join a GGJ group remotely with me in Cleveland, but assumed that it would be awkward timing as LAMO (the game) was being re-released and he probably wouldn't enjoy being the odd man out working remotely. But then, he asked me to join his GGJ group in Columbus, since he was already planning to work with his brother (an artist) and another programmer. I was of course interested. They allowed my brother to join also as a musician, as I had encouraged him to jam with me that year as well.
My brother and I worked from the Cleveland location on Friday and Saturday, to see what some of my other Cleveland Game Developer friends were building and to let my brother meet them. Then, he and I drove down to Columbus on Sunday to meet the rest of the team in person at the COGG (Central Ohio Gamedev Group) location and present with them. While I didn't end up working for the LAMO team (they basically ran out of funding during the COVID-19 pandemic), this was another immensely rewarding game jam experience. Visiting COGG (CGD's "sister organization") was cool, and this was by far the most mechanically complex game jam game that I had built up to that point.
Game Concept
The GGJ 2020 theme was "Repair", so Chris and his brother had the idea of making a game about repairing a human body. Each organ system would be a little platformer mini game, making it easy for us to work in parallel and add more organs as time allowed. The brothers were also very experienced with the popular Corgi Engine asset for building 2D Platformers in Unity, so a lot of the input/movement systems would already be done for us.
The final game, Body Maintenance (BM), featured local multiplayer with 4-player split-screen, and a central mini map that showed each player's location in the body. A "life manager" system would trigger events with descriptions like "first day of school" or "senior prom", creating alerts in relevant organs.
We built five organ mini games:
- Brain: players flip a lever to activate a sequence of colored lights on the brain. They then repeat that sequence by pressing colored buttons to "clear the mind".
- Heart: players jump back and forth on trampoline-like "lungs" to charge up the heart.
- Liver: players filter the bloodstream by toggling the direction of two "conveyor belts" to steer waste and nutrients into the appropriate buckets.
- Intestines: players empty four "tanks of poo" by rapidly pressing a plunger in front of each.
- Groin: players must calm the "party in the pants"! That is, players must navigate a maze through a disco-like area of smoke and lights to flip some light switches, but the maze walls are only visible within a small circle around a player. Somehow this is what we came up with to keep the reproductive system family-friendly...
Technical Details
I wrote the logic for the liver and groin systems, the overall life manager, and the dynamic music system. My brother wrote 28 tracks of music in total for the main menu, game over screen and organ systems. Chris's brother did all the artwork, which had a fantastic cartoony look with lots of detail. The other programmer wrote the logic for the brain, intestines, and heart organs, and set up the "life events" using my life manager system. Finally, Chris put together the overall map, setting up the split-screen, minimap, and player controllers. His two sons also did some playtesting during the final hours!
The Corgi Engine asset did prove to be immensely helpful, providing 2D platformer inputs and mechanics, ladders, multiple controllers, etc. out of the box. This allowed our team to focus on the custom logic specific to Body Maintenance.
My implementation of the "life manager" made good use of data driven design.
That is, I defined a "life event" ScriptableObject
that basically encapsulated a description (e.g., "Senior prom")
and a set of affected organ systems.
The manager component itself then accepted an ordered list of "life stages",
each encapsulating an age in years, a short description (e.g., "Toddler"), and a set of life events that could be randomly chosen.
The manager listened for organ "completion" events to know when to advance life stages,
and activated the appropriate organ minigames, adjusting UI and other effects for each stage.
With this system in place, the other programmer was able to rapidly iterate on the game's life stages/events
from the Unity Inspector without waiting for any additional code compilation time.
The liver minigame allowed me to use one of my favorite Unity features: 2D Physics.
Essentially, each waste/nutrient item (variants of a shared prefab) had a Rigidbody2D
component so it would obey physics.
A singleton script listened for events from trigger Collider2D
s above each conveyor belt
to know when an item had landed on it and begin applying forces.
The script also listened for events from toggling the belt levers to adjust the force direction of the associated belts.
Finally, the groin minigame allowed me to flex some level design skills. I found some free smoke images with transparency and added a couple to the scene with different scales/colors, then animated their rotation at different speeds/directions to achieve the smoky dance party atmosphere. The little spotlights were just cropped from a single image of a circular gradient and I animated their rotations together to look like they were moving in sync to music. The walls of the maze were just a bunch of rectangle sprites, but I set up them and the light switches to only be visible within a circular "mask" centered on each player.