An action adventure where you explore the island of Finfall. Seeking to find the relics and your way home.
FinFall is a very ambitious semester-long student game project. Our team was a combination of game designers, artists, and a sound designer. My main role was gameplay programming and UX design.
Role: Gameplay Programmer
Team Size: 9
Time Frame: 12 Weeks
Engine: Unreal Engine 5
I implemented the combat system with 3 different weapon types, including sword, bow, and fishing rod. I also sourced and imported animations from Mixamo.
Sword Combat
I created sword combat system that player can continuosly attack to perform a string of attacks. The attack string would reset after the last attack or after certain amount of time have passed.
For hit detection, I used animation notifiers to trigger multiple sphere traces during the attack animation. This allows the hurtbox to be more accurate to the weapon compared to simply using a static hurtbox.
This is the sword in action with the dummy. I also created health, damage, and stun system.
Bow Combat
The bow allows player to aim, charge, and shoot. It has dynamic damage and velocity based on how long the player pull back the bow. I also implemented the dynamic crosshair that indicates the charge level.
I utilized BlendSpace2D to blend the aiming animations to allow the character to aim up and down. Using Animation Blueprint, I blended aiming animations with locomotion to allow player to walk while aiming.
Since our game was in third person perspective, I had to use various line traces and checks to make sure the arrow flies forward and straight towards the crosshair.
Fishing Rod Combat
The third weapon is the fishing rod that allow player to pull enemies towards them. It was a challenge to achieve the string and bobber physics. I used the physics constraint component to connect the bobber to the pole, then I used the cable component to create the visual of a string.
When the rod was casted, I launched the bobber while disabling the limits on the physics constraint to allow the bobber to fly freely. The same thing happen in reversed order when the player reel in the rod.
This is the fishing rod in action with the dummy. When an enemy was pulled by the rod, I launch them towards the player with the velocity based on the distance from the player. Pulled enemy become stunned for a few seconds, letting the player attack.
I created the enemy AI system using behavior trees. They can patrol, chase, circle around the player, and attack.
I also designed and implemented the enemy spawner system as a tool for other designers to easily create encounters throughout the level. It has various spawn settings that can be edited and has visual representation of the spawn range and direction for ease of use.
I implemented 2 enemy types: the piranha and the shark. The spawner system also supports spawning multiple types of enemy.
When group spawning, sometimes enemy would spawn on top of each other. To fix this, I added an algorithm that checks if there is already an enemy close to the spawn location. If there is, the system would randomize a new location until it finds a location that is not occupied by another enemy or until it reaches the maximum attempts.
Using Figma, I designed UI layouts for the main menu, pause menu, and settings. The design was made to show layout and user flow, which I then passed to the UI artist.
I made the main menu, pause menu, settings, and end credit for the game. Implementing 2D art assets and using widget blueprint to script and animate the UI.
Main Menu
Pause Menu & Settings
I helped replacing placeholder UI elements with the final art assets for the HUD, inventory, and dialogue. I animated the inventory open animation and scripted character viewport.
Inventory
Dialogue
I implemented 6 quests for the game using a custom quest system plugin created by our technical designer.
Additionally, I created a quest outline template designed to help us with quest implementation and staying organized. The template was passed to the narrative designer to fill out the details.
Here is the filled out template for all of the quest in the game, which I then use as the outline to implement the quests in Unreal Engine.
I gained immense gameplay programming experience in Unreal Engine 5 from implementing the entire combat and enemy system.
I also got to practice my UX/UI design skills by designing and implementing the UI for the game.
With FinFall being the biggest student project I worked on, I learned valuable lessons about managing scope from having to make content cuts to meet our deadline.
Lastly, as one of the producer, I gained experience in project management and learned the importance of interpersonal communication from experiencing various team dynamics issues.