top of page

Ronin

Summary

Ronin is a fast-paced rogue-like that leverages detailed art and sound design to make the player feel like a legendary sword master. This was a collaboration with 14 other students that I co-led for UCLA ACM Studio's 2022 SRS Unity game development projects over 20 weeks.

My responsibilities included:

  • Establishing major milestones and managing weekly tasks using a pseudo-agile framework

  • Architecting game systems

  • Implementing elements of combat and movement

ronin_pov.png

Reducing Complexity

Building a game as a team of amateurs who don't have a whole lot of time

A Simpler Stat System

The sheer volume of character combat metrics (ex. energy level, is stunned, parry state, etc.)  in the initial vision for Ronin pushed me to search for fancy, AAA-worthy solutions to manage its complexity. However, fast-approaching deadlines led me to cut the scope and rearchitect the game around a minimalistic health points component called HealthStat:

  • Flat damaging and death detection sufficiently supports core gameplay

  • Simplicity and similarity to scripts used in previous projects reduces team learning time

  • Straightforward interface reduced complexity of integrating into project

Root Motion

Originally, all character movement was performed by scripts. However, the complex motion required to space Ronin’s combination sword slashes made animation-driven movement (root motion) a more attractive option, not only for slashes, but for many other forms of movement like walking and rolling.

  • Reduces code complexity at the cost of losing control over movement since our team had no dedicated animators

  • Keeps animations in sync with actual movements, ensuring characters in the game feel realistic

ronin_combat_2.png

More From Less

Finding ways to reuse assets and generate more content

Attack Scripts

To reduce the time the team needed to test combat mechanics, I implemented all damaging abilities in the game from 2 simple attack behaviors called BasicMeleeMove and BossStomp.

  • BasicMeleeMove uses animated colliders on a character’s limbs to generate melee attacks like Ronin’s slashes and the Monk’s punches

  • BossStomp creates a damaging field that knocks Ronin to the floor and is used in the Ghost’s explosion and (of course) the Boss’s stomp

  • Each instance is customized with different damage values and auditory/visual effects to make them feel different

NOTE: The implementations of these scripts use GetComponent on every collision, which is very inefficient and was used as a quick and easy solution. A less costly version would try to access those components from a dictionary of GameObjects to components populated as the characters spawn.

Wave System

Due to time constraints, my co-lead and I decided to reduce the scope of the project to a single level. I wrote a script called WaveManager to squeeze the most out of this one floor and convert it into a multi-stage experience that would give the game a sense of progression:

  • Each “stage” specified by list of references to enemy spawners on map, each generating one unit at the start of a wave

  • End of wave detected by death of last unit spawned

  • Notifies external systems about key moments in the player’s journey through the game (such as defeating Wave 2 or reaching the boss wave)

bottom of page