top of page

CHRONOCLASM

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

DESCRIPTION

    Chronoclasm is a first person shooter roguelite where the player can slow and 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, manage the GitHub repository, and handle QA testing and bug fixing.

    Additionally, I designed the core combat. Keeping our vision in mind, I designed the enemies and boss, balanced their combat values, and managed the game's difficulty.

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

Engineer Responsibilities

  • Developed ~90% of architecture for the game.

  • Created prototype systems to showcase options before full implementation.

  • Advised team on technical solutions.

  • Streamlined pipelines.

  • Maintained GitHub repository.

  • Created builds weekly.

  • QA testing and bug fixing.
  • Optimization.
  • Researched solutions for project problems.

Engineering Skills Learned

  • Applying OOP patterns, like observer, state machines and pooling.

  • Practical applications for Linear Algebra in games.
  • Pooling complicated objects.

  • Creating state machines.

  • Input manager with rebind support.

  • Robust save system.
  • Implementing randomness in multiple way.

  • Writing clear documentation for systems.
  • Managing team GitHub.

Design Responsibilities

  • Designed enemies and boss.

  • Designed player's Timestop Grenade.

  • Balanced combat for all difficulty modes.

  • Brainstormed to achieve and refine game vision.

  • Developed tutorial sequencing.

  • Established playtest goals and plans.

  • Recorded game play footage for marketing material.

  • Competitive analysis of similar games.

Design Skills Learned

  • Developing design pillars, vision statement, and target audience.

  • Collaboratively designing with others.
  • Playing with existing systems to create new gameplay.

  • Compromise with team members.

  • Analyzing playtest data and creating a plan.

  • Designing difficulty around a target audience.

  • Establishing pacing to the core combat.

  • Tying systems into narrative.

Engineering

Time Stop Structure

  • This architecture supported the core mechanic of freezing time using Observer and Singleton 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 Target architecture made it easy to review and improve before implementation.

  • Designed to be simple and expandable.

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

  • Flexibility allowed ResourceBar to be used outside target structure, such as the time gauge.

  • This system was used creatively to implement bubble shields on enemies!

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

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 for cheap.
  • The diagram to the right was done 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.

 

Vector Demo.PNG

Click to view in a higher resolution

Extend Pool Func.PNG

Click to view in a higher resolution

Pooling & Performance

  • Core gameplay of enemy hordes and hails of bullets required pooling to prevent gameplay lag.

  • 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, handles requests and returns for pooled objects.

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

Audio Back End

  • One blocker was our Audio Designer struggled with the Unity audio pipeline, so I established a new one.

  • AudioClipSO, pictured to the right, is an object that contains data and functions the designer desired.

  • It allowed for editing sounds in one place to immediately update every instance of that sound.

  • 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

Design

Core Combat Loop

  • A core pillar was chaotic, bullet-hell combat which I envisioned as dodgeball in The Matrix.

  • My favorite goal was making time stop a reflexive instinct for the player.

    • Reducing cover in levels was done to keep time stop the most reliable defensive option.

    • Binding time stop as "Hold to use" established a link similar to ADS in other shooters.

  • Keeping time stop a resource instead of cooldown expanded player's choice on when and how to use it, from short dodges to long waves of bullets.
  • Bullets were made large to feel like dodgeballs, making them more visible and more satisfying to dodge around.

Hover to grow video

Hover to grow video

Enemies

  • Enemies are my favorite part of games as they act as primary obstacles. As bullet hell encompasses numbers, I designed simple enemies that attacked in hordes.

  • Similar to Left 4 Dead, there were Normal and Elite enemies that could be mixed and matched.

  • Rangers [Normal] stayed back to bait the player into combat.

  • Babies [Normal] were fast and startle the player, but easily defeated using time stop.

  • Mines [Elite] were a double-edged sword that created bombs dangerous to the player and enemies, encouraging creative play via resourcefulness.

  • Turrets [Elite] overwhelmed the player with bullets while their shields punished reckless usage of time stop and grenades, encouraging more thoughtful play.

Difficulty & Pacing

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

  • Pacing the difficulty during the game ensured the player could get used to enemies and gameplay style before engaging the more difficult challenges.

  • A trend from playtests was that player skill level affected enjoyment. To improve enjoyment for both extremes, I added customizable difficulty modes 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 more of it.
Difficulty and Pacing.png

Click to view in a higher resolution

Time Grenade.png

Click to view in a higher resolution

Time Grenade

  • The time grenade was a controversial topic amongst the team as some loved it while others preferred a classic version that acted as a normal grenade.

  • To ensure every voice was heard, I experimented to find a middle ground between the two.

  • The two arguments were the classic grenade was too generic while the time stop grenade wasn't impactful enough.
  • The solution was a combination grenade that would detonate, freeze time, and detonate again. The whole team loved it as it felt impactful while still making our core mechanic front and center.

Scope & Cuts

  • We were bound to run into issues with scope and I wanted to ensure our team maintained healthy habits.

  • Chronoclasm was originally third person but we lacked animation and had camera issues. Switching to third person resolved both of these blockers in one go.

  • Mid way of development, I realized our existing upgrade system was dangerously behind schedule. It was overly ambitious and needed time we didn't have, so I suggested scaling back majorly to the system we have now.

  • The suggestion and decision were both made before too much time was put into the old system, so little time was lost.

Upgrade Comparison.png

Click to view in a higher resolution

bottom of page