Sponsored By

How wall running and high-speed movement works in Project: Haste

A walkthrough of the movement system's core design values and how they were programmed and implemented.

November 22, 2024

7 Min Read

Howdy! My name is Connor Roberts, the programmer for Project: Haste, an online first-person arena shooter made in Unity. Today I would like to run you through how I implemented the high-speed movement for our project.

Project: Haste is an arena shooter game where players chain together movement techniques to outmaneuver their opponents. Our main goal with this game was to give players ultimate control over their positioning and maneuverability. The movement system is the basis for the game, especially as the game expands from a student project at Vancouver Film School to a Unity Awards 2024 Nominee, and finally into a full-scale live-ops release where this movement will be the bread and butter of the player experience.

It starts with the design

As a team, we knew immediately when starting pre-production for Project: Haste that we wanted the basis of our game to be a satisfying movement system. I began prototyping based solely on intuition because I wanted to test movement out before we had a concrete design - this let us understand what we wanted before we sat down at the whiteboard.

This ended up being one of our greatest strengths, as I had unknowingly created the foundational system for the game; it was complete with wall-running, slides, double jumps, and a dash.

For some time we considered basing the game around grappling hooks or rocket jumping, but came to the conclusion that the dash ability solved those problems for us.

I developed this movement to have a lot of tunability so the rest of the team could easily work with it. I also made sure to use scriptable objects and remote config to allow for the team’s designers Trex Hossain and Sergio Lisuardi to tune our movement while they ran hundreds of playtests for our movement as the project matured.

Inspiration

Project: Haste had many core inspirations, such as Quake and Titanfall 2, but before we had fully studied these titles or even had the full concept for the game, the movement was largely complete - at least technically.

It’s hard for me to personally say where I drew inspiration during the early movement prototyping, even to the end of production. Not to say I didn’t study similar games, but the movement system became so core to our project that there wasn’t much time to study movement in other games.

With this in mind, I think it would be a good idea to move on to how the movement actually works, which is made up of our:

  • Custom Physics

  • Camera and Screen Space Effects

  • Animation Feedback

As Project: Haste evolved, these layers made our movement go from good to addicting.

Custom physics

At the core of our movement is my disdain for using built-in physics in game engines. I don’t know what it is, but I’d rather program it all so I can provide maximum tunability for the design team, or just for myself.

To make the physics easier on myself, I used a state machine to divide every movement state’s physics into individual closed systems with input and output parameters. With each closed system created, the state machine allowed for the inputs and outputs of these systems to feed into each other to create a predictable, tuneable, and fluid movement system.

For example, our wall run has an input of the player’s current speed and a gravity input. This speed is simply the value in meters per second, and the gravity is fed in as a tuned gravity specific to wall running. These are then used in conjunction with some collision-vector shenanigans to let you run along curved surfaces in Project: Haste.

DSA_(1).png

This then outputs a velocity value to the player, which can later be used as an input for any other movement state.

Even though the main movement mechanics are our Wall Run, Slide, and Double Jump, we also had movement mechanics that were hidden from the player such as our slide jumping, our double jump’s forward boost, or our mental ability used for affordance at ledges. Each of these had its own closed physics systems which fed together to allow the player to traverse our levels with additive speed.

Camera and screen space effects

Now with all of our movement pieces connected together, we needed to make the player feel fast. We used a bunch of tricks here to make the player feel in tune with the movement of the player, such as FOV changes mapped to the change in velocity of the player, dash lines that scale based on player speed, and changing color depending on the current movement ability. We basically wanted to make the game feel satisfying in every movement that you do, really scratching the fast-paced itch all of our brains were craving.

In addition to these tricks, we also rotate the camera depending on the player’s turn speed, which made us feel really in tune with the way we were moving. We also do this with the wall run -and all of our jumps for that matter- to tilt the player away from the surface they are on, which really sold those movement abilities for us and made it feel like you were impacting the surfaces of the game world.

Finally, we had some other screen space effects. Project: Haste is very stylized, so we wanted to add some feedback to our movement in a more stylized fashion. I created a halftone shader that we used around our project with various masks to create effects like screen transitions, and we realized we could use custom-designed masks to make different halftone shapes. We ended up using this on the edges of our screen to create feedback directly for wall running, sliding, double jumping, and even when you are using boost pads and jump pads. Matching the colors with the dash lines made everything feel very cohesive and fast.

Sniper_(1).png

Animation feedback

I can’t write this section without mentioning our team’s artists Chevi Hernandez and Jose Andres Lopez. Chevi really worked wonders on all of our character animations, along with weapon models and animations done by Jose, which became a key indicator for our players in order to maintain understanding during the high-octane gameplay found while players duke it out in the Haste League.

We ultimately had many layers of animation present, including a unique animation for each directional input for each movement ability- this was used to ensure players fully understand their movements as they make them, and gives a point of reference for what a movement action is going to do to your direction in gameplay.

Mixing these animations with SFX and music from our composer and SFX designer Declan Johnston means that players have all the tools in their tool belt in order to fully understand what is happening with their own character, as well as their surroundings in a match.

Final takeaway

I’d like to highlight how making a game within a short time frame really does take a village. Project: Haste was only in development for four months, which looking back is incredibly short. It is thanks to my amazing team that I am fortunate enough to even be writing about our project, let alone programming away and getting it prepared for a full scale release. I feel truly lucky. Our process was very interesting; by the book in some ways, and very much not for others. The communication and cohesive vision of this team allowed for something pivotal to our gameplay, our movement, to be proved out and iterated on from week one of pre-production, needing few revisions as the game matured. Being the programmer for the team allowed me to focus in and get a mind map of how the game was going to function in its entirety, and that really started with that one clear goal of having precise and responsive fast-paced movement. I have loved watching that mind map transform into a game that I can see with the help of my team, it truly has been the most rewarding experience.

The Project: Haste team and myself really hope you have enjoyed reading this! If you would like more information about our upcoming release of Haste or the development of Project: Haste, feel free to contact us at [email protected]

Or if you are interested in Vancouver Film School’s Game Design program where this all started, click here.

Daily news, dev blogs, and stories from Game Developer straight to your inbox

You May Also Like