Role: Gameplay Engineer
Time Spent: 8 months
Engine: Unreal Engine 4
Language: C++
Game of the Year winner at Utah's Game Developer's Choice Awards 2021!
Combat:
I have worked on some of the base melee combat, in particular aspects that are meant to make the combat satisfying and feel responsive. I made a "melee combat aim assist" feature that rotates and moves the player character to the enemy the player is trying to hit as a means of preventing frustrating near-misses. This required making an enemy targeting system that guesses which enemy the player is trying to attack (using a number of factors like how an enemy is framed in the camera view, how far they are from the player, whether or not the player is moving towards them, etc.). This system for gauging who the player is trying to attack is also used for the player's lock-on. I contributed to the general polish and flow of the game's combat.
Combat Feedback and Animation Features:
I added some feedback for when the player takes and deals damage. I introduced some controller vibration when the player deals damage, takes damage, uses an ability, etc. I implemented the low health indicator UI, using a quadratic "ease out" function to scale up its intensity.
I created an animation component that can be placed on enemies (or other characters) to allow them to physically animate when they are hit. This is done by blending physics and animation at bones near the location where the enemy was hit and applying directional and angular impulse to emulate the force of the attack. This allows enemies to visually react to being hit, even as they animate and attack the player. In this animation component, I also added other animation helpers and features. I developed some functions to add "lag frames" to animations, brief moments of animation slowdown when the player's attack hits an enemy, that add weight and responsiveness to the combat. This simulates the feeling of resistance as your sword cuts into an enemy. I added functionality for uninterruptible animations to the component as well. I implemented this in such a way that you must explicitly cancel the animation if you would like to do so; attempting to play different animations, regardless of where or how you attempt to play them, will not interrupt the animation.
I also added inverse kinematics (IK) to the player's feet while they are in combat mode. If given more time, I would constrain the IK to prevent some weird behaviors that can be seen in-game. Additionally, the IK would look better if there were more accurate collision in the environment. My team decided it is less visually awkward to see the player character clip into objects than see her stepping on objects with no collision, so in many cases, the IK uses collision instead of visibility (it uses whichever is farther and within reach of the player's legs).
Abilities:
I created a framework for abilities that allows for designers to specify properties of an ability (cooldown, animation, particles, etc.) in a data driven way. This framework handles all the base functionality of the various abilities (their casting, cooldown, animation, etc.). These abilities can be added or swapped throughout the course of the game, and the player can rank up the abilities to higher tiers which allows the player to cast improved versions of the abilities. In addition to creating the framework, I also added the mechanics for each of the six abilities in the game. I also created a balancing tool that allows our team to estimate the average damage per second (DPS) of each ability.
The first ability I created increases the player's attack speed with each successive hit. Another ability that I added "teleports" the player behind an enemy and follows up with a slashing attack. One ability lets the player perform a leap that deals damage at their starting location and the location they land at. There is an ability that spawns fiery tires that rotate around the player and deal damage, with each hit also interrupting enemy attacks (making it act as a sort of shield). One ability applies an area of effect (AOE) root that holds enemies in place and prevents them from attacking. There is an ability that applies an effect to each enemy the player hits, making them takes ticks of damage for a period of time. There was an ability that allowed the player to consume their combo to heal themselves, though this was cut because players do not enjoy losing their combo, and the healing became redundant with our other healing systems.
Graphics and Settings:
I implemented ray tracing, NVIDIA's Deep Learning Super Sampling (DLSS), and NVIDIA Ansel (a photo mode for supported NVIDIA GPUs) to the game. I created and stored ray tracing and DLSS settings that I exposed to players through our settings UI. I performed some optimization for ray tracing and fixed some cases where ray tracing did not give the intended visuals (e.g. puddles not showing reflections due to tessellation creating a layer of translucency). Additionally, I created settings for resolution, windowed mode, and max FPS as well as doing the preliminary research into settings to include and how to go about including them. I made some general contributions to the appearance and functionality of the settings menu.
As a development tool, I added quick hotkeys to simulate different kinds of color deficiencies (deuteranopia, protanopia, and tritanopia) as well as the ability to quickly apply color corrections for those deficiencies and simulate how those deficiencies might see the project with color correction applied. This was done to allow the team to ensure our game remained accessible to everyone. The ability to apply color correction to assist with color deficiency was eventually exposed in the settings menu.
Camera:
I have added some behavior to the camera to make it follow the player without the need for the player to give camera input. This can be overridden by any camera input given by the player and will not reengage until some set period of time has passed. I also made the camera offset a bit while climbing and zoom out to a point where the next ledge above is visible to ensure the player can see where they are supposed to go. I also made adjustments to the camera's spring arm to make it gradually move to the desired length using an asymptotic weighted average. This has the tradeoff of making it briefly clip into objects but was deemed preferable to instantaneously snapping (especially in the case of very brief camera blockage). With more time, I would have made the camera anticipate what length it would need to be at ahead of time, allowing it to ease into position without clipping into the environment or having instantaneous movements.
I made tweaks to the camera values, behavior, positioning, etc. As a subtle addition, I made the camera FOV ease to a greater FOV when looking towards the sky to give a sense of awe.
Writing:
I was one of the five members of the narrative team. I created the dialogue interactions between the player character (Aella) and the ability vendor (Sedrick) in addition to writing many of the loading screen tips. I proposed the short love letter side quest that is in the game. I also worked with the rest of the narrative team to give feedback and iterate on dialogue and characters.
Other Contributions:
I created the main menu and made other contributions to the pause, settings, and credits menus. I have also made various contributions to the game's design, the building and distribution of the game, and general assistance to the team wherever I can help.
My ray tracing and DLSS additions allow the game to look and perform better. And my integration of Ansel allows us to capture that beauty with a photo mode. Images can better show off these features than words. (Note the last images were taken prior to adding ray tracing.)