Crescendo
Dates | Summer 2020 ~ Spring 2021 |
Role | Gameplay Engineer |
Team | USC Games (team of approx. 25 members, remote) |
Development Software/Tools | Unity |
Summary |
|
Project and role overview
Crescendo is a 2D action-platformer developed in Unity. The player must traverse music-themed side-scrolling levels and use their conducting baton wand/sword to defeat bosses.
Crescendo was directed by Katie Moulton as part of the Advanced Games Project program, USC Games’ capstone class where teams aim to develop a full gameplay experience from pitch to gold master. I had previously worked with Katie and was recruited as an engineer during the Summer of 2020.
As an engineer, I was primarily tasked with combat systems. I designed the process for triggering and detecting attacks, and created tools for creating attacks and attaching them to characters. I also scripted some boss behavior. Aside from combat, I managed menu navigation and save/load features.
Crescendo was presented at the USC Games Expo and published on itch.io in May 2021.
Custom editor and attack manager
My largest contribution to Crescendo was undoubtedly the attack manager. Early in the design process, there were plans for a variety of player and enemy attacks. Therefore, there was need for a robust hit detection system.
One solution would be to create all the attack colliders beforehand and turn them on/off with animation events. But if one character had various moves, you could end up with dozens of colliders on one object, which would be hard to manage. It also forces animation events to reference specific colliders on the object, which goes against modular design.
Instead, I stored all attack data in ScriptableObjects. When the attack manager detects that an attack animation is playing, it reads the corresponding attack data and generates the hitbox. Since the table is stored independently of animations or prefabs, designers and engineers can edit them without fear of interfering with the animations. This was especially important since the game was developed during quarantine; the lack of direct communication made it harder to avoid accidental merge conflicts.
To allow designers to edit attacks without the help of engineers, I created a custom Unity editor:
The custom editor allows you to directly drag to manipulate collider data as if it were an object in the scene. It also uses custom sliders to display when during the animation colliders are active. It supports features such as multiple colliders and animating the colliders through keyframes.
I documented this editor and other attack features in a technical design document. The custom editor was used without issue through the whole development process. I am proud that I seemingly future-proofed the system sufficiently, considering the overall combat design for the game shifted a couple times during development and various complex boss attacks were added.
Takeaways
Crescendo was my first project on a decently-sized team, during the height of the pandemic nonetheless. I am grateful for the engineering lead, Paiam Moghaddam, who mentored me during this time. At a time when it was sometimes hard to keep people accountable, Paiam was always reliable. On the technical side, he taught me about ScriptableObject architecture, which I continue to use on projects.
This project showed to me the importance of robust foundational systems and documentation. Since development was remote, team members could not simply walk over to me for questions or fixes. The custom editor’s ability to allow other teams to work independently, and the fact that no major rewrites to the attack system were needed, saved significant development time. In the later project Party Rogue, I put the custom editor skills gained in Crescendo to allow members that had never worked on a game before to more easily contribute.