Controller Rumble

Controller Rumble is one of those tricks that literally every game uses. But I think due to its prevalence, when it is done particularly well, it tends to go unnoticed - almost like a secret ingredient. Especially when it comes to combat, a good controller rumble is often the difference between something feeling impactful or not.

For example, the controller rumble used in Destiny for gun fire and projectile impacts has always felt extremely satisfying to me. There's something about the frequency and intensity that matches well with the tracer fire, muzzle flash, and impact particles - it feels extremely tight.


Another implementation that I recall standing out was the Batmobile in Arkham Knight. I remember there being quite a bit of subtly and nuance to how it was used - slight directionally-appropriate triggering on skid turns, impacts, boosting, etc.

Image result for arkham knight batmobile

For God of War, thanks to the infinite patience and effort of George Mawle and Phil Wilkins, (Game play programmers extraordinaire!) the rumble system was beefed up in order to enable a lot of mad scientist-like fine tuning and tweaking. So, I thought it might be cool to go through the thought process for a few of the more obscure rumbles as well as some general implementation.

First off, more important than any individual rumble, is the need for consistency. Once you determine the places and events you want to trigger a rumble, it’s crucial to be consistent about it. If you determine that hitting or connecting with an enemy is going to trigger a rumble, then it should always be true. If it isn’t, then whatever attack is missing a rumble has essentially been sabotaged. It can actually make attacks feel weaker; something will just feel off.

We use rumbles for a lot of common and not so common places such as:
  • Landing Hits
  • Heavy contact with the ground (Weapons, landing)
  • Any type of explosion / particle effect triggering.
  • Charge-up animations
  • Big environmental interactions - like a large door opening
  • Enemies who land from a hit reaction within a small distance (about 10 meters)
  • Enemies who impact walls within a short distance (about 10 meters)
  • And in the vein of consistency: this is true whether or not it’s a cinematic, a synchronized move, or just a basic attack move. The rules always apply.
Rumble Types

Starting with ps4, both the large (left) and small (right) motors can be triggered with analog values. To me, the size of the right motor, especially when isolated, tends to feel more like a grinding or cutting sensation. The heavier motor on the left naturally lends itself to the sensation of explosions and blunt impacts when isolated.

Image result for ps4 dual shock open


In order to ensure fast and consistent coverage in the majority of cases, I find it easiest to use a shared library of rumbles. One way I've found effective is to create varying durations of the same amplitude (medium to high) balanced equally across both motors. This means the duration is determining the, “strength,” so to speak. For these generic rumbles, I find it makes sense to use as very little ramp down/up and essentially just set the values to max on the first frame, and zero them out on the last. You end up with very tight and easily modular bursts that I find to be more universally useful when you need blanket coverage.

For example, something like:
  • rumble_venti = 0.65 seconds
  • rumble_grande = 0.4 seconds
  • rumble_tall = 0.25 seconds
  • rumble_short = 0.1 seconds
But, there were several instances in God of War where it felt like it made sense to focus on authoring custom/special rumbles to try and illicit a unique force feedback feeling by heavily favoring one motor over the other, authoring special curves or fall offs, or stacking different rumbles on top of one another.


Axe Sticks /Basic Combo

Taking a quick detour to explain what I mean by, "Axe Stick," -- it's a special feature we created for God of War in an attempt to create a more advanced form of old school hit pause. The concept was to enhance the feeling of connecting with an enemy by rather than simply pausing both actors animations for a brief time period (the old school method) the idea was to see if we could do it with a higher level of fidelity. We use a combination of animation blending and a custom IK, “pinning,” system. When Kratos connects with an enemy we pin the axe in the location of contact (after some slight correction/prediction) and both Kratos and the enemy transition into a completely new animation on the moment of impact with little to no tween time.



In this new animation, there are several frames of what we called, “drag” where Kratos continues moving his arm through, slowly, but keeps the axe in place. Then, after only a few frames (depending on which attack), Kratos tears the axe through and slightly changes the trajectory of his initial swing. It was important for us to also keep the collision for the axe on so that it still functions as an attack. A lot of time and effort went into making sure these “sticks” were as fast as possible while still eliciting the feeling of connection. 

To enhance this effect, there are actually two rumbles that play on connection. The first is a quick, evenly balanced burst with no tween in or out. Then immediately after, a heavily right/small motor focused rumble plays with a long fall off. Paired with the animation, the idea was to emphasize the feel of tearing the axe out of the enemy.
Axe Throws

It was important to make the R1 and R2 Axe throws as distinct as possible in as many ways as possible -- controller rumble being no exception. We also wanted to make sure that you could tell the difference between the passive rumble and when it connects with an enemy or hits a surface.

For the horizontal throw, because it spins incredibly fast and was meant as the quick throw, we went with an extremely sharp rumble, heavily favoring the right/lighter motor.


But for the vertical throw, we wanted to emphasize the weight of the axe as it spins, almost as if you can feel the rotation. To get this effect we used a looping sawtooth that equally favored both motors for a heavier feel -- almost like the rumble is rotating with the axe.


Whenever we impact with a surface or enemy, the rumble also heavily favors the left motor with little to no ramp time. This makes the impact more pronounced.

Axe Recall

A similar effect was used in combination with two other rumbles for the recall. As the recall
starts there's quick burst rumble with lots of oscillation to simulate the feeling of the axe being ripped out (to go with the wiggle!). Afterward, we use a looping rumble while the axe is spinning through the air with lower amplitude, favoring the smaller/lighter motor.



Then the catch quickly maxes out both motors with lots of oscillation so it feels as snappy as possible. Here it is in sequence. (Another special thanks to George for the awesome debug!)


Sprinting and Blocking

The last two rumbles were the most controversial and took the longest time to hone in simply because the frequency of sprinting and blocking is so high. It took a lot of extra iteration and feedback from team members to get these in a good place.

For the sprint, we went with a much smoother (moderate tween in/out) pyramid-like rumble that repeated with a noticeable gap of time in between each rumble. This was an attempt to illicit the feeling of footsteps -- as if Kratos’s first footsteps after starting a sprint were hitting the ground especially hard.


Opening the shield was broken into two parts -- one low strength smooth/pyramid rumble for the opening of the shield and a stronger burst when the shield basically settles / is done shifting.


Rumble as Communication

Lastly, rumble can be used pretty effectively as a communication device - signaling the completion of a charge, the replenishment of a cooldown, a critical / low health state, etc. In God of War, it was ramped up slowly to communicate that a throw was being charged, and when complete - a stronger burst rumble would play to communicate completion. This allows the player to essentially feel the game mechanics and hopefully utilize them more seamlessly in combat.

We might have gone a little overboard tweaking these rumbles, but it seems like the results have been pretty positive. It obviously takes a ton of things to make something feel satisfying, but rumble is always a good place to start!

Comments

  1. These posts are fascinating and invaluable. Keep it up, and thanks!

    ReplyDelete
  2. Absolutely amazing. I can't wait to read more from you, each post is a mine of incredible and crucial advice that helps me make my games a lot better.

    ReplyDelete
  3. This Blog is awesome! I never thought like this! It's hard to find content, but so useful! Please do not stop publishing!

    ReplyDelete
  4. As a game design student focusing on player controllers and game feel I can't express how precious those articles are. Thank you so much!

    ReplyDelete

Post a Comment

Popular posts from this blog