top of page

Ethereal Sprinter

Early summer 2020

Unreal Engine

Level design and programming

The project

In early summer 2020, the studio One More Level released a demo of their upcoming game Ghostrunner. Having an appeal for cyberpunk, science-fiction, robots and runner games, I immediately got interested in the demo, and played it for a week.

As I was playing the game, I thought that It could be a good exercice/pet project to design levels for this game. Unfortunately, no level editor was available for the game. This is how I started the project Ethereal sprinter. I wanted to recreate Ghostrunner's controller to make a level of about 3 minutes.



As my main goal for this project was to level design, I kept the feature list as small as possible, I only kept what was essential to the game's original controller and environment.

The controller is the most complex of all the features : it had to include crouching, sliding, running, jumping, wallrunning, walljumping, dashing, attacking, deflecting bullets, a grappling hook as well as slow-motion for the aerial dash. All those features were included in the original game and were all core to its identity, so I had to make them all.

The prototype includes one simple AI that behaves like a turret : if it sees the character, it begins to shoot until it looses direct sight of it, or is killed. The rest of the environment features were very straight forward : a custom kill zone, check points, grappling anchors and deadly energy walls.

I wanted to work on readability on this project, so I had to create some custom environment assets to help me signal things to the player : yellow decals to indicate the critical path and a handful of neon signs written in japanese to resemble those of Ghostrunner.


Level design

When designing my level, I wanted to create an experience that followed a simple plan : a small tutorial section, for the player to apprehend the controller and all it's features, a first big challenge, some diversified situations (like some platform sections or calmer spaces), and a final big challenge.

To give the player a feeling of going forward, all the rooms follow a variation of scales, going from small to big and big to small. This variation helps the player locate themself in the level, and prevents the level from being too repetitive.

Since the game is fast paced, I had to put special attention on its focus points. I used the color yellow to indicate the critical path to the player (which was already the color asigned to the critical path in the original game). This sign includes yellow neons, and yellow decals that were placed on the walls and ground.

Apart from yellow, I mainly used red and blue to light the level. Blue was used to help the yellow pop out, and be more visible. Red on the other hand was exclusively used to indicate dangerous areas, like a platform where a enemy was standing, or the color of the energy walls that kill the player.


Most of the rooms of the level were improvised, I only made plans for the arena rooms, since those rooms had more specific needs than the transition ones. The player needed to be able to finish them in several ways, so I had to plan in advance all the main possible paths to create something coherent.

I did not feel the need to draw plans for the transitions rooms, because I already had a pretty clear idea of where I wanted to lead the player, and how. For example, I wanted to give the player an introduction view of the last arena, so when I built the last transition room, I knew that I needed to build this kind of view point.

Including the prototyping and the level design, this project took me 43 hours to complete.


During the 2020 Blocktober, I decided to post my work on this project on Twitter.

I was lucky enough that the team of One More Level noticed it, and responded with the official Ghostrunner twitter account.


Now the post has a little more than 10.000 views on twitter, and most of the feedback was positive.

It was of course a great honor to be recognized by the very team that inspired this project.

bottom of page