Jetpack-ball character movement prototype
A prototype of a new third-person movement system that I’m experimenting with in Unreal Engine 4, a mix between a jetpack-propelled character controller and a fully physics-driven ball.
It’s an ongoing thing that I go back to from time to time to try new stuff.
Here is some footage of it :
I learnt quite a bunch of new things while making this :
- Use of UE4 blueprint visual scripting (this is entirely made with blueprint)
- Set up of simple animations in 3DS Max to be imported in UE4
- Set up of a custom animation graph in UE4
- Basic ragdoll setup in UE4, and setup of “physics blend” between keyframe animation and physics simulation
- Use of UE4’s material editor and particle FX editor (way more than I initially thought : P )
- And other minor things like creating physics materials, etc…
Here are the core aspects I wanted to experiment with, they’re the basis for this project :
- A movement system based on momentum and propulsion. I love the mix of precise control, anticipation, and course correction that you can find in Gravity Rush’s shifts, Rocket League’s aerials, or Grow Home’s jetpack jumps (and more).
- Acrobatic feel. I’d like all this build up of speed and momentum to turn into flips and spins, to break up the silhouette of the character and make the whole thing more visually interesting, and enhance the “aerial” feeling of the movement when you launch yourself into the air (also I like flips and spins).
- Smooth animation that reflects the above. The character’s movements should reflect the inertia driving him, and smoothly transition in and out of the ball (this to help with the “acrobatic feel”)
- Very granular control, meaningful measurement on sticks and triggers to allow for natural player skill progression. I love it when a game feels like every move you make can be made more precisely and more elegantly/efficiently as you come to master the controls. Again, this is something felt in Gravity Rush and Rocket League, but also in games like Trials, Super Meat Boy, or any driving game (you can always shave off a few milliseconds because you can always make that turn curve even better)
It’s still nowhere near complete, but the core concepts are playable.
The character glides over the ground via a jetpack, steering is harder at max speed, and deceleration takes time, but all of this can be mitigated, and used rather than endured, by careful measurement of the analog stick and trigger for compensation/counter-propulsion.
Character orientation is entirely separate from its direction (driven by momentum), allowing for mid-air counter-propulsion or direction changes.
There is a small jump available, but it doesn’t go very high, and really only serves adjusting trajectory before turning into a ball and bouncing on something, which is the only proper way of getting some serious air time.
As jetpack movement keeps rather horizontal, the bouncing ball mechanic makes transforming momentum core to the movement, it is simply necessary.
At the press of a button, the character can transition in and out of ball form.
All his current momentum will carry over to the physics sim.
As a ball, the player has zero control over the direction, the ball’s behaviour is entirely based on physics simulation.
However, the left stick controls the ball’s orientation. At the press of a button, the character will “dash” out of the ball, he will be propelled in the direction given by the stick.
This introduces a core movement cycle of :
1. build up momentum (jetpack propulsion),
2. transform momentum (jump into ball form to bounce into something, giving up control),
3. course correction (dash out of ball form to correct your direction)
Since you lose control during step 2, you have to anticipate this in step 1, and/or correct it in step 3.
In my opinion the fun of a momentum based system is in losing some of the control, because part of the way you move is dictated by an external force accumulated over time, that you can influence or transform but not instantly stop.
It’s not about imprecision though, your inputs are still very precise, they’re just limited in their impact, because they’re not the only driving force.
How well you do is a mix between where you think you’ll be once you lose control, where you actually end up once it happens, and how good you are at correcting it with the limited set of inputs that you’re left with.
On top of this core cycle, I recently started experimenting with a new mechanic, the “slide mode” for the ball, that you can toggle at any time while in ball form.
it has 2 effects :
1. it removes all bounciness, and all friction (momentum is kept indefinitely if on a flat surface)
– it’s a different way of transforming momentum against the same surfaces (sometimes you don’t really need to go as high as a bounce will take you)
– it’s a twist on the same gameplay : it’s still about anticipating loss of control, building up and transforming momentum, but in a different way
2. it makes the ball heavier
– allows tweaking of in-air trajectory as a ball (let’s say, if you wanted to grab a perfect arc of airborne collectibles, or get through a tight spot in between airborne obstacles)
– it allows building up speed and momentum faster when going down slopes
– it also means that to pull of moves like the ones in the gifs below, you have to think carefully about when and for how long to trigger slide mode : you need it early enough to prevent bouncing, but trigerring it too early or for too long will make you slide down the slope instead of over it due to the added weight.