top of page

CHRONOCLASM

Masters in Game Design and Development Project
1 Year | Aug. 2022 - Aug. 2023

Summary

    Chronoclasm is a first person shooter roguelite where the player can stop time at will. I acted as the Lead Engineer and Lead Combat Designer in a team of 4.

​

    I developed ~90% of the project's code, managed the GitHub repository, and handled QA testing and debugging.

​

    Additionally, I designed the core combat. Keeping our vision in mind, I designed the enemies and boss, balanced the combat, and managed the game's difficulty for both entertainment and accessibility.

​

    With my experience working on other large projects, such as Disaster Golf, I also maintained the project's schedule, scope, and other administrative tasks.

Time Stop Structure

  • This architecture supported the core mechanic of freezing time using OOP patterns.

  • TimeStopManager changed global time at the player's command.
  • TimeAffectedEntity handled how each object was affected by the time system.
  • LocalTimer streamlined time-based systems without compromising performance.
  • ITimeObserver kept time compartmentalized but expandable.
  • ITimeInfluencer allowed other systems to utilize its functionality in its own way.
Time System Diagram.png

Click to view in a higher resolution

Target Diagram.png

Click to view in a higher resolution

Target Structure

  • This architecture was made to control the behavior of entities that could be the target of an attack.

  • This Target diagram made it easy to review and improve before implementation.

  • Abstraction ensured each target type was created with a purpose in mind.

  • The encapsulated ResourceBar allowed usage outside the Target structure.

  • In retrospect, I would've loved to expand the system to include buffs and debuffs by adding an 'EffectManager'.

Audio Back End

  • Our Audio Designer struggled with the existing audio pipeline, so I established a new one.

  • AudioClipSO, pictured to the right, is an object that encapsulated all desired settings in one place.

  • Editing a sound in one place immediately updated every instance of that sound in the game.

  • Aside from streamlining the addition of sounds to the files, it also streamlined their integration to code.

  • The Audio Designer was incredibly happy with this system saved both time and sanity.

Audio Backend.PNG

Click to view in a higher resolution

Extend Pool Func.PNG

Click to view in a higher resolution

Pooling & Performance

  • All of the enemies and bullets required pooling for for optimal performance.

  • Pooled objects include: enemies, projectiles, health and time orbs, and generic VFX such as muzzle flashes.

  • To the left is a snippet of code for a Pool object that auto expands. Full script available to download.

  • Pooling managers, such as the EnemyPoolManager, handled requests and returned pooled objects.

  • In public playtesting, pooling these objects drastically minimized lag spikes associated with the garbage collector and CPU usage.

Difficulty

  • I was responsible of balancing the gameplay difficulty for pacing and accessibility.

  • A trend from playtests was that player skill level dramatically affected enjoyment, with some unable to finish the demo at all. 
  • To improve enjoyment for both skill extremes, I added a customizable difficulty so players could challenge themselves in their own way.
  • In playtests, the solutions for both pacing and accessibility were hugely successful.
    • Players said the pacing made them feel more prepared for the chaos near the end of the game.
    • The difficulty settings allowed more players to get further into the game and enjoy it more.
Difficulty and Pacing.png

Click to view in a higher resolution

Vector Demo.PNG

Click to view in a higher resolution

Linear Algebra

  • Heavy use of linear algebra to implement player movement, AI, and more.

  • Favorite application was using DOT product to establish 'vision cones' for enemies and the boss.
  • The diagram to the right was made to figure out how to make enemies flinch in the direction they were shot.
    • The vector between the center and impact point crossed with a down vector gave the perfect rotation axis.

 

Time Grenade

  • The time grenade was controversial amongst the team as some loved it while others preferred a traditional blast grenade.

  • After trial and error with the team, I found a middle ground between the two styles where the grenade would blast, freeze time, and blast again. 

  • The whole team loved it, ensuring that everyone on the team could be happy with the final product.

Time Grenade.png

Click to view in a higher resolution

bottom of page