← Back to portfolio

PSQ Game Project 3  ·  Breakdown

FINAL BLAZE

An atmospheric action-platformer — I was responsible for the player controller, 2D and 3D movement, sound implementation and the intro sequence.

Final Blaze is an atmospheric action platformer built around a dynamic shift between 3D and 2D movement sections. Set inside a large, industrial foundry, the game blends combat with environmental puzzles and encourages exploration through its layered level design and moody art direction.

This was our third project at PSQ, made by one of the smaller teams we've had — 10 people in total, with 3 programmers, 2 designers, and the rest being artists. The smaller scope pushed us to be deliberate about what we built and how we built it.

My primary responsibility was the player character, with how combat abilties and mechaics work. The player works of a heat system that acts as both the health and as a resource for the various combat mechanics. Performing well and killing enemies gives you heat, adding more strength and a different color to yourself.

The transition system between 2D and 3D, then also how they handled was under my responsbility aswell. Both modes had significantly different behaviours, so a large part of the work was making shared systems — like moving platforms and wind pipes — behave consistently and correctly across both states.

The controller used my earlier specialisation project Unity PCC as a foundation, which let the team start prototyping quickly. Many of its features went unused in the final game, but having that base saved a significant amount of early setup time.

I also handled sound implementation — building a system of audio source objects that designers could place freely in the world without needing programmer involvement, keeping the workflow relatively clean.

UI naviation and implementation of the animation logic was something I handled to. The animation side ended up in a solid place — a well-structured state tree that used my built in hooks from my acitivty system, and to trigger enter and active animation states separately without much cluter.

The activity system in the controller was particularly useful for animation — being able to fire logic both when a state starts and while it's actively running made a lot of the trickier transitions clean and predictable.
Combat Mechanics
Dashing, Smashing and Shooting.
In Detail
How the general gist of each combat mechanic works

The combat system was set up with the intentionally of being gradually unlocked as you progressed through the game, using them both as as means for traversing but also combat. Each ability has a cost assosticated too it, represented as heat, which is also your hitpoints. Performing well means you earn more heat in combat, becoming temporarily stronger.

Dashing consit 2 parts, a seperate hitobx that runs for collision during the dash duration. Secondly when the dash is engaged and the acitivty for dash has started, we send the player forward with reduced controll over a certain speed and duration, which follows an animation graph for the feel of the duration. This allows us to change it to be a sharp instant speed that tappers of, or a consitent speed during the whole duration.

Smashing works similar to dashing, but instead of running a consant hitobx during the duration, we send out a sphereCast upon contact with the floor that calls for the same events that the dash does damage too.

Shooting works in that we're spawning a prefab of a projectile, that on start and creation, obtains the information from the player, such as charge duration and heat levels, which upon release gets set as variables for that one induvidual projectile. The chost of a charged ability significantly decreases heat, at at max charge causes an AOE explosion.

Showcase Showcase Some of the combat in action
Dashing Smashing Dashing and smashing Both abilties in a debug enviorment
Shooting Shooting Shooting in a debug enviorment
2D & 3D Movement
Directional burst with cooldown, recovery, and chained slide entry.
In Detail
Dash direction sampling and momentum hand-off

Describe how direction is sampled — is it from the input vector, camera forward, or a blend? What happens when no directional input is held?

Explain the cooldown and recovery system. Is it a single charge, multiple charges, or a timed reset? How does it communicate state to the player?

What makes the momentum handoff feel good? How does it chain into a slide or wall run? Any edge cases around mid-air dashes or overlapping abilities?

3D 3D Movement 3D Movement in a small showcase
2D 2D Movement 2D Movement in a small showcase
Animation States
A simple system driven by triggers and activties
In Detail
Driven by an activty system and triggers

While the actual animations and the tree themselves are not exactly difficulty, it's more that it's picking up a skill of learning how to do it that was the biggest challenge. Between figuring out the best way to call, trigger and halt animations. The result works relatively well!

The main part is that most of the animations uses IK and blending between each animations, which the Unity animator handled pretty well. And by directly calling a specific state, we can have better control over when and what actually moves, especially after setting each animation to trigger only specific parts with the avatar mask.

3D Movement Anim Tree A small showcase of it.
2D Shooting Tree The simple shooting tree
Anim Anim Showcase Closer look on the anims
Challenge
— Between the 2D and 3D movement inside of a Wind tunnel / Steam pipe, proved very difficulty to make work well.
— Implimenting functional sound was quite the challange, between volumes and saves.
Solution
— By properly storing the velocity, I managed to make the functions that add ontop of the existing velocity directly to the reference velocity of the player. Then splitting it off into two different amounts for 2D and 3D
— By making most of our sound systems and save systems into Singletons, we managed to create a decently functional system for having little experience with it.
01Time management — Due to being a smaller team, having to manage time effectively was the biggest take-away, as things take along longer when you're learning a new skill or researching something
02Various different asepcts — Animations in unity, UI naviagation and sounds where new skills I picked up.
03Taking Feedback — We had a lot of communication issues at the start, but during the project I learnt to take better care of the communication at least between us programmers, and that also meant getting better at taking feedback.
close
No annotation
← Portfolio ↑ Back to Top