(This is a repost from the Horizon Chase devblog.)
Hi! My name is Felipe Dal Molin, I am the game designer on Horizon Chase. Horizon Chase is a retro racing game inspired by classics from the 8-bit and 16-bit era, developed by Aquiris Game Studio. It was released last month as an iOS-exclusive, and it had amazing reviews and player response so far! It was chosen as an App Store Editor's Choice, and even got a place in the cover of Apple's new Twitter account.
In the next posts, I’ll try to shed a light on some of the challenges we had to overcome when making Horizon Chase, and some of the solutions we found to craft a racing game that felt both nostalgic and modern at the same time. The first post will be focused on some interesting bits of gameplay and game feel, and the next will talk a bit about the meta-game.
Horizon Chase’s roots draw from the conventions set by racing games from the late 80’s and early 90’s. Specially Kemco's Top Gear for the SNES, which was a huge success among Brazilian kids at the time.
The gameplay in these games was very straightforward. You just had to avoid opponent cars and obstacles by steering left and right, and try not to mess up when handling corners. Get off the road, hit a signpost or crash into an opponent, and you will lose speed, positions and precious time. Use limited nitros to recover from a mistake or gain advantage over the other cars.
That is to say, all very arcadey but lean. No drifting challenges, getting airborne, enemy takedowns, slipstreaming, reversing, special items or mounted weapons.
When setting the approach for our game, we didn’t want to go for the simulation end of the spectrum either, like making the player carefully consider each move based on his car’s custom configuration.
These were our self-imposed constraints when we started making Horizon Chase. Still, I believe our first design mistake was to presume the gameplay was “done” because of that. As we learned, we had to experience first-hand several problems that stem from this old way of making racers, and some that came from trying to make it work 25 years later.
One of these problems was understanding curves.
See, Horizon Chase has some 90’s magic running under the hood. The magic is what makes the game run smoothly in older hardware, and it ensures that the game feels like one of the old racers, with parallel lines running fast in the ground and a car that’s somewhat stuck towards the track’s direction. I’m not going into details here, but we had to figure out lots of workarounds for things that would be simpler if we just set out to make a full, realistic 3D game. Things like curves.
In our main references from the genre, a turn acts more like a gravity pull that puts the player in a binary situation of tension. Either you’re in a turn, or you’re not. When you’re in a turn, you’re either winning (over-steer), losing (under-steer) or you’re getting even with it. It all depends on your car’s steering and the curve’s force. If you played Horizon Chase or Top Gear you know what I’m talking about.
At first we tried to use bézier curves to draw the tracks in 3D Studio MAX. Béziers are these curves made by setting anchor points and adjusting handles to smooth them out. They’re great, but we soon learned the béziers wouldn't work out as expected in our system. The problem is that, to achieve this old-school gameplay, a curve’s force should be constant all the way long. It’s a simple concept in hindsight, but took us some time to understand where we were failing. By simply drawing curves using béziers, we always ended up with turns that felt weird in-game, sometimes pulling the car way out of its path only to let it go a couple feet ahead.
Below is a comparison between a track with ideal turns, made from half circles, and the same track with subtle adjustments in the bezier handles. The blue and yellow/green bars represent curve force in each point. As it turned out, the smallest difference between both handles of a point was enough to completely screw up a design.
We tried a lot of things from the programming side: filtering the curve’s output using an average of the angles, using gaussian distribution, capping each point by the average of the previous and next 10 points, the list goes on.
By the end of the day, we noticed that all approaches broke the curves one way or the other. A turn that felt ideal didn’t fit with its visual representation in the game; There were invisible turns happening along straight roads; Some iterations made curves feel nice but far from constant… So we started trying to solve the problem from the level design side.
We grouped together a set of modules that would help design geometric tracks, without having to rely on the bezier handles. The process resulted in tracks with perfect corners, but was pretty damn excessive for a game that set out to be a simple arcade racer. Also, turning an organic outline into an angle-perfect, point-perfect track was way too painful.
What saved us from months of pure level design suffering was MAX’s Arc tool. Using arcs, the new workflow was to outline a track using only straight lines, and then fitting in arc sections. The smaller the arc, the sharper the turn.
We still had to weld every curve to the track and convert the junctions into bezier points without messing up the curve’s handles, before exporting the data to be translated into a track by our system. But it worked, and we finally had the arcadey, binary turns we learned to love in Top Gear and its siblings!
In the end, all the new knowledge about applying gaussians and averages from the programming side also ended up being useful in making the transitions from straight roads to turns be as smooth as possible, as you can see below.
Auto-turning (or is it?)
Every design decision is a concession. One thing that we inherited from classic racing games and had to improve is what a reviewer dubbed the “auto-turning feature”.
Notice that in the example below from Top Gear, I didn't steer at all and yet I just hit the 3rd or 4th signpost after the one I was heading for.
It seems like the road is helping me a bit, even if I try to run straight off-track. In games like this, there are some turns you don’t even have to do, if they’re too soft or too short:
See how I just ran straight ahead and yet I ended up 90º from where I started in the map? In this particular track from the first Top Gear, if it wasn’t for enemies and obstacles, I’d only have to steer a couple times if any. This “perk” of sorts is even more evident in the all-time classic OutRun.
This is a byproduct of the way the world is simulated in games like Top Gear, OutRun, Lamborghini American Challenge, Lotus Turbo Challenge, Jaguar XJ220 and our own. It made for a gameplay that was unique to these pseudo-3D racing games. The effect dates back to 1976 Atari’s Night Driver and 1983 Activision’s Enduro, and it stopped being a thing by the time Daytona USA and the Cruis’n series hit the arcades.
It’s not realistic racing at all. But it makes for a fun game experience nonetheless, and doesn’t diminish challenge in any way.
In Horizon Chase, we wanted to recreate this point in time where pseudo-3D ruled the world. After the simulated environment was up and running, what we had to do was carefully iterate on the curve force and the player’s steering capacity to make it so that turning didn’t feel weird and didn’t make the gameplay too easy or way too hard. Remember, you’re either over-steering, under-steering or perfectly following a turn. You only can’t pretend it doesn’t exist.
Sometime during the last weeks of development, we got to improve the feel by making the car automatically rotate a bit towards where the road is leading. Compare these two gifs:
Gameplay didn’t change one bit when we implemented that. The player will hit the signposts and get off-road the same as he would anyway. Yet the sense of controlling an actual car greatly improved.
Feedback is king
Another one of the renovations we had to do was creating proper player feedback, by updating camera handling, animations and controls. In the classic racers, the car was a sprite glued to the middle of the screen. We wanted to maintain some of that feeling, all the while boosting the player’s sense of speed, control and tension.
The first gif below shows the standard camera, with the car always occupying the center of the canvas. The second gif is the same race with zoom out when using nitros and zoom in when braking.
Plus, we put a small horizontal offset and angle tilt in the camera when going left and right, to boost the sense of presence and the risk at play when under-steering a turn. These subtle adjustments only take effect at a certain speed, but they make the game feel more dynamic when you’re going fast and slinging your car from one side of the track to another.
(Large GIF, alternative link here!)
Nailing the controls and the perceived weight of the car was also fundamental for Horizon Chase. We aimed for really simple, responsive controls in which the car acted more like an extension of the player than like a wild beast they’d have to tame before entering each corner.
The first step on that direction was removing the Brake control altogether, a decision that felt really risky at the time. Being it a mobile title at first, we felt that releasing the gas and hitting the brakes were two actions that felt redundant and confusing for the arcade feel we wanted, and wouldn’t add to the challenge in a positive manner. By making it simpler (release the gas to brake), we ended up with a more natural fit for the gameplay we were aiming for.
Beyond braking, we had to iterate a great lot on steering, colliding, sideslipping and rotating, both using animation and the right weight and timing for each of the core interactions.
The steering hit its sweet spot after we added leaning, by slightly rotating the car on its longitudinal axis when it turns, and the Input Filter, which stores the player input each frame and averages it over a set time.
Even with steering being a binary input by design, getting the Input Filter right was capital to add a sense of weight and inertia to the car with the right responsiveness for player input. It is likely the main reason why we got such good praise for making nice touch controls.
This technique also gave us, free of charge, the possibility of adding rain and snow as gameplay modifiers!
Making a new game from an old genre a couple decades later isn’t easy. You need to abstract beyond the old games' skeletons and try to capture the essence of what made them great at the time, both aesthetically and systemically.
Although some genres and conventions had a good reason for vanishing with time, there are play experiences that are universal, like tension, competition and the will of exploring new horizons. They’ll connect with players now as they did before and will do in 20 years from now.
Of course you may want parts of the old games' skeletons too, to make yours feel more authentic, and then there will be obstacles you’d think humanity had already overcome by now. All the while trying to appeal to folks who were born after pervasive internet connection and lifelike graphics were the norm, maybe in a platform that’s more known for sweet clan clashing and candy crushing. This could mean breaking some paradigms that don’t feel breakable at all.
Just don’t fall for thinking a game design is “done” because it’s already been done in the past, or you’re in for a long, frustrating ride.
In the next post, I’ll try to ramble about difficulty, progression and the social metagame in Horizon Chase. See ya! :)