← Claud Jehu Development breakdown

Moon Runner

2022 · Solo · Unreal Engine 4

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.

Available free on Steam ↗
Moon Runner: a lone astronaut on a small lunar landscape

Introduction

What?

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 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.

Why?

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.

The goal 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, and level design.
  • 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. It also 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 things.

The player character is a blue-collar space worker who's been sent to a remote location and tasked with maintenance assignments.

Reception

Reception has been mostly positive. The game currently holds an 86% positive rating on Steam, where reviews praise its style and atmosphere, and players say they enjoy the traversal-based gameplay with survival elements.

NME reviewed the game and described it as "spectacular", "astonishingly well crafted", and "impressively slick".

Press coverage of Moon Runner

Some players find the difficulty too challenging, while others have no issues in this regard.

Pre-production

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.

Mood board of lunar and science-fiction reference imagery
Mood board assembled during pre-production.

Press Start

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.

A detour

Magnet Planet

Some of the work from the Magnet Planet phase.

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.

Logo concept for Magnet Planet
A logo concept from the Magnet Planet phase.

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.

Production

The World

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.

The spherical moon level viewed from a distance
The level is a sphere, which drove almost every other technical decision.

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. 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 travel technology. The player is then presented with an 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 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.

Distance field blending between rock meshes and the landscape surface
Distance field blending, softening the seam between placed meshes and the landscape.

The game is built in Unreal Engine 4, since Unreal 5 was released late into development. Certain aspects of the design, such as landscape and lighting, are reliant on systems which have been overhauled in the newer version of the engine and have proven difficult to replace. Distance field blending in particular interferes with Unreal Engine 5's Lumen. The lack of tessellation in Unreal Engine 5 means that achieving a similar level of detail on the ground would require a very different approach, maybe involving a controlled use of Nanite meshes. The closest alternative, Virtual Heightfield Mesh, proved unusable because it only applied on the global Z axis, which wasn't suitable to a spherical level design.

The Character

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.

The player character, an astronaut in a spliced-together suit
The player character, built from edited assets and rigged in Blender.

Besides the model itself, it was important that the movement of the character also felt 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 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 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 Gameplay

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, 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 can only be traded at monoliths for credits.
  • Valuable Modules: like basic modules, but much rarer and worth more credits.
  • Ladder Modules: used as ladders to aid traversal.
  • Rifle Modules: used as rifles to destroy the corrupted droids.
  • Energy Modules: 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 improve the player's Carrying Capacity, Energy Capacity, Energy Efficiency, and Scanning Range.

The player deploying a ladder module against a cliff face
The ladder module. Placement logic is based on traces and trigonometry.

The ladder module acts as 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.

Enemies

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.

The Hoverbot, a spherical hovering droid
The Hoverbot patrols set routes and attacks when alerted.

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.

The Spiderbot, a four-legged droid embedded in the lunar surface
The Spiderbot lies embedded in the ground until approached.

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.

AI Navigation

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 path tracing.

Debug view of the custom trace-based navigation system finding a path
The custom navigation system uses traces to determine walkable ground and obstacles, then draws a spline to use as a path reference.

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 generate the patrol paths for enemies in the editor when iterating the level layout.

A real-time version of the system works using local traces without a spline path: the AI finds its way around walls and towards a target by tracing the environment around it and deciding which direction is viable. The same tracing system is also exposed to the actor instance in the details panel as a custom event, so that multiple paths at different starting positions can find their way towards the same target.

Other features

There are many aspects of the project which I haven't covered here. 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 the final boss
  • Speedrun mode

Scrapped features

There are a number of features I worked on during development which didn't make it into the final game.

Multiplayer

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 not to pursue it further.

Procedural generation

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 led to the shift in theme towards Magnet Planet. Much like the other scrapped features described here, the idea was dropped in favour of maintaining the project's scope.

Branching narrative

I experimented 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 had been reactivated, the player would have the choice to either help the core or continue with their assignment, leading to a slightly different ending. In an effort to reduce the scope of the project, this was scrapped in favour of a simpler single track narrative.

More enemy types

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 rein in the scope of the project, however, these enemy types were removed.

Conclusion

I made several updates after release and ended the Early Access period. The game currently holds an 86% positive rating on Steam, and players continue to enjoy its graphic and atmospheric elements. I balanced certain aspects of the game along the way, but there are aspects of the 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.

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.

Thank you for reading.