This contract was to create a modular level design system for an endless runner. The basic goal was to create a set of modular level chunks that could be spawned randomly and would snap together to create interesting gameplay for an endless runner. The contract came in two parts, both of which were completed in a couple of weeks. In this time I sketched out ideas, made a few quick mockups, showed them to the team, and went forward with the suggestions they made. In the end
- Source Engine: Used for quick prototyping and experimentation
- Maya: Used for importing assets from Source Engine and modifying to meet technical needs regarding scale and vertex spacing
- Gameplay Requirements:
- Level chunks must snap together seamlessly
- Level chunks must make use of player abilities
- Level chunks must allow for randomly spawning elements such as enemies and jump pads
- Level chunks must be of varying lengths
- Models must have vertices at regular intervals to account for art style
- Include pieces in each chunk that devs can turn into random spawns. These should change the way players move through that chunk
All chunks had the same basic layout as shown in this diagram:
As you can see, it is broken up into 5 lanes (3 Orange and 2 Gray). The orange lanes are where the player runs, crossing the gray sections as they pop from lane to lane. The gray spacing section was useful for adding details that made the game visually interesting, but did not get in the players way. Players could still hit things in the gray sections, but only if they happened to run into something while switching lanes.
When you bring this into 3D, it ends up looking like this:
The chunk shown above is relatively simple with lots of open space intended to be filled with randomly spawning obstacles, and a few higher areas to run along. These upper areas are a key aspect to making each chunk as reusable as possible, as it allows for chunks to snap together in a multitude of ways. Each chunk was designed to have 2-3 evenly spaced height levels that players could traverse, giving them more options with how they moved through the game. This also meant that when the next chunk was spawned, it could align with the current chunk in several configurations. Below is an example of how the same chunks could be snapped together in different configurations:
As you can see it is a very simple premise that greatly opens up the variety you get from a single terrain layout. Depending on what height level the player is currently on, they could enter the next chunk at one of three different ways. This, coupled with randomly generate elements, allowed for a wide range of gameplay variations with only a handful of assets.
To bring this idea even further, each chunk had sections that may or may not be present each time the chunk is spawned. Below is an example of this, with random sections in green. Here you can see that if the green pillars do not spawn, then they open up an alternate path for the player to take. If they do spawn however, the player is force down a different direction. Theses were used to create several branching paths, and force players to traverse the same chunks in different ways.
At Your Disposal
The player had several abilities that had to be considered when creating each chunk. These abilities included endless runner staples such as jumping and sliding, but also unique ones such as wall running and cross-lane-dives. As the names imply, wall running allows players to run on walls for a set distance and cross-lane-dives allow the player to jump straight from one side lane to the other, jumping over the middle lane entirely.
With this in mind, here are several examples of how these abilities were considered:
Though the chunks created were only a first pass, the system itself showed promise. Early pieces I built tended to be more visually complex and had gameplay built into the architecture rather than allowing for randomly generated elements to fill in the experince, but the more chunks I created the more I was able to take these random elements into account, and the simpler, but more interesting they became. I beleive that if the project had continued in this direction we would have been able to create a host of interesting situations for the player using this system.
Ultimately the team decided on an entirely different form of level construction that invalidated all of their own previous level design work as well as my own, so it is unlikely that any of these pieces will end up in the final product. The system itself is solid however, and it was a valuable exercise in combining hand crafted design with random elements to create gameplay.