Shoyo
Vancouver Film School | Game Designer & Programmer | March 2024 ~ June 2024 | itch.io page​
Shoyo is a 2D action platformer in which you play the titular protagonist, Shoyo, on her quest for personal freedom against the CEO of the Megalo Corporation, Mr. Mania. Armed with advanced yo-yos and the ability to stop time, battle your way through the interior of the mech, one room at a time till you reach the top and put an end to Mr. Mania’s evil doings once and for all.
​​
As my first proper venture into Unity to make a game, Shoyo was an incredible learning experience on both a technical and collaborative level. Learning to coordinate with everyone on the team to meet deadlines, while also trying to keep pace with necessary features and bug-fixing was a challenging but nonetheless enjoyable time.
​
​
Accomplishments
Utilizing A* Pathfinding Project and state machines I created the enemy behavior for this project
A wave-based encounter system that served as the cornerstone for all combat encounters
AI Behavior



An example of the pathfinding check and the subsequent attack coroutine used for enemies. TimeManager is a singleton that controls and interpolates the timescale when the player activates their time-freezing activity. I would improve this by tying some of these methods to animation events, for a more accurate syncing with attack animations.
THE DESIGN
For AI navigation the A* Pathfinding Project was used to streamline the process for 2D. The map consists of a navigation grid that enemies reference to find the shortest valid path to the player, executing attacks once they're within range.
​​
Enemy attacks were designed primarily around showcasing her yo-yo attacks. For instance, enemy pathing behavior was implemented so that they slowed down, or stopped to charge up an attack right at the fringes of Shoyo's yo-yo attack range to teach players the maximum range of her attacks.
Wave-Based Combat


The Spawning Coroutine used in every room with a battle. Enemies are spawned at their appropriate spawn points based on whether they're ground enemies or not, after which they are removed from the total enemy count for that wave. A small improvement I would make would be to use an Enum for the different enemy types instead of comparing tags.

The list of enemies that the Coroutine uses to spawn enemies. Enemy point values are subtracted from the total points of the wave to create the list. This is how enemy point values serve as weights for their spawn frequency.
OVERVIEW
At the core of all of our engagements is a wave-based battling system that gets activated in each of our designated battling arenas. Each encounter consists of a certain number of waves, with a point budget that increases every wave. Enemies are assigned point values, which also double as a weight for how often they spawn per wave. Enemies are subsequently spawned from set spawn points that can be placed anywhere on the map, and the doors lock themselves till the room is cleared.
I designed and implemented the system with an emphasis on quick iteration, providing easy access to critical variables like wave/point configurations, enemy types, spawn point locations, and activation trigger placements.
Parallax


The coroutine used to emulate the stomping of a foot. The entire motion follows an animation curve after which an impulse value is sent to the Camera manager singleton to shake the camera. I would improve this using the event handling system used for my later project Retirement Rumble, to cutdown on the number of singletons.
WHY PARALLAX?
During initial playtests with a static background, a common piece of feedback was the confusion surrounding the game environment. Players could gather that they were fighting indoors somewhere, but the idea of fighting inside of a mech, which was a core aesthetic pillar, was lost.
​
My solution was to implement a parallax effect that not only does the standard horizontal scroll but also a vertical movement of the background synced with a camera shake at the end to sell the illusion. While it wasn't the perfect solution as it still took some time for players to fully understand that they were inside of a mech, the parallax gave them enough clues that they were inside of a moving object. This was enough for them to eventually piece it together once they reached the first outdoor section of the game.
​​​​