← Claud Jehu Development breakdown

Moon Runner

2022 · Solo · Unreal Engine 4

Moon Runner is a game I made to expand my technical skillset and explore design concepts within the framework of a contemporary third-person experience.

Available free on Steam ↗ View the gallery →

Introduction

What is Moon Runner?

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.

A concept teaser for Moon Runner, where I experimented with VR rendering for a handheld camera effect.

Motivation

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.

Moon Runner key art: an astronaut approaching a lit monolith on a lunar ridge

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.

The player standing on a ridge, looking out across the lunar surface towards a distant sun
The player inside a bubble shield as incoming fire converges on it

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.

The player almost lost in a dense, dust-filled haze, lit only by suit lights

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.

The in-game inventory screen listing collected modules
The inventory system, one of the first pieces built.

A detour

Magnet Planet

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.

Some of the work from the Magnet Planet phase.
Logo concept for Magnet Planet
A logo concept from the Magnet Planet phase.

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 sets the scene, followed by an AI voice which delivers the player's assignments and doubles as the vehicle for explaining the game's rules. The voice belongs to Astral Cortex Industries, an interstellar conglomerate running faster-than-light travel networks between orbital bodies known as "lunar nodes". The monoliths scattered across these moons are part of an underground megastructure harnessing the energy of the moon's core, and that energy powers the travel network.

The monoliths on this node have been deactivated, and reactivating them is the player's job. It is done with a probe mounted on the character's shoulder, the Cortex Energy Device. The last one malfunctions, which sends the player down into the tunnels towards the core, and into a boss encounter with the core itself.

The player approaching a monolith standing on the lunar surface
Approaching a monolith, the player's primary objective.
An incoming transmission from Astral Cortex Industries
Assignments arrive as transmissions from Astral Cortex Industries.

Landscape

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.

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.

Close view of the lunar surface, with rocks and craters blended into the displaced landscape material
Lunar terrain showing the tessellated landscape material
The landscape material in situ, with volumetric fog and post processing.

VFX

I aimed for aesthetic consistency throughout the game's visuals, both within its visual context, and its design language.

Energy is the game's main resource, represented in the game's predominant cyan colour for effects and UI. Holographic effects are used for the in-game UI, which grounds part of the player's interface in the game's world.

Electrical effects - using ribbon particles - served as visual tissue for some mechanics.

Post processing was used to enhance the feeling of being in the void of space, and is also used for cinematic features, while volumetrics were used as ambient dust instead of atmospheric fog.

Cyan tracer fire and muzzle flash lighting the lunar surface during combat with a droid
VFX needed to feel both appropriate to the world and the game's design language.
The in-game map rendered as a cyan holographic projection of the moon
The in-game interface, drawn as a holographic projection.

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.

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 player character, an astronaut in a spliced-together suit
The player character, built from edited assets and rigged in Blender.

The Gameplay

The primary gameplay loop involves reaching monoliths before you run out of energy. Energy is the player's health and manna combined, spent by taking damage and by using abilities. In the context of the game's fictional world it also synthesizes the character's oxygen supply, so it drains over time regardless.

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

The player crossing an open lunar plain towards a structure
Traversing the surface between objectives.
The player deploying a ladder module against a cliff face
The ladder module. Placement logic is based on traces and trigonometry.
The player using the rifle module against a corrupted droid
The rifle module, used to destroy corrupted droids.

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

The Hoverbot, a spherical hovering droid
The Hoverbot patrols set routes and attacks when alerted.
The Spiderbot, a four-legged droid embedded in the lunar surface
The Spiderbot lies embedded in the ground until approached.

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.

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.

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.

Other Features

Covering the entire development of Moon Runner would mean elaborating on many more features that I haven't included here, such as:

  • Level design: cliffs & craters
  • Metrics: gravity & fall damage
  • Progress: upgrades & unlocks
  • Lighting: dynamic sun & lunar GI
  • User interface: the spherical map and other menus
  • Input: gamepad & input mapping
  • More enemies: skull ghosts & the final boss
  • Competition: leaderboards & speedrun mode

Scrapped Features

A number of features I worked on didn't make it into the final game. Most were dropped for the same reason: protecting the scope of the project.

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.

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