RAGE SK8
Motive
After obsessing over the movement of games like Just Cause, Super Mario Odyssey, Lorn’s Lure, and Celeste, I felt the itch to prototype a game centered around great movement.
The wingsuit from Just Cause 3. Credit: Ten Ton Hammer
For me, mastering a deep set of moves and getting into a flow state with them was always the most fun part of movement-centric games, and these were my main goals with RAGE SK8 from a pure design standpoint.
As for the theming, I skateboard around a lot, and I have built up some aggression over the years from almost getting hit by drivers speeding through crosswalks or right turns at red lights.
As a real-life skateboarder, there’s not much you can do about this. But as a game maker, I can pretend to have my revenge on these evil cars. So from my love for great movement and thirst for vengeance, RAGE SK8 was born: A first person skateboarding game about (speed)running errands and smashing your way through a city ruled by cars.
Designing the Movement
To guide my thinking on the movement of RAGE SK8, I set some ground rules. Number one, I wanted to have a pretty high skill floor. Borrowing from real skateboarding was important in this way. Part of the fun would be the process of going from clunky and uncomfortable to an unstoppable flow state.
To achieve this, I made the turning of the board in RAGE SK8 very similar to a real skateboard. Your turns are faster at higher speeds, you need to “push” a few times to get going fast, and can coast for a while once you get momentum. Once you get the hang of things, you learn to plan out your pushes and turns to figure out where you can gain speed safely, and when you need to slow down.
Second, I wanted there to be multiple ways of accomplishing your movement goals. Say you want to get some height in Mario Odyssey; you can sideflip, backflip, wall kick, cap vault, ground pound jump, triple jump, long jump, or just do a plain old jump. The option you choose depends on your situation, and where exactly you want to go. In RAGE SK8, you can gain height with a regular Ollie, a wallride, by stomping on a vehicle, or summoning a rail mid-air to grind on.
Air Grinding
By holding Shift in mid-air, you can build a rail for yourself to grind.
At first, I only had the Ollie and Stomp moves, which made it impossible to gain height and maintain it over distances. Plus, this left out in-air movement.
I considered a Superflight-style hanglider at one point, which had a lot of benefits. For one, it’d let you trade movement “resources” easily. You could trade some momentum for height by using your speed to create lift and boost yourself up, and you could trade height for momentum by letting gravity pull you down and then leveling out.
Ultimately, I came up with a more on-theme solution, the Air Grind. By holding Shift, you can spawn in segments of rail in front of you as you jump through the air, land on them, and then grind. With the arrow keys, you can alter the path of the rail, going left and right or up and down. This still lets you trade between height and momentum via gravity, and has the added bonuses of being tricky to land on, and much more in line with skateboarding. By combining an Air Grind with a wallride, you can go pretty much anywhere you want.
To tune these moves, I made a gym level with standard sized vehicles and terrain. It was a very handy and—crucially—playable way of tuning how much height, speed, turning power, and rail everything should have.
The gym scene, useful for testing out movement and documenting what size gaps/ledges/buildings to use in levels.
Implementation
To make the movement system as flexible as possible to allow for changing or adding to it later, I implemented a state machine pattern in Unity. Each state is contained in its own GameObject that gets activated and deactivated by the State Machine. This saved a LOT of time when adding new moves, and a lot of tears when debugging. I have made the mistake of writing a 1,000-line movement megaclass for projects in the past, and I was grateful to put that behind me for RAGE SK8.
The Player prefab in RAGE SK8, with one of the State objects selected.
The single hardest move to implement was by far the Air Grind. My quick and dirty first pass involved instantiating a bunch of small rail segment prefabs, but this looked blocky and wasn’t performant.
I soon switched to using splines to dynamically edit the mesh of the rail as new segments were added, and after an hour of reading documentation on how the SplineExtrude class works, I had a smooth-looking rail that didn’t lag the game.
A rail spawned by an Air Grind.
The math which calculates the position and orientation of new points on the rail. Yes, I use light mode.
All this doesn’t even touch on what I went through to get functional rail grinding in this game. My first try was too physics-based, and I was doing a lot of manual velocity correction and fighting against colliders by trying to use the physics engine to shortcut my way through the problem.
Soon though, I knuckled down and decoupled the grinding movement from the physics system, instead using the incline of the rail to calculate the player’s acceleration due to gravity, and integrating the acceleration and velocity to move the player character.
Resource Management
Going back to the reference games for RAGE SK8, one thing I really like about them are their movement resources. In addition to the “soft” resources of momentum and height, some of them have a more tangible store of things that can be used to change your movement. In Lorn’s Lure, there’s stamina, Mario Odyssey has Cappy, and Celeste has Madeline’s dash(es).
This inspired the idea of “Rail Pieces” in RAGE SK8, which solve a couple big design problems: How to limit the amount of Air Grinding players can do, and how to encourage them to BLOW SHIT UUUUUUUUUP.
In RAGE SK8, Rail Pieces allow you to build that rail for Air Grinding. The more you have, the more height, speed, or distance you get out of your grinds. You get Rail Pieces by destroying cars, which you can do by kicking your board at them and stomping on them from above.
This resource brought me one step closer to uniting the destruction aspect of the game with the movement aspect of the game.
What's Next?
RAGE SK8’s movement doesn’t yet achieve the ideal of a deep, interconnected set of moves that players can use to dance through the game world.
Next, I will be re-working the pushing and turning a little bit. I think that I overcorrected towards skateboard realism with my current design. It has problems with oversteering, which makes it hard to line up your jumps, and it’s too sluggish to change speeds and directions.
But for now, I’m taking a break from this prototype. I dumped dozens of hours into RAGE SK8 for nearly 4 months, and it burned me out a little bit. It’s the most ambitious solo project I’ve done so far, and it was a great excuse to learn about state machines, shaders, post-processing, movement design, Unity’s physics system, and a hundred other things along the way.