Moon Runner is a short game I developed to expand my technical skillset and explore game design concepts within the framework of a contemporary third-person experience.
It's available now for free on Steam.
The following is a partial breakdown of the development of Moon Runner, and a summary of some of its main features.
Moon Runner is a short action survival game built in Unreal Engine 4. The player must find monoliths across the surface of a small moon. Along the way, they find items which can be used to help them traverse the landscape and deal with enemies, or upgrade their character and complete objectives. In the final stages, the player is can end the game or continue playing to complete side objectives. Upon completion, the player's score is calculated and added to a global leaderboard.
I started this project in order to explore design concepts and extend my knowledge of development processes and Unreal Engine. I wanted to produce something which would point to the standards I'd like to work towards and to learn as much as possible along the way.
Below are expandable sections outlining broad aspects of the project, followed by more extensive sections where I go through stages of production and talk about some of the key aspects of the project.
The goal of this project was to create a short, single-player, third-person experience based on existing references - with at least one unusual design feature - and attempt to execute the concept to relevant contemporary standards.
- Build on my existing technical understanding of programming and art tools in Unreal Engine.
- Gain an understanding of new areas such as third person character logic and animation, AI behaviour and navigation, level design etc.
- Test my ability to balance ludonarrative features by attempting to blend artistic themes with engaging gameplay and interesting design structures.
The traversal-based gameplay that inspired my project seemed well suited to this underrated setting. Also, it wouldn't demand large amounts of architecture, foliage and other features that make up conventional earth-based level designs, leaving room to focus on other features.
The player character is a blue-collar space worker who's been sent to a remote location and tasked with maintenance assignments. Read on for more details.
Mood and Inspiration
"Death Stranding on the Moon" was the starting point for this project. The aim being to adapt that reference and its standard of execution to a lunar setting and to build on it with my own ideas. I was keen to build a sci-fi concept around this, and to make it somewhat reminiscent of real and familiar interpretations of astronauts and the Moon.
Music, film and other visual media formed constant reference points for mood and style. You can view and listen to some of them here or on the mood board linked below.
A Spotify playlist inspired by work on Moon Runner.
Early prototyping focused on establishing the player character, the world around them, and the main gameplay loop. I started by building basic versions of the systems upon which the gameplay would rely: finding items around the world and bringing them to checkpoints; an inventory system to manage those items; a ladder mechanic to aid traversal; and the health system used for survival.
I worked with templates and plugins in order to build a workflow that could sustain the concepts I was forming, and to reverse engineer systems where possible so that I could learn from them and customise them where required. ALS (Advanced Locomotion System) and Voxel Plugin are the two notable packages upon which the character and world are built, respectively.
After initial prototyping, but before getting into the main production of what would end up being Moon Runner, I worked on a different theme for the game.
During the early stages of development, achieving the standard I was aiming for in a grounded and realistic style felt out of reach. I had been experimenting with procedural generation, and this led me to consider a more rogue-like structure to the game, which could be accommodated by a switch to a more abstract setting and style. It also meant I could focus on the gameplay design rather than exhausting resources trying to maintain a high-fidelity aesthetic.
So I pivoted to "Magnet Planet", a thematic concept involving a character made of magnets and a planet covered in metal. I kept the same framework of gameplay as before, but I built new mechanics and a more playful version of the game started to emerge.
The mechanics were fun... but I realised I couldn't do justice to the design that they promised, so I pivoted back to the style that had inspired this project. I kept a lot of the work I did but re-established the "Moon Runner" theme. You can see some of the work I did during the "Magnet Planet" phase of the project in this video.
The low horizon on the Moon creates a striking type of visual framing which gives the landscape a sense of limited range. It can't really be replicated on a traditional flat landscape.
So I decided to make my level spherical. Voxel Plugin provides tools to generate landscapes with relative ease, both manually and procedurally. By layering noise patterns and combining them appropriately into a sphere, I created the shape of the landscape across the moon.
Narrative and Structure
The decision to set the game on a spherical level drove the conceptual elements of the narrative and the game's broader structure. I sought to devise a coherent logic to the world and the player's objectives within it.
An opening slate of text at the start of the game gives a bit of context to the setting, followed by an AI voice which conveys to the player their assignments and is used to explain the game's rules and mechanics to the player. In the context of the game, the voice is generated by Astral Cortex Industries, an interstellar conglomerate responsible for faster-than-light travel networks between orbital bodies known as "lunar nodes". Scattered across the surface of these small moons are monoliths, which form part of an underground megastructure built to harness the energy emitted by the core of the moon. The nature of the moon's core and its energy are ambiguous but the monoliths allow Astral Cortex Industries to use the energy to power their travel technology.
As explained to the player at the start of the game, the monoliths on this lunar node require urgent maintenance - they have been deactivated. The primary assignment given to the player is to reactivate these monoliths, which they do using a probe device mounted on the character's shoulder: the Cortex Energy Device (CED). When the monoliths are reactivated, they are forced back into the moon's surface, reinforcing the underground structure which controls the moon's core.
When the player attempts to reactivate the last monolith, the reactivation sequence malfunctions and the player is told to enter the tunnels and descend towards the core of the moon.
When they enter the core chamber, the player engages in a boss battle against the core itself which summons energy to attack the player. After the boss battle, the player is congratulated on completing their assignment and told they can end the game by reactivating the moon's core with their CED. They may also return to the surface to complete any remaining secondary assignments.
Once the core is reactivated, the camera cuts to a wide shot of the moon itself, which is teleported away using the now functional moon's travel technology. The player is then presented with ending title screen, leading into a score tally and the option to view their ranking on the online leaderboard.
Landscape Material And Asset Blending
The established context for the game laid a path for me to try and realise an authentic lunar setting.
The landscape material is a custom version of the multi-index material from Voxel Plugin, using triplanar mapping. Surface types are blended using height maps for natural transitions, which are assigned by a combination of surface normal angle, procedural noise patterns and manual brush tools.
Height maps are also used in material displacement, which - combined with tessellation - adds geometric detail to the nearby ground surface. The image below shows this material alongside some volumetric fog and post-processing effects.
The landscape textures were sourced from Quixel Megascans, as were various mesh assets such as rocks and craters. I used distance field techniques to blend them into the landscape, demonstrated in this video.
The game is built in Unreal Engine 4, since Unreal 5 was released late into development. Therefore, certain aspects of the design such as landscape and lighting, are reliant of systems which have been overhauled in the newer version of the engine and have proven to be difficult to replace.
I've covered some of this in a blog post, especially regarding distance field blending and how it interferes with Unreal Engine 5's Lumen feature. Furthermore, the lack of tessellation in Unreal Engine 5 means that to achieve a similar level of detail on the ground of the landscape would require a very different approach, maybe involving a controlled use of Nanite meshes. The closest alternative to tessellation in UE5 - Virtual Heightfield Mesh - proved unusable because it only applied on the global Z axis, which wasn't suitable to a spherical level design.
I used Blender to rig and animate the character model, which is based on edited mesh assets from various sources. The base of the character model is taken from Epic's Mission AR project - a recreation of Apollo 11's Moon Landing. Other pieces of the suit were cut and spliced together with the edited base to make something resembling a traditional astronaut mixed with modern sci-fi designs.
Besides the model itself, it was important that the movement of the character also feel authentic to a lunar setting, so I tried to make the animations look somewhat familiar within that context - adding a degree of bounce to the running motion, and using physical animation on the arms during gameplay.
Finding a balance between authentic lunar movement and making the character feel responsive was a difficult task. The aim was to make it resemble to some degree the movement of an astronaut on the Moon, but not at the expense of input response times.
Further behind the scenes, I've had to address all the technical implications of a spherical level design, including many that involve the player character. Relevant vectors and rotators relating to player movement and character animations are configured to be calculated relative to the constantly changing gravitational alignment, and challenges caused by issues such as gimbal lock were solved to provide a consistent experience across the surface of the moon.
The primary gameplay loop involves reaching monoliths before you run out of energy. Energy acts as the player's health and manna combined. If the player is damaged, energy is removed. If the player uses an ability, energy is removed.
In the context of the game's fictional world, energy synthesizes the oxygen supply to the character and so it also drains over time.
Monoliths act as player checkpoints. Once they've been reactivated and when the player is stood nearby, they refill the player's energy. If the player dies, they are respawned at the last monolith they engaged.
The player can scan the environment by pressing a button to highlight nearby items. These items - called modules - are scattered across the surface of the moon, and the player can pick them up when stood nearby. The modules are stored physically on the character, and the player's movement is slowed down based on the amount of modules carried.
There are 5 types of modules:
- Basic Modules: these modules can only be traded at monoliths for credits.
- Valuable Modules: these are like basic modules, but much rarer and worth more credits.
- Ladder Modules: these are used as ladders to aid traversal.
- Rifle Modules: these are used as rifles to destroy the corrupted droids.
- Energy Modules: these can be used to recharge the player's energy manually when away from a monolith.
Each module type can be traded at monoliths in exchange for credits. Credits can then be used to purchase upgrades, which can improve the player's Carrying Capacity, Energy Capacity, Energy Efficiency and Scanning Range.
The ladder module acts a tool the player can use to aid traversal. This mechanic was based on an existing reference from Death Stranding, although the final design is somewhat different. Under the hood, the logic for ladder placement is based on traces and trigonometry.
The player must also deal with enemies scattered across the lunar surface, either by destroying them with the rifle module or avoiding them altogether.
In the context of the game's narrative, they are droid units deployed by Astral Cortex Industries to perform the same maintenance tasks as the player but they have been corrupted and are now hostile to the player.
The first enemy type is the Hoverbot, a spherical droid, which hovers along patrol routes and attacks the player when they are alerted to their presence.
The other is the Spiderbot, a droid on four legs, which is embedded in the ground and awakens when the player approaches it.
Both enemies have similar attack types: they fire various projectiles at certain ranges from the player, and they fire laser beams when they're close. The Hoverbots have a bit more health and are therefore harder to destroy, but the Spiderbots sometimes have the element of surprise, given that the player might stumble across them unawares.
A parabolic target launcher built for enemy attacks, not used in the final game.
The Spiderbot waking up - in Blender and in Unreal.
Because Unreal's navmesh system is designed for flat levels, I had to think of a different way of handling AI navigation. Having explored options involving flight navigation plugins using 3D navmesh systems and traditional pathfinding algorithms, I found performance to be unreliable at best, so I looked to build my own system using traces.
Initially conceived as a method for setting random patrols on a procedurally generated level, it can function as a real-time navigation system for enemy encounters in the game, and to generate the patrol paths for enemies in the editor when iterating the level layout.
The custom navigation system uses traces to determine walkable ground and obstacles, and draws a spline to use as a path reference.
The video above shows a real time version of the pathfinding system using local traces, without a spline path. The AI must find its way around the walls and to the yellow cube by tracing the environment around it and deciding which direction is viable.
This video shows the tracing system being used as a custom event exposed to the actor instance in the details panel. Multiple paths at different starting positions find their way towards the same target.
There are many aspects of the project which I haven't covered here yet. These include:
- Level Design: Cliffs, Corridors And Craters
- Gravity And Fall Damage
- Upgrades and Progress
- Visual Effects: Lighting, Fog And Post Processing
- User Interface: Map And Menus
- Input: Gamepad, Controls And Menu Navigation
- Skull Ghosts and Final Boss
- Speedrun Mode
There are a number of features I worked on during development which didn't make it into the final game. Expand the sections below for more information.
Early on I explored network replication to get an understanding of how to set up multiplayer gameplay. Along the way I garnered a thorough understanding of network replication, but I also discovered the extent to which multiplayer would shape my game, and I decided to not to pursue it further.
Some of the tools used for generating the world and actors within it were well suited to procedural generation. I explored the potential they had to create randomly generated levels, and this lead to the shift in theme towards Magnet Planet. Much like the other scrapped features described here, the idea was scrapped in favour of maintaining the project's scope.
I experiemented with branching narratives. The idea was that the moon's core would be a character in and of itself, and the player could encounter it and trigger an alternative narrative sequence where the core would talk to the player and ask them to help it. Once all but one of the monoliths have been reactivated, the player would have the choice to either help the core or continue with their assignment, leading to a slightly different ending to the game.
However, in an effort to reduce the scope of the project, this branching narrative concept was scrapped in favour of a simpler single track narrative.
During development I worked on a humanoid enemy - based on the same character blueprint as the player - and larger types of enemies too. As part of an effort to reign in the scope of the project, however, these enemy types were removed.
Feedback on the Early Access release of the game was mostly positive. Several user reviews on Steam praise the game's style and atmosphere, and players claim to enjoy the traversal-based gameplay with survival elements. Many recognise the influence of Death Stranding and seem to appreciate the efforts made to capture a similar type of experience, albeit with its own twist. NME reviewed the game and described it as "spectacular", "astonishingly well crafted" and "impressively slick".
Since then, I've made several updates and ended the Early Access period. Players continue to appreciate the graphic and atmospheric elements of the game. Some players seem to find the difficulty of the game too challenging, while others have no issues in this regard. I have balanced certain aspects of the game during the Early Access period, but there are aspects of the game's design which I recognise could be barriers to entry for some players, and others that could be expanded upon to provide more comprehensive communication of the game's mechanics to players. Finding a good balance between challenge and accessibility is something I'd like to spend more time on in future projects. My focus on this project leaned heavily on its execution, with much of the design process taking a backseat to my ambitions in technical and aesthetic fields.
I now feel more confident in these areas and more able to commit my efforts to game design. The paths I took in creating this game have provided me with a better perspective on what is plausible, efficient and fun when considering design concepts, and I'm looking forward to applying these lessons in the future.
Thank you for reading.
Animation for the loading screen.