top of page

Razor Cyclone

Created with Expired Jam as their sole programmer.

Period: Aug 2024 - May 2025

Engine: Unity 2021.3.10f1

My Role: I was the sole programmer for Razor Cyclone, responsible for implementing all gameplay systems and determining the internal program and game architecture. While I wasn't the game designer, I worked closely with them throughout development, offering feedback, suggesting improvements, and ensuring the mechanics supported a fun and engaging experience.

​

Notable Contributions:

  • Enemy Movement via Boid Steering Behaviors

The enemies in Razor Cyclone navigate by using boid-based steering behaviors including seek, pursuit, wander, flee, and collision avoidance. Smart mixes of these behaviors led enemies to move in ways that felt organic. The best example of this is our Hunter enemy. The Hunter uses seek and a bit of wander to fly towards the player, but will flee for a short duration if it either damages the player or 'just misses' the player.

  • Ricochet Mechanic with Predictive Targeting​​

The player can "spin" their motorcycle to gain ricochet charges.​ When the cannon is fired with charges, the fired projectile can bounce off walls and enemies up to the number of charges when fired. A key feature is that ricochets automatically aim toward the closest enemy whenever they ricochet. To improve reliability, this aiming uses predictive targeting and estimates a future position of the enemy, ensuring accurate bounces even on fast-moving targets. The ricochet feature is satisfying to use while also solving a game design issue Razor Cyclone used to have: a lack of ranged wave clear. Without ricochets, the cannon can only hit one enemy. 

  • Object Pooling with Frame Budgeting

Projectiles, VFX objects, and entire enemy waves are pooled to reduce instantiation overhead. To prevent frame hitches during large-scale pooling, pooling operations are distributed across multiple frames with a configurable per-frame budget, maintaining smooth performance throughout gameplay.​

  • UI Implementation

I implemented all in-game UI elements, including menus, gauges, dynamic crosshairs, the spin counter, almanac, and more. I also created all accompanying UI animations and effects. One of the most critical systems was the dynamic crosshair, which addressed a major early gameplay issue with the cannon. Since the cannon fires a projectile affected by player velocity and can be aimed in any direction (not just forward), I used relatively simple linear algebra to accurately position the crosshair based on the cannon’s aim and the player’s movement. This resulted in a visually satisfying and highly accurate aiming system that gives players intuitive control over their shots.

  • Unity Inspector Tooltips for Designer-Facing Variables

To make the development process smoother for our game designer, I gave the Unity Tooltip() attribute to all important tunable variables. In these tooltips, I wrote clear, explicit descriptions, often including example values or usage notes. This allowed the designer to understand each variable's purpose directly in the inspector. As a result, the designer almost never had to ask me which values did what.

​

About Expired Jam: Expired Jam is a student-led game studio I co-founded at Purdue. What began as a small team of students working on a single game jam project has grown into a multidisciplinary group dedicated to building original games whose design focuses on enabling emergent gameplay. In just over a year, we’ve fully developed and released two titles—Dungeons and Doors and Razor Cyclone—with all code, art, and audio made in-house.

bottom of page