Dash

     This is the dash system. When Dash is pressed, there is a check to make sure the player unlocked the ability, as well as passing a check to make sure the player isn't in the middle of a dash, that the player isn't jumping, and that it is not on cooldown. The dash uses an impulse that takes the players forward vector and propels them in that direction 3000x.

Jump

     Jump had to be adjusted to account for only being able to jump again if a wall was within range. Every time jump was pressed it would disable sliding and enable on release, to prevent wallslide from conflicting and hindering Z velocity. If the player is in a position they can jump, and they are grounded (No Z velocity) the code reduces gravity to the player to leap high into the air. If the player isn't grounded, a line trace goes out to detect if the player can jump off a nearby wall. The code uses Launches to push the player outward opposite the direction they are facing. Lastly, releasing jump increases gravity to allow lightning fast fall to keep the momentum of the game nice and fluid.

Camera

     The attack and movement had to be mixed in with camera controls in order to get the settings I wanted. Camera lag made tracking less static, but moving forward meant the camera fell behind. In order to combat this, a blueprint was set up in order to detect movement direction and push the springarm forward in that direction while still using its lag feature. As for attack, I wanted to penalize the player if they spammed it. I found the most interesting way was to remove agency by zooming in per attack. The idea was that a character attacking an enemy would not be paying attention to the environment around them, and I wanted to convey that in a game. When the player stops attacking for a second, the camera returns. I definitely wanted the player to have a new experience and possibly create emergent gameplay (speedrun, always attacking?)