Bob - One Man Band
Our Submission to the 'So Bad It's Good' Jam
Bob-OMB is a game where you control Bob, who carries seven different instruments and can play them all simultaneously. He stole these instruments from the backrooms of a concert hall, and now you must help him escape.
The gameplay involves fending off other musicians who try to stop you by playing music at you. You need to blast them away with your own music. Playing on the beat enhances your instruments' power, helping you defeat the hordes of enemies coming at you.
Project Development
The project went well overall. We found a fun idea and enjoyed making something more silly for the SBIG Jam. However, some team members delivered less than they promised, partially because the project coincided with the beginning of the vacation. While wanting to take a break is understandable, it was unfair to those who participated seriously. As a result, I took on more responsibilities, but this turned out to be a positive experience as it allowed me to learn new skills that I continued to build on in future projects.
My Contributions
For this project, I served as the main coordinator, ensuring tasks were completed on time. Due to unforeseen time constraints on my team’s part, I took on additional responsibilities, which allowed me to expand my skill set significantly. My contributions included:
- Enemy Behavior: Developed a state machine that handles the enemy AI.
- Player Movement and Camera: Implemented simple player movement using the new input system and set up the camera using Cinemachine.
- Beat Manager and Combo Manager: For the Beat Manager, I wanted to ensure that any script could listen to it without relying on singletons, which often create many dependencies. I created a Bool Variable and Bool Reference system. The Bool Variable is a scriptable object that holds a boolean value and triggers a C# event when the value changes. The Bool Reference allows a script to reference the Bool Variable while remaining completely decoupled. The Beat Manager uses delta time, based on the original start time, to avoid drifting, flipping the OnBeat bool to true or false as needed. This creates a very decoupled system where any script can check if an action happens on beat without worrying about where the boolean comes from.
- Sound Effect Manager and Sound Effects: Designed and managed a sound effects system that handles multiple sound effects simultaneously, as sound was one of the most important features of this game.
- Balancing: Balanced the game to fit the 'So Bad It's Good' theme. The balancing didn't need to be perfect but needed to accentuate the silliness. I implemented weapon balancing that could be adjusted in the editor, with options for stat scaling depending on the combo, such as additive, exponential, or multiplicative scaling.
- Optimization: Optimization was a challenge, as there are nearly one thousand enemies in the scene, which is a significant number, especially in WebGL. I designed a system that divides the scene into squares, only activating the enemies and other objects in the player's square and the surrounding squares. This approach minimized the load on the game, allowing it to run smoothly even in a browser.
- Level Decoration: Decorated levels using assets provided by the environment artist.
- Lighting: Designed lighting, including RGB character-following lamps.
- Character Art: Created the character models, including modeling, texturing, rigging, animation, and implementation in Unity. This process taught me new techniques, such as using Avatar Masks to perform different animations for the feet and arms simultaneously.
Outcome and Reflection
Overall, the project went well. Even though I ended up doing most of the work, I am quite happy with the result. This experience taught me the importance of clearly communicating expectations, even when working with friends. We finished 12th, which was a bit disappointing since a top 10 placement would have included the game in a package to raise money for charity, but we can't complain about being 12th. However, it was still a valuable experience, and I gained a lot from it.